Tutorial de PHP y MySQL2
Tutorial de PHP y MySQL2
Tutorial de PHP y MySQL2
1.
2.
3.
4.
Sintaxis en PHP
o
Mi primer script
Variables y Operadores
Sentencias de Control
Las Tablas
Las Funciones
Include() y require()
Tiempo y fecha
Formularios
o
Los Formularios
Aadir registros
Modificar registros
Borrar registros
1/39
1. Sintaxis en PHP
Mi primer script
Una vez que ya tenemos instalados PHP y MySQL, y el servidor Apache
configurado para usarlos, podemos comenzar a escribir nuestro primer script en
PHP.
Ejemplo script php
<html>
<body>
<?php
$myvar = "Hola. Este es mi primer script en PHP \n";
//Esto es un comentario
echo $myvar;
?>
</body>
</html>
Una vez escrito esto lo salvamos en un fichero con la extensin php (la nueva
versin de PHP, la 4, utiliza la extensin php), y lo colocamos en nuestro servidor,
http://localhost/test.php. Ahora si ponemos esta URL en nuestro navegador
veremos una lnea con el texto "Hola. Este es mi primer script en PHP".
Lo primero que apreciamos en el script son sus delimitadores. En la primera
lnea del script vemos <?php que nos indica que comienza un script en PHP, y en
la ltima colocamos ?> para indicar el final del script. Hay que destacar que todas
las lneas que se encuentre entre estos delimitadores deben acabar en punto y
coma, excepto las sentencias de control (if, swicht, while, etc.).
Como en toda programacin, es importante poner muchos comentarios, para lo
cual si queremos comentar una sola lnea tenemos que poner al principio de la lnea
//, si lo que queremos es comentar varias utilizaremos los delimitadores /* - */.
Para que el servidor envi texto utilizaremos la instruccin echo, aunque tambin
podemos utilizar printf de uso similar al del C o Perl.
Finalmente, vemos que la palabra myvar comienza con el signo dlar ($).
Este smbolo le indica a PHP que es una variable. Nosotros le hemos asignado un
texto a esta variable, pero tambin pueden contener nmeros o tablas (arrays). Es
importante recordar que todas las variables comienzan con el signo dlar.
Tambin habris observado que el texto que le asignamos a la variable termina con
\n, esto no se imprime sirve para indicarle al navegador una nueva lnea.
2/39
Variables y operadores
Variables:
Como vimos antes todas la variables deben precedidas por signo dlar ($), y
le asignamos contenido con el signo igual (=). Con las variables, PHP distingue
entre maysculas y minsculas, por lo que no es lo mismo $myvar que $Myvar,
stas son dos variables totalmente distintas.
<html>
<body>
<?php
$myvar = "SEVILLA \n";
$Myvar = "MADRID \n";
//Esto imprimir SEVILLA
echo $myvar;
//Esto imprimir MADRID
ECHO $Myvar;
?>
</body>
</html>
Como veis he utilizado dos formas de escribir echo, en maysculas y en
minsculas, para indicaros que PHP no las distingue a la hora de usar funciones o
sentencias del lenguaje.
El uso de la barra invertida, como en \n, no es obligatorio, pero ayuda a la
depuracin del cdigo que enviamos al navegador, adems del \n existen otros
usos:
\" Carcter dobles comillas
\\ Carcter barra invertida
\n Nueva lnea
\r Retorno de carro
\t Tabulador horizontal
Constantes:
Las constantes son similares a las variables, con la salvedad de que no llevan el
signo dlar delante, y slo la podemos asignar una vez. Para definir una constantes
usaremos la funcin define como sigue:
<html>
<body>
<?php
define ("CONSTANTE", "Hola Mundo");
printf (CONSTANTE);
?>
3/39
</body>
</html>
PHP crea diversas constantes al arrancar, como PHP_VERSION que contiene la
versin de PHP, TRUE que le asigna 1 o FALSE que le asigna 0.
Operadores Aritmticos:
$a + $b
$a - $b
$a * $b
$a / $b
$a % $b
$a++
$a--
Suma
Resta
Multiplicacin
Divisin
Resto de la divisin de $a por $b
Incrementa en 1 a $a
Resta 1 a $a
Operadores de Cadenas:
El nico operador de cadenas que existen es el de concatenacin, el punto.
Pero no os asustis, PHP dispone de toda una batera de funciones que os
permitirn trabajar cmodamente con las cadenas.
$a = "Hola ";
$b = $a . "Mundo";
En este punto hay que hacer una distincin, la interpretacin que hace PHP
de las simples y dobles comillas. En el segundo caso PHP interpretar el contenido
de la cadena.
$a = "Mundo";
echo = 'Hola $a'; //Esto escribir "Hola $a"
echo = "Hola $a"; //Esto escribir "Hola Mundo
Operadores de Comparacin:
$a
$a
$a
$a
$a
$a
Operadores Lgicos:
$a AND $b
$a && $b
$a OR $b
$a !! $b
$a XOR $b
!$a
4/39
Operadores de Asignacin:
$a = $b Asigna a $a el contenido de $b
$a += $b Le suma a $b a $a
$a -= $b Le resta a $b a $a
$a *= $b Multiplic a $a por $b y lo asigna a $a
$a /= $b Divide $a por $b y lo asigna a $a
$a .= $b Aade la cadena $b a la cadena $a
Sentencias de control
Las sentencias de control permiten ejecutar bloque de cdigos dependiendo
de unas condiciones. Para PHP el 0 es equivalente a Falso y cualquier otro nmero
es Verdadero.
IF...ELSE
La sentencia IF...ELSE permite ejecutar un bloque de instrucciones si la
condicin es Verdadera y otro bloque de instrucciones si sta es Falsa. Es
importante tener en cuenta que la condicin que evaluemos ha de estar encerrada
entre parntesis (esto es aplicable a todas las sentencias de control).
if (condicin) {
Este bloque se ejecuta si la condicin es VERDADERA
} else {
Este boque se ejecuta si la condicin es FALSA
}
Existe una forma sencilla de usar la sentencia IF cuando no tenemos que usar el
ELSE y solo tenemos que ejecutar una lnea de cdigo.
if ($a > 4) echo "$a es mayor que 4";
IF...ELSEIF...ELSE
La sentencia IF...ELSEIF...ELSE permite ejecuta varias condiciones en cascada.
Para este caso veremos un ejemplo, en el que utilizaremos los operadores lgicos.
<?php
if ($nombre == ""){
echo "T no tienes nombre";
} elseif (($nombre=="eva") OR ($nombre=="Eva")) {
echo "Tu nombre es EVA";
} else {
echo "Tu nombre es " . $nombre;
}
5/39
SWITCH...CASE...DEFAULT
Una alternativa a IF...ELSEIF...ELSE, es la sentencia SWITCH, la cul evala y
compara cada expresin de la sentencia CASE con la expresin que evaluamos, si
llegamos al final de la lista de CASE y encuentra una condicin Verdadera, ejecuta
el cdigo de bloque que haya en DEFAULT. Si encontramos una condicin verdadera
debemos ejecutar un BREAK para que la sentencia SWITCH no siga buscando en la
lista de CASE. Veamos un ejemplo.
<?php
switch ($dia) {
case "Lunes":
echo "Hoy es Lunes";
break;
case "Martes":
echo "Hoy es Martes";
break;
case "Mircoles":
echo "Hoy es Mircoles";
break;
case "Jueves":
echo "Hoy es Jueves";
break;
case "Viernes":
echo "Hoy es Viernes";
break;
case "Sbado":
echo "Hoy es Sbado";
break;
case "Domingo":
echo "Hoy es Domingo";
break;
default:
echo "Esa cadena no corresponde a ningn da de la semana";
}
?>
WHILE
La sentencia WHILE ejecuta un bloque de cdigo mientras se cumpla una
determinada condicin.
<?php
$num = 1;
while ($num < 5) {
echo $num;
6/39
$num++;
}
?>
Podemos romper un bucle WHILE utilizando la sentencia BREAK.
<?php
$num = 1;
while ($num < 5) {
echo $num;
if ($num == 3){
echo "Aqu nos salimos \n";
break;
}
$num++;
}
?>
DO...WHILE
Esta sentencia es similar a WHILE, salvo que con esta sentencia primero
ejecutamos el bloque de cdigo y despus se evala la condicin, por lo que el
bloque de cdigo se ejecuta siempre al menos una vez.
<?php
$num = 1;
do {
echo $num;
if ($num == 3){
echo "Aqu nos salimos \n";
break;
}
$num++;
} while ($num < 5);
?>
FOR
El bucle FOR no es estrictamente necesario, cualquier bucle FOR puede ser
sustituido fcilmente por otro WHILE. Sin embargo, el bucle FOR resulta muy til
cuando debemos ejecutar un bloque de cdigo a condicin de que una variable se
encuentre entre un valor mnimo y otro mximo. El bucle FOR tambin se puede
romper mediante la sentencia BREAK.
<?php
for ($num = 1; $num <=5; $num++){
echo $num;
if ($num == 3){
7/39
Las tablas
Las tablas (o array en ingls), son muy importantes en PHP, ya que
generalmente, las funciones que devuelven varios valores, como las funciones
ligadas a las bases de datos, lo hacen en forma de tabla.
En PHP disponemos de dos tipos de tablas. El primero sera el clsico, utilizando
ndices:
<?php
$ciudad[] = "Pars";
$ciudad[] = "Pars";
$ciudad[] = "Roma";
$ciudad[] = "Sevilla";
$ciudad[] = "Londres";
print ("yo vivo en " . $ciudad[2] . "<BR>");
?>
Esta es una forma de asignar elementos a una tabla, pero una forma ms
formal es utilizando la funcin array.
<?php
$ciudad = array("Pars", "Roma", "Sevilla", "Londres");
//contamos el nmero de elementos de la tabla
$numelementos = count($ciudad);
//imprimimos todos los elementos de la tabla
for ($i=0; $i < $numele mentos; $i++)
{
print ("La ciudad $i es $ciudad[$i] <BR>");
}
?>
Sino se especifica, el primer ndice es el cero, pero podemos utilizar el operador
=> para especificar el ndice inicial.
8/39
Para entenderlo, que mejor que un ejemplo, supongamos que tenemos una
tabla en al que cada elemento almacena el nmero de visitas a nuestra web por
cada da de la semana.
Utilizando el mtodo clsico de ndices, cada da de la semana se representara
por un entero, 0 para lunes, 1 para martes, etc.
$visitas[0] = 200;
$visitas[1] = 186;
si usamos las tablas asociativas sera
$visitas[lunes] = 200;
$vis itas[martes] = 186;
Ahora bien, recorrer una tabla y mostrar su contenido es sencillo utilizando los
ndices, pero cmo hacerlo en las tablas asociativas?. La manipulacin de las tabas
asociativas se a hace travs de funciones que actan sobre un puntero interno
que indica la posicin. Por defecto, el puntero se sita en el primer elemento
aadido en la tabla, hasta que es movido por una funcin:
current - devuelve el valor del elemento que indica el puntero.
pos - realiza la misma funcin que current.
reset - mueve el puntero al primer elemento de la tabla.
end - mueve el puntero al ltimo elemento de la tabla.
next - mueve el puntero al elemento siguiente.
prev - mueve el puntero al elemento anterior.
count
9/39
<?php
$visitas=array("lunes"=>200,"martes"=>186,"mircoles"=>190,"jueves"=>17
5);
reset($visitas);
while (list($clave, $valor) = each($visitas))
{
echo "el da $clave ha tenido $valor visitas<BR>";
}
?>
La funcin each()devuelve el valo r del elemento actual, en este caso, el valor
del elemento actual y su clave, y desplaza el puntero al siguiente, cuando llega al
final devuelve FALSO, y termina el bucle while().
Tablas multidimensionales
Las funciones
Muchas veces, cuando trabajamos en el desarrollo de una aplicacin, nos surge
la necesidad de ejecutar un mismo bloque de cdigo en diferentes partes de
nuestra aplicacin. Una Funcin no es ms que un bloque de cdigo al que le
pasamos una serie de parmetros y nos devuelve un valor. Como todos los
lenguajes de programacin, PHP trae una gran cantidad de funciones para nuestro
10/39
uso, pero las funciones ms gran cantidad de funciones para nuestro uso, pero las
funciones ms importantes son las que nosotros creamos.
Para declara una funcin debemos utilizar la instruccin function seguido del
nombre que le vamos a dar, y despus entre parntesis la lista de argumentos
separados por comas, aunque tambin habr funciones que no recojan ningn
argumento.
function nombre_de_funcion (arg_1, arg_2, ..., arg_n)
{
bloque de cdigo
}
Cualquier instruccin vlida de PHP puede aparecer en el cuerpo (lo que antes
hemos llamado bloque de cdigo) de una funcin, incluso otras funciones y
definiciones de clases.
En PHP no podemos redefinir una funcin previamente declarada, y adems en
PHP, las funciones deben definirse siempre antes de que se invoquen, en PHP4 este
requerimiento ya no existe.
La instruccin RETURN
Cuando invocamos una funcin, la ejecucin del programa pasa a ejecutar las
lneas de cdigo que contenga la funcin, y una vez terminado, el programa
contina su ejecucin desde el punto en que fue llamada la funcin.
Existe una manera de terminar la ejecucin de la funcin aunque an haya
cdigo por ejecutar, mediante el u haya cdigo por ejecutar, mediante el uso de la
instruccin return terminamos la ejecucin del cdigo de una funcin y devolvemos
un valor. Podemos tener varios return en nuestra funcin, pero por lo general,
cuantos ms return tengamos menos reutilizable ser nuestra funcin.
<?php
function mayor ($x, $y)
{
if ($x > $y) {
return $x." es mayor que ".$y;
} else {
return $y." es mayor que ".$x;
}
}
?>
Aunque quedara mejor:
<?php
function mayor ($x, $y)
{
$msg = "";
if ($x > $y) {
$msg = $x." es mayor que ".$y;
11/39
} else {
$msg = $y." es mayor que ".$x;
}
return $msg;
}
?>
Con la instruccin return puede devolverse cualquier tipo de valor, incluyendo
tablas y objetos. PHP solo permite a las funciones devolver un valor, y para
solventar este pequeo problema, si queremos que nuestra funcin devuelva varios
tenemos que utilizar una tabla (array).
Existen dos formas de pasar los parmetros a una funcin, por valor o por
referencia.
Cuando pasamos una variable por valor a una funcin, ocurra lo que ocurra en
sta en nada modificar el contenido de la variable. Mientras que si lo hacemos por
referencia, cualquier cambio acontecido en la funcin sobre la variable lo har
para siempre.
En PHP, por defecto, las variables se pasan por valor. Para hacerlo por
referencia debemos anteponer un ampersand (&) a la variable.
<?php
function suma ($x, $y)
{
$x = $x + 1;
return $x+$y;
}
$a = 1;
$b = 2;
//parmetros por valor
echo suma ($a, $b);
echo $a;
// imprimir 4
// imprimir 1
// imprimir 4
//imprimir 2
?>
Si queremos que un parmetro de una funcin se pase siempre por referencia
debemos anteponer un ampersand (&) al nombre del parmetro en la definicin de
la funcin.
En PHP podemos definir valores por defecto para los parmetroS de una
funcin. Estos valores tienen que ser una expresin constante, y no una variable o
miembro de una clase. Adems cuando usamos parmetros por defectos, stos
12/39
deben estar a la derecha de cualquier parmetro sin valor por defecto, de otra
forma PHP nos devolver un error.
<?php
function suma ($x=1, $y)
{
$x = $x + 1;
return $x+$y;
}
?>
Si ejecutamos esta funcin nos dara error, ya que hemos dado a $x el valor 1
por defecto y la hemos colocado a la izquierda de un parmetro que no tiene valor
por defecto. La forma correcta es:
<?php
function suma ($y, $x=1)
{
$x = $x + 1;
return $x+$y;
}
?>
Cabe destacar que PHP no soporta un nmero variables de parmetros, pero
PHP4 s.
Llegados a este punto, damos un paso atrs y volvemos a las variables, para
distinguir entre variables estticas (static) y globales (global). Las variables
estticas se definen dentro de una funcin, la primera vez que es llamada dicha
funcin la variable se inicializa, guardando su valor para posteriores llamadas.
<?php
function contador ()
{
static $count = 0;
$count = $count + 1;
return $count;
}
echo contador()."<BR>"; // imprimir 1
echo contador()."<BR>"; // imprimir 2
echo contador()."<BR>"; // imprimir 3
?>
Las variables globales, no se pueden declarar dentro de una funcin, lo que
hacemos el llamar a una variable que ya ha sido declarada, tomando el valor que
tenga en ese momento, pudiendo se modificado en la funcin.
<?php
var $a = 1;
function ver_a()
13/39
{
global $a;
echo $a."<BR>"; // imprimir el valor de $a
$a += 1; // sumamos 1 a $a
}
echo ver_a(); // imprimir 1
echo ver_a(); // imprimir 2
$a = 7;
echo ver_a(); // imprimir 7
echo ver_a(); // imprimir 8
?>
Funciones Variable
14/39
<?php
require ("config.inc");
include ("header.inc");
echo $cadena;
include ("footer.inc");
?>
15/39
<?php
$cadena = "Hola Mundo";
?>
Ejemplo de librera sera el siguiente:
Fichero libreramatemtica.php:
<?
function maximo()
{
$numero=func_num_args();
if ($numero)
{
$elemento1=func_get_arg(0);
for($i=1;$i<$numero; $i++)
{
$elemento2=func_get_arg($i);
$elemento1=($elemento1>$elemento2)?$elemento1:$elemento2;
}
}
return $elemento1;
}
?>
Y el fichero PHP que llamara a la librera matemtica sera:
<?
require("libreramatemtica.php");
echo maximo(3,5,8,2,3,4,5,6);
?>
16/39
Tiempo y fecha
time
am o pm
AM o PM
Minutos
Dia de la semana
Segundos
Ao con 2 dgitos
Ao con 4 dgitos
date("Y")
-> 2000
17/39
18/39
Funciones de Cadena
PHP provee de muchas funciones interesantes para trabajar con cadenas,
veremos solo algunas:
strlen - Devuelve la longitud de una cadena (numero de caracteres)
explode, split - Parte una cadena de acuerdo a un carcter separador, y devuelve
un vector con dichas divisiones.
chop , rtrim- Elimina los espacios finales de una cadena, as como sus saltos de
linea
strpos - Busca una cadena dentro de otra y devuelve su posicin.
str_replace - Reemplaza una cadena por otra.
<?php
$cadena = "hola";
$otracadena = "hola- mundo";
$longitud = str_len($cadena); //devuelve 4
$partes = explode("-",$otracadena); //genera el array $partes con
//$partes[0]="hola" y $partes[1]="mundo";
$chop = chop($cadena."\n"); //agregamos un \n para probar, pero chop lo elimina
$reemplaza = str_replace("- "," ",$otracadena); //$reemplaza contiene Hola Mundo.
//Notese que cambiamos el - por un espacio
?>
Otras funciones de cadenas son:
trim()
19/39
strtolower() y strtoupper()
La sintaxis de estas funciones es similar a las anteriores <? strtolower(cadena) ?> y <?
strtoupper(cadena) ?> Estas funciones convierten todos los caracteres de la cadena a
minsculas o maysculas. Ejemplo:
<?
$var = "EsTAmos APRENdiendo funCIOnes BAsicaS";
//aplicamos las 2 funciones...
echo strtolower($vartxt3),"<BR>",strtoupper($vartxt3);
?>
Sale esto...
substr
Sale esto...
20/39
2. Formularios
Los formularios
Los Formularios no forman parte de PHP, sino del lenguaje estndar de
Internet, HTML, pero como stos van a aparecer muchas veces durante el curso,
vamos a dedicar esta algunas lneas a ellos. Lo que viene a continuacin es HTML y
no PHP.
Todo
formulario
comienza
con
la
etiqueta
<FORM
ACTION="lo_que_sea.php" METHOD="post/get">. Con ACTION indicamos el
script que va procesar la informacin que recogemos en el formulario, mie ntras que
METHOD nos indica si el usuario del formulario va ha enviar datos (post) o
recogerlos (get). La etiqueta <FORM> indica el final del formulario.
A partir de la etiqueta <FORM> vienen los campos de entrada de datos que
pueden ser:
Cuadro de texto:
<textarea
rows="5"
name="descripcion"
cols="20">Es
rojo</textarea>
Casilla de verificacin:
21/39
de
color
22/39
if ($_POST) {
$nombre=$_POST[nombre];
$sexo=$_POST[sexo] ;
$edad=$_POST[edad] ;
$sistema=$_POST[sistema];
$futbol=$_POST[futbol];
$aficiones=$_POST[aficiones];
echo "Hola <b>" . $nombre . "</b> que tal ests<BR>\n";
echo "Eres " . $sexo . "<BR>\n";
echo "Tienes " . $edad . "<BR>\n";
echo "Tu sistema favorito es " . $sistema . "<BR>\n";
if ($futbol) {
echo "T e gusta el ftbol <BR>\n";
} else {
echo "NO te gusta el ftbol <BR>\n";
}
if ($aficiones != "") {
echo "Tus aficiones son: <BR>\n";
echo nl2br($aficiones);
} else {
echo "NO tienes aficiones <BR>\n";
}
}
echo "<a href='formulario.htm'>VOLVER AL FORMULARIO</a>"
?>
Una vez rellenados los datos del formulario, pulsamos el botn Enviar datos,
con lo que le campo enviar toma lo que su etiqueta value indica, es decir
enviar="Enviar datos". En nuestro script lo primero que evaluamos es que se
haya enviado el formulario, y para ello nada mejor que comprobar que la variable
de sistema $_POST no est vaca.
Tambin podemos fusionar el cdigo de ambos fichero, nos ahorraramos uno.
<HTML>
<BODY>
<? If (!$_POST)
{
?>
<FORM METHOD="post" ACTION=<? Echo $_SERVER[PHP_SELF] ?>>
<input type="hidden" name="edad" value="55">
<p>Tu nombre <input type="text" name ="nombre" size="30"
value="jose"></p>
<p>Tu sistema favorito
<select size="1" name="sistema">
23/39
$nombre=$_POST[nombre];
$sexo=$_POST[sexo] ;
$edad=$_POST[edad] ;
$sistema=$_POST[sistema];
$futbol=$_POST[futbol];
$aficiones=$_POST[aficiones];
echo "Hola <b>" . $nombre . "</b> que tal ests<BR>\n";
echo "Eres " . $sexo . "<BR>\n";
echo "Tienes " . $edad . "<BR>\n";
echo "Tu sistema favorito es " . $sistema . "<BR>\n";
if ($futbol) {
echo "Te gusta el ftbol <BR>\n";
} else {
echo "NO te gusta el ftbol <BR>\n";
}
if ($aficiones != "") {
echo "Tus aficiones son: <BR>\n";
echo nl2br($aficiones);
} else {
echo "NO tienes aficiones <BR>\n";
}
?>
24/39
</BODY>
<HTML>
La variable de entorno $_SERVER[PHP_SELF] , es una variable de entorno
que nos devuelve el nombre del script que estamos ejecutando. Y por ltimo, hacer
notar el uso de la funcin nl2br(),con la cul sustituimos los retornos de carro del
texto, los cules no reconocen los navegadores, por la etiqueta <BR>.
Descarga de archivos
Aviso
MAX_FILE_SIZE debe ser consultado por el navegador; aun as es sencillo saltarse este
mximo por lo tanto no se debe presuponer que el navegador siempre lo respetar. En
contrapartida, la configuracin de PHP relativa al tamao mximo no puede ser obviada.
Las variables definidas para los archivos enviados varan en funcin de la versin y
configuracin de PHP que se utilice. Las variables de las que hablamos a continuacin sern
definidas en la pgina destino despus de una recepcin de fichero correcta. El array
$_FILES se inicializar.
25/39
$_FILES['userfile']['name']
El nombre original del fichero en la mquina cliente.
$_FILES['userfile']['type']
El tipo mime del fichero (si el navegador lo proporciona). Un ejemplo podra ser
"image/gif".
$_FILES['userfile']['size']
El tamao en bytes del fichero recibido.
$_FILES['userfile']['tmp_name']
El nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo
recibido.
Por defecto, los ficheros sern almacenados en el directorio temporal por defecto del
servidor a no ser que se especifique otra localizacin con la directiva upload_tmp_dir en
php.ini. El directorio temporal por defecto del servidor puede ser modificado cambiando el
valor de la variable de entorno TMPDIR en el contexto en que se ejecuta PHP La
configuracin de las variables de entorno no se puede realizar en PHP a travs de la funcin
putenv(). Esta variable de entorno puede ser utilizada tambin para asegurarnos que otras
operaciones con archivos recibidos estn funcionando correctamente.
Los siguientes ejemplos son validos para versiones de PHP 4 superiores a la 4.0.2. Veanse
las funciones is_uploaded_file() y move_uploaded_file().
<?php
// In PHP 4.1.0 or later, $_FILES should be used instead of
$HTTP_POST_FILES.
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
copy($_FILES['userfile']['tmp_name'],
"/place/to/put/uploaded/file");
} else {
echo "Possible file upload attack. Filename: " .
$_FILES['userfile']['name'];
}
/* ...or... */
move_uploaded_file($_FILES['userfile']['tmp_name'],
"/place/to/put/uploaded/file");
?>
El script PHP que recibe el fichero, debe implementar la lgica necesaria para
determinar que debe ser realizado con el fichero. Se puede utilizar, por ejemplo, la
variable $_FILES['userfile']['size'] para descartar los ficheros demasiado chicos o
26/39
mysql_close
mysql_connect
27/39
mysql_error
string mysql_error();
Devuelve el texto asociado al error producido en la ltima operacin realizada por la
base de datos.
mysql_fetch_array
28/39
<?php
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_array($result)) {
echo $row["user_id"];
echo $row["fullname"];
}
mysql_free_result($result);
?>
mysql_insert_id
int mysql_insert_id(void);
Esta funcin devuelve el ID (identificador) generado para los campos
autonumricos (AUTO_INCREMENTED). El ID devuelto es el correspondiente al de
la ltima operacin INSERT.
mysql_list_dbs
int mysql_listdbs(void);
Devuelve un puntero que contiene las bases de datos disponibles para el servidor
actual (msql daemon). Este valor se utiliza con la funcin mysql_dbname( ).
mysql_list_tables
mysql_query
mysql_select_db
29/39
30/39
MySQL
1. Instalando MySQL
Instalar MySQL en su versin para Windows, e ir haciendo pruebas antes de subir
nuestras pginas, es bastante sencillo. En la seccin Programas podis encontrarlo
para bajarlo.
Simplemente haced doble click en el programa de instalacin, responded a las
tpicas preguntas de dnde lo quieres instalar, etc., y ya est.
Ahora hay que ponerlo en marcha. Para ello, siempre debe estar ejecutndose
(estar en segundo plano) el programa mysqld.exe, situado en el subdirectorio bin
del directorio en el que se haya instalado el programa. Con este programa en
marcha, ejecutaremos mysql.exe para ver cmo entrar sentencias SQL, o
directamente podremos probar scripts PHP que conecten con el servidor MySQL.
Como PHP lleva soporte interno para MySQL, nicamente hemos de acordarnos de
tener en memoria el programa mysqld.exe, el resto lo hace l solo, como iremos
viendo en los siguientes captulos.
2. Ejecutando acciones desde MySQL
Una vez instalado y en marcha el programa mysqld.exe, vamos a ver algunas
acciones de ejemplo que podemos realizar bajo el entorno de MySQL. Para ello,
ejecutamos el programa mysql.exe (tambin en el subdirectorio bin), y entraremos,
viendo algo como esto:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.23.24-beta-debug
Type 'help;' or '\h' for help. Type '\c' to clear the buffer
mysql> _
Un mensaje de bienvenida, y el prompt del sistema, que ha cambiado por mysql>.
Vamos a ver cmo crear una base de datos. La sintaxis ser CREATE DATABASE
NombreBD, por ejemplo:
mysql> CREATE DATABASE Prueba;
Query OK, 1 row affected (0.72 sec)
mysql> _
Con esto, acabamos de crear la base de datos Pruebas, que se habr grabado en el
subdirectorio data del programa, dentro de un directorio llamado como la base de
31/39
datos, es decir, Pruebas. Podemos ver las bases de datos que existen en Mysql, sin
ms que hacer:
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| Prueba |
| mysql |
| test
|
+----------+
3 rows in set (0.55 sec)
mysql> _
Ahora que sabemos qu bases de datos existen (no borris las otras dos, porque
son propias del programa), vamos a elegir una con la que trabajar, escribiendo
esto:
mysql> USE Prueba;
Database changed
mysql> _
Con la base de datos que vamos a usar activa, crearemos una tabla, haciendo esto:
mysql> CREATE TABLE USUARIOS(
-> USUARIO VARCHAR(30) NOT NULL,
-> EMAIL VARCHAR(50) NOT NULL,
-> NOMBRE VARCHAR(20) NOT NULL,
-> APELLIDOS VARCHAR(40) NOT NULL,
-> ICONO INTEGER,
-> PRIMARY KEY(USUARIO));
Query OK, 0 rows affected (0.83 sec)
mysql> _
Por claridad, he escrito cada campo en una lnea. Como an no haba escrito el
punto y coma terminador de sentencia SQL, al darle a ENTER l ha puesto la flecha
-> y la indentacin.
Y ahora que hemos creado la tabla, vamos a borrarla para ello, haremos:
mysql> DROP TABLE USUARIOS;
Query OK, 0 rows affected (0.11 sec)
mysql> _
Llevad cuidado cuando borris una tabla, pues no quedar ni rastro de ella, as que
luego no podris recuperar los datos que hubiera. Hay que estar muy seguro de
que se quiere borrar una tabla para hacerlo.
Y, puestos a borrar, vamos a borrar la base de para lo que haremos:
32/39
33/39
mysql> _
Si queremos realizar ahora una consulta, ser tan sencillo como escribir lo
siguiente:
mysql> SELECT USUARIO FROM USUARIOS;
+--------- +
| USUARIO |
+--------- +
| MADDY |
+--------- +
1 row in set (0.55 sec)
mysql> _
Por ltimo, vamos a ver una accin que nos resultar til cuando no nos acordemos
de cmo estaba definida una tabla, qu campos tena, de qu tipo, etc., se trata de
SHOW COLUMNS FROM tabla. Lgicamente, para ello debemos tener seleccionada
una base de datos ;-)
mysql> SHOW COLUMNS FROM USUARIOS;
+-----------+-------------+------+----- +---------+-------+--------------------------------+
| Field
| Type
| Null | Key | Default | Extra | Privileges
|
+-----------+-------------+------+----- +---------+-------+--------------------------------+
| USUARIO | varchar(30) |
| PRI |
|
| select,insert,update,references
|
| EMAIL
| varchar(50) |
|
|
|
| select,insert,update,references |
| NOMBRE | varchar(20) |
|
|
|
| select,insert,update,references |
| APELLIDOS | varchar(40) |
|
|
|
| select,insert,update,references |
| ICONO
| int(11)
| YES |
| NULL |
| select,insert,update,references
|
+-----------+-------------+------+----- +---------+-------+--------------------------------+
5 rows in set (0.60 sec)
Y aqu tenemos la informacin que queramos
34/39
{
$pagina=$_GET['pagina'];
}
else
{
$pagina=0;
}
$inicio=$pagina * $LongitudDePagina;
$cadenasql="select * from personas limit $inicio,$LongitudDePagina";
$r=mysql_query($cadenasql,$conexion);
echo "<table border='2'>
<tr><td>Nombre<td>
<td>Apellidos<td>
<td>Edad<td>
<td>DNI<td></tr>";
while ($fila=mysql_fetch_array($r,MYSQL_ASSOC))
{
echo "<tr><td>{$fila['Nombre']}<td>
<td>{$fila['Apellidos']}<td>
<td>{$fila['Edad']}<td>
<td>{$fila['Dni']}<td>
<tr><a href="comentarios.php?<? echo $fila['id_noticia']?>" title ="Ver
comentarios"></a></tr>";
}
for ($i=0;$i<$paginas;$i++)
{
if ($i!=$pagina)
{
echo "<a href='paginacion.php?pagina=$i'>$i</a>";
}
else
{
echo "<b>- $i- </b>";
}
}
?>
35/39
Aadir registros
En esta leccin vamos ver como podemos aadir nuevos registros a nuestra
BD. La recogida de datos la vamos a hacer a travs de un interfaz de web. En
primer lugar vamos a crear una pgina web con un simple formulario, con los
campos que deseamos.
Veamos el siguiente ejemplo.
<html>
<!-- creation date: 20/04/2005 -->
<head>
<title>Formulario de insercin de datos en PHP</title>
</head>
<body>
<form action="<?echo $_SERVER['PHPSELF']?>" method="post">
Inserte su nombre:<input type="text" name="Nombre" size=40 maxlength=40>
<br>
Inserte
sus
apellidos:<input
type="text"
name="Apellidos"
size=40
maxlength=40>
<br>
Inserte su edad:<input type="text" name="Edad" size=40 maxlength=40>
<br>
Inserte su DNI:<input type="text" name="DNI" size=40 maxlength=40>
<br>
<input type="submit" value="Introducir datos">
</form>
<? if ($_POST)
{
$nombre=$_POST['Nombre'];
$apellidos=$_POST['Apellidos'];
$edad=$_POST['Edad'];
$DNI=$_POST['DNI'];
$conexion=mysql_connect("prueba","a 1","a1");
mysql_select_db("a 1");
$cadenasql="insert into personas values('$nombre','$apellidos',$edad,$DNI) ";
$r=mysql_query($cadenasql,$conexion);
if ($r)
{
echo "Insercin correcta";
}
else
{
echo "Insercin incorrecta";
}
36/39
}
?>
</body>
</html>
37/39
if (!empty($nombre))
{
$asigna.= nombre=$nombre ;
}
if (!empty($edad))
{
$asigna.= ,edad= $edad ;
}
if (!empty($apellidos))
{
$asigna.= ,apellidos=$apellidos ;
}
}
$cadenasql="update personas
$asigna
where dni= $DNI";
$r=mysql_query($cadenasql,$conexion);
if ($r)
{
echo "Actualizacin realizada";
}
else
{
echo "Error bases de datos";
}
}
?>
Nota:
para
saber
si
la
operacin
ha
modificado
algo,
debes
usar
el
mysql_affected_rows
Borrar registros
El proceso de borrar un registro es idntic o al de modificar, solo que en vez
de utilizar UPDATE utilizamos DELETE en la sentencia SQL. Por tanto el script
quedara como sigue.
Borrado registros de BD por el Dni:
<html>
<!-- creation date: 20/04/2005 -->
<head>
<title>Formulario de borrado de datos en PHP</title>
</head>
<body>
<form action="<?echo $_SERVER['PHPSELF']?>" method="post">
DNI a borrar:<input type="text" name="DNI" size=40 maxlength=40>
<br>
38/39
39/39