Vous êtes sur la page 1sur 27

Curso de Programacin Web UTN PHP avanzado y MySql

PHP Clase 1

Conceptos Bsicos.

Qu es PHP? Las siglas PHP significan PHP: Hypertext Processor o tambin Pre-Hypertext Processor (Procesador Previo al Hipertexto). Es un lenguaje de programacin que sirve para hacer pginas de Internet dinmicas, con la posibilidad de combinarlo con bases de datos. Los script de PHP suelen intercalarse en el cdigo HTML de una pgina, y el encargado de procesar esos scripts es el intrprete del servidor web. El fin de un script PHP es generar una salida (que puede ser texto o cdigo HTML, entre otras cosas), que puede ser diferente segn el caso, ya que la gracia de incluir scripts PHP en una pgina es obtener resultados dinmicos. Funcionamiento. PHP es un lenguaje de lado de servidor. Qu significa esto? Que lo que el programador codifique en PHP dentro de una pgina de Internet, no va a ser interpretado por el cliente (navegador), si no por un servidor que procese el cdigo y devuelva al cliente el cdigo HTML resultante. Cuando nosotros le pedimos al navegador que nos lleve a una pgina en Internet, el navegador le pide al servidor el cdigo de esta pgina, lo interpreta y lo muestra en pantalla. Si en el cdigo de la pgina a la que queremos acceder hay scripts PHP (y por supuesto, el documento tiene extensin .php), antes de que el servidor le entregue al cliente el cdigo de la pgina, estos scripts son interpretados por el servidor, y en vez de devolverle cdigo PHP al cliente, le devuelve el cdigo HTML resultante de procesar esos scripts PHP.

Instalacin Para poder ver los resultados de los scripts PHP, es necesario contar con un servidor que pueda interpretarlos. Un servidor que permite esto es el Apache. Cuando uno quiere hacer un sitio web con PHP, al momento de ponerlo online debe asegurarse que el hosting a contratar cuenta con soporte para PHP y corre el servidor Apache. Si se van a usar bases de datos (generalmente MySQL) tambin hay que asegurarse de que el hosting lo soporte. Para trabajar localmente sin depender de estar subiendo constantemente los archivos al hosting para poder verlos en funcionamiento, podemos instalar el servidor Apache y MySQL en nuestra computadora. Un programa que facilita esta instalacin es el Easy-PHP 1.8. Para poder visualizar los documentos php, estos debern estar guardados en la carpeta www de la carpeta de instalacin del Easy-PHP, y para verlos en el explorador habr que acceder a ellos mediante la url http://localhost/nombredearchivo.php (teniendo el programa Easy-PHP abierto y corriendo).

Alcances Usando PHP en un sitio web, se puede lograr un mayor dinamismo del contenido y, sobre todo combinndolo con la gestin de bases de datos, lograr hacer funcionar algunos de los siguientes ejemplos: Foros Guestbooks Blogs Calendarios Sistemas de Carrito de Compras Restriccin de acceso a sitios web mediante user/password Registro de estadsticas Proceso de Formularios de Email

Intercalando PHP con HTML Un documento PHP puede tener ntegramente cdigo PHP as como intercalaciones de cdigo PHP y HTML. Muchas veces, el contenido de una pgina no es fijo. Ejemplos de esto hay muchsimos, desde algo trivial como mostrar la hora actual en el mensaje de bienvenida de un sitio web, hasta mostrar una lista de productos que un visitante del sitio haya ido agregando a un carrito de compras, los cuales se van listando a medida que el visitante los selecciona. En estos casos, el HTML nos queda corto y necesitamos usar scripts PHP para generar o administrar un contenido generado dinmicamente, el cual seguramente ser slo una porcin de la pgina y no toda entera. Entonces, el contenido esttico de la pgina estar codificado en HTML (diseo, estructura, textos fijos, etc), y el contenido dinmico estar programado en PHP. Para comenzar a introducirnos en la sintaxis de PHP y en cmo intercalar PHP con HTML, se har uso de ejemplos que no reflejan el dinamismo que se puede obtener con PHP, pero ayudarn a dar el primer paso a tomar una idea de cmo se puede llegar a eso. Tenemos el siguiente documento holamundo.php, con HTML y PHP intercalados: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Hola mundo</title> </head> <body> <?php echo "Hola mundo"; ?> </body> </html> Dentro del body de esa pgina, nos encontramos con la sentencia echo Hola mundo; que muestra por pantalla la frase Hola mundo. Sera exactamente lo mismo que figure esa sentencia PHP all a que slo figuren las palabras Hola mundo, que sera un texto comn de HTML. Los elementos que encontramos en este script son, por un lado, los delimitadores de PHP y por otro la sentencia. Los delimitadores son <?php y ?>, y sirven para que cuando el servidor reciba la peticin de holamundo.php, sepa cundo tiene que procesar cdigo PHP y cundo debe dejar de hacerlo. Al encontrarse con el delimitador de apertura <?php, el servidor sabe que all tendr que empezar a interpretar el cdigo PHP para convertirlo en su salida correspondiente en HTML, y al encontrarse con el delimitador de cierre ?>, sabe que debe dejar de interpretar PHP. De esta manera, usando los delimitadores de cdigo PHP, podemos intercalar libremente scripts PHP con cdigo HTML. Por otro lado, tenemos la sentencia PHP que el servidor interpretar. echo es una instruccin del lenguaje PHP que toma como argumento un string (cadena de caracteres) que aparezca a su derecha, y lo muestra por pantalla. En realidad, a ese argumento que recibe lo imprime en el cdigo HTML, en el lugar donde figura el cdigo PHP que lo ejecuta. Si nosotros ejecutamos la pgina holamundo.php en un navegador y despus miramos su cdigo fuente desde el mismo, el resultado ser este: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Hola mundo</title> </head>

<body> Hola mundo </body> </html> Se ver que el servidor interpret el script PHP y en su lugar imprimi su salida correspondiente, que en este caso era simplemente las palabras Hola mundo. Volviendo a la sentencia echo Hola mundo; hay un par de cosas ms para notar. La frase Hola mundo est entre dobles comillas por ser un string. Tambin puede ir entre comillas simples, aunque guardan diferencias que se vern ms adelante. El otro punto muy importante es el punto y coma (;). Todas las sentencias de PHP terminan con un punto y coma. Es la manera que tiene el intrprete de saber que el programador all quiso terminar una sentencia. Mientras terminemos todas las sentencias con un punto y coma, no es siquiera necesario que estn separadas por renglones, podran estar una detrs de la otra en el mismo rengln, y por otro lado, tampoco es necesario que una misma sentencia la expresemos en un solo rengln, podra estar repartida en varios que hasta que no haya un punto y coma en el cdigo, el intrprete de PHP sabe que todava no se termin la sentencia. NUNCA debemos olvidar poner un punto y coma al final de cada sentencia. Ejemplos: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Hola mundo</title> </head> <body> <?php echo "Este es el clsico "; echo "Hola mundo"; ?> </body> </html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Hola mundo</title> </head> <body> <?php echo "Este es el clsico "; echo "Hola mundo"; ?> </body> </html> Ambos cdigos mostrarn por pantalla el mismo mensaje: Este es el clsico Hola Mundo As como hasta ahora se ha usado texto con la instruccin echo, se puede pensar que si ese texto queda impreso en el cdigo fuente de la pgina como HTML cuando ya fue procesado por el intrprete PHP del servidor y devuelto al navegador, tambin podramos imprimir directamente cdigo HTML. Por ejemplo, en vez del script anteriormente usado, podramos reemplazarlo por algo como: <? echo "<p>Hola mundo</p>"; ?> y si ejecutamos holamundo.php en el navegador y vemos su cdigo fuente, nos encontraremos con:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Hola mundo</title> </head> <body> <p>Hola mundo</p> </body> </html>

Sintaxis de PHP Ya se adelantaron en la seccin anterior un par de temas de sintaxis de PHP. Por un lado, las sentencias siempre finalizan con un punto y coma. Por otro, el cdigo PHP siempre debe estar encerrado por sus delimitadores, que pueden ser <?php y ?>, como tambin <? y ?>. Otras cuestiones sobre la sintaxis son los comentarios. Los comentarios de una sola lnea en PHP pueden hacerse empezando la lnea con // o con #. Los comentarios de mltiples lneas estn encerrados entre /* y */ . Por supuesto, slo podrn usarse dentro de las delimitaciones de un script PHP. Por otro lado, tenemos la sintaxis de las variables, que cuenta con las siguientes caractersticas: Las variables SIEMPRE llevan el signo $ (pesos) adelante. Los nicos caracteres que aceptan los nombres de las variables son letras, nmeros y el guin bajo ( _ ). Los nombres de las variables NUNCA pueden llevar espacios ni empezar con un nmero. Los nombres de las variables pueden empezar con letras o con un guin bajo. Los nombres de las variables son sensibles a maysculas y minsculas.

Veamos algunos ejemplos: <?php $Cadena = "Hola Mundo"; //Esto es correcto $cadena = "Hola Mundo"; /* Esto tambin es correcto pero NO es lo mismo que la lnea anterior. $Cadena y $cadena son dos variables distintas */ $_Cadena = "Hola Mundo"; //Esto es correcto $1Cadena = "Hola Mundo"; //Esto NO es correcto $Una Cadena = "Hola Mundo"; //Esto TAMPOCO es correcto. ?> Una observacin interesante sobre la sintaxis de PHP, es que slo es sensible a maysculas y minsculas cuando se trata de nombres de variables y no cuando se trata de funciones o instrucciones del lenguaje. Esto quiere decir, que si en los scripts anteriores escribamos ECHO en vez de echo, el script seguira funcionando.

Variables Una variable en PHP es un espacio de memoria (en el caso de un lenguaje de lado de servidor, un espacio en la memoria del servidor) que guarda un valor, y tiene un identificador (el nombre de la variable) y un tipo de dato (enteros, reales, cadenas, arrays, objetos). No es necesario indicar de qu tipo de dato es una variable, el intrprete de PHP se da cuenta solo segn su contenido, y en muchos casos tambin convierte el tipo de dato de una variable a otro si es conveniente segn el contexto. Para qu usamos variables? Para guardar informacin en ellas que luego usaremos varias veces a lo largo del cdigo de la pgina. Veamos algunos ejemplos de uso de variables: <?php /* Caso 1 */ $Cadena = "Hola Mundo"; //Asignacin de una variable tipo string /* Caso 2 */ echo $Cadena."<br/>"; //Muestra por pantalla el valor de $Cadena /* Caso 3 */

$NumeroUno = 1; //Asignacin de una variable de tipo int. /* Caso 4 */ $NumeroDos = "2"; //Asignacin de una variable tipo string. /* Caso 5 */ echo $NumeroUno + $NumeroDos; //Muestra por pantalla '3'. /* Caso 6 */ echo $NumeroDos + $Cadena; //Muestra por pantalla '2', no realiza la suma. ?> En el Caso 1 vemos un ejemplo simple de asignacin de una variable con el operador de asignacin =. En el Caso 2, vemos un ejemplo de uso de la instruccin echo con una variable en vez de texto y otra cosa a destacar: concatenacin de variables. La concatenacin de variables sirve para unir el valor de una variable con el valor de otra mediante el operador . y que el resultado de sus uniones sea una cadena formada por sus valores. En el Caso 2, echo estara mostrando Hola Mundo<br/>, provocando que despus de mostrar Hola Mundo por pantalla, haya un salto de lnea. En el Caso 3 se muestra un ejemplo de asignacin de un nmero entero a una variable. El Caso 5 y el Caso 6 muestran que el intrprete de PHP se da cuenta de cundo puede operar entre nmeros y strings y cundo no.

Observaciones sobre Cadenas Hay algunos puntos a tener en cuenta en el tratamiento de cadenas. Supongamos que tenemos este script que muestra por pantalla Mi nombre es Juan: <?php $Cadena = "Juan"; echo "Mi nombre es ".$Cadena; ?> Tambin puede escribirse de la siguiente manera sin tener que concatenar variables: <?php $Cadena = "Juan"; echo "Mi nombre es $Cadena"; ?> Pero esto nos trae algunos inconvenientes. Qu pasa si quiero que en una cadena aparezca el smbolo $, o la comilla doble, por ejemplo? Cuando queremos que en una cadena aparezca un caracter que ser evaluado por el intrprete y reemplazado por otro valor, le anteponemos una contrabarra al caracter o cuestin: \. De este modo, el interprete PHP se da cuenta que slo el caracter inmediatamente siguiente a la contrabarra debe ser tomado como texto. Ejemplos: <?php $Cadena = "Juan"; echo "Mi nombre es ".$Cadena; //Muestra por pantalla 'Mi nombre es Juan' echo "Mi nombre es \$Cadena"; //Muestra por pantalla 'Mi nombre es $Cadena' echo "Mi nombre es \"$Cadena\""; //Muestra por pantalla 'Mi nombre es "Juan"' ?> Tambin hay algunos caracteres especiales que producen efectos en las cadenas: \t produce una tabulacin. \n produce un salto de lnea. \r produce un retorno de carro.

Operando con Variables Operadores aritmticos + Suma Resta * Multiplicacin / Divisin

Devuelve el resto de la divisin

Operadores de comparacin == Igualdad != Desigual < Menor que <= Menor igual que > Mayor que >= Mayor igual que Operadores lgicos And Y Or O ! No Operadores de incremento ++$variable --$variable Operadores combinados $variable += 10 $variable -= 10 $variable .= "aado"

Aumenta de 1 el valor de $variable Reduce de uno el valor de $variable

Suma 10 a $variable Resta 10 a $variable Concatena las cadenas $variable y "aado"

Algunos ejemplos: <?php $Var1=1; $Var2=2; $Var3=3; $VarUno="1"; echo echo echo echo ?> Cabe destacar que en los ltimos dos casos de estos ejemplos, en el primero $Var3==$Var2 no devuelve un resultado porque es falso (en realidad devuelve 0). En el ltimo caso, devuelve 1 porque es verdadero. "2x3= ".($Var2*$Var3)."<br>"; //Muestra '2x3= 6' "2+1 es ".($Var2+$VarUno)."<br>"; //Muestra '2+1 es 3' "3 es igual a 2? ".($Var3==$Var2)."<br>"; //No muestra nada como respuesta "1 es igual a \"1\"? ".($Var1==$VarUno)."<br>"; //Muestra '1' como respuesta

Prctica 1 Practicar el uso de variables y particularidades de las cadenas. 1) a) Crear un documento PHP que contenga una tabla en HTML de esta estructura: Nmero 1 Nmero 2 Suma Resta Multiplicacin Divisin Mdulo

Elegir dos nmeros y mediante sentencias PHP, completar las columnas que representan las operaciones entre ellos con su resultado correspondiente. Ejemplo: Nmero 1 5 Nmero 2 3 Suma 8 Resta 2 Multiplicacin 15 Divisin 1.6666666666667 Mdulo 2

b) Cambiar los valores del Nmero 1 y Nmero 2 y comprobar que el resto de las columnas cambien de manera acorde. 2) Supongamos que tenemos que calcular el total de una compra en efectivo de dos productos que figura en un ticket. Por ser en efectivo, a la compra se le aplica un 10% de descuento sobre el total. Un ejemplo de un ticket podra ser: Producto 1 ..... $4 Producto 2 ..... $12

Subtotal ....... $16 Descuento 10% .. $1,60 Total .......... $14,40

a) b)

Proponer 2 productos e imprimir el ticket. Hacer que el descuento pueda variar y que el valor del total cambie en consecuencia.

Variables de tipo Array

Array indexado Las variables de tipo Array son como variables con muchos compartimientos que pueden almacenar varios valores, a los que se puede acceder mediante un ndice. En la sintaxis de Arrays en PHP, el ndice (o clave) se indica entre corchetes. Hay dos maneras de definir un array. a) Dndole un valor a cada posicin accediendo invididualmente por su ndice: <? $familia[0]="Padre"; $familia[1]="Madre"; $familia[2]="Hijo"; echo $familia[0]; //Muestra 'Padre' echo $familia[1]; //Muestra 'Madre' ?> b) Definiendo los valores iniciales separados por comas dentro de array( ):

$familia = array("Padre","Madre","Hijo"); echo $familia[0]; //Muestra 'Padre' echo $familia[1]; //Muestra Madre ?> Los ndices de los array siempre empiezan desde 0, as que hay que tener en cuenta que si se quiere acceder al segundo elemento contenido en un array, habr que acceder a l mediante el ndice 1, por ejemplo.

Array asociativo La diferencia de los Arrays asociativos con los indexados, es que en vez de acceder al contenido de un compartimiento del array por el ndice de su posicin, podemos definir las CLAVES con cadenas que identifiquen mejor el contenido de cada uno de esos compartimientos. Al tener cadenas en vez de un nmero como clave, es mucho ms fcil identificar el valor de cada elemento del array: <? $precios["TV"]=700; $precios["Telefono"]=150; $precios["Computadora"]=1900; echo $precios["Computadora"]; //Muestra '1900' ?> Otra manera de definir un array asociativo es: <? $precios=array("TV"=>1500, "Telefono"=>150, "Computadora"=> 1900); echo $precios["Computadora"]; //Muestra '1900' ?>

Observacin: una funcin muy prctica para usar con arrays es count, que devuelve la cantidad de elementos de un array. <? $un_array=array(4,6,3,6,7,23,1); echo count($un_array); //Muestra 7 ?>

Estructuras de Control

Condicionales: Son estructuras que evaluando una condicin dada, deciden si ejecutar cierto bloque de cdigo u otro.

if: La sintaxis es: if (condicin) { //Cdigo a ejecutar si la condicin es verdadera } else { //Otro cdigo a ejecutar en caso contrario } Ejemplo: <?php $x=4; if ($x>5) { echo "El valor de x es mayor a 5"; } else { echo "El valor de x es menor o igual a 5"; } ?> Salida: El valor de x es menor o igual a 5

switch: Un switch es una estructura que evala el valor de una variable o expresin y depende de su valor, ejecuta cierto bloque de cdigo. Sintaxis:

switch(expresin) { case "a": //Cdigo a ejecutar; break; case "b": //Cdigo a ejecutar; break; case "c": //Cdigo a ejecutar; break; . . . default: //Cdigo a ejecutar por default. } Un switch busca dentro de los case el valor de la variable o expresin evaluada (generalmente se evalan variables). Si lo encuentra, ejecuta el cdigo correspondiente. Si no lo encuentra, ejecuta el cdigo por default. Observaciones: El case por default es opcional. Es importante poner break; al final de cada bloque de cdigo dentro de cada case para que el switch no siga comparando al valor de la variable con los case que le siguen al correcto.

Ejemplo: <?php $examen="Bueno"; switch($examen) { case "Excelente": echo "Su nota fue 10. "; break; case "Muy bien": echo "Su nota fue 8 o 9. "; break; case "Bueno": echo "Su nota fue 6 o 7"; break; case "Regular": echo "Su nota fue 4 o 5"; break; default: echo "Su nota fue menor o igual a 3. "; } ?>

Salida: Su nota fue 6 o 7

Ciclos (o loops): Hay 3 ciclos fundamentales: While El while ejecutar cierto bloque de cdigo mientras una condicin dada a evaluar resulte siempre verdadera. Primero evala si es verdadera la expresin dada como condicin, luego ejecuta el cdigo, y cuando termina de ejecutar la ltima lnea del mismo vuelve a evaluar la condicin. Si sigue siendo verdadera, vuelve a ejecutar el cdigo, si no, deja de ejecutarlo, sale del ciclo y sigue con el cdigo que siga debajo. Sintaxis: while (expresin) { //Cdigo a ejecutar } Observacin: Hay que tener cuidado de no caer en un ciclo infinito, ya que provoca problemas en la computadora (y adems no tendra sentido). Para eso, tras cada vuelta del while hay que asegurarse que en la condicin no se est evaluando lo mismo que la vuelta anterior, cambiando algo de ella a travs del cdigo del mismo while. do... while: Ejecuta una vez cierto bloque de cdigo por primera vez, y luego acta igual que el while. Sintaxis: do { //Cdigo a ejecutar } while (condicin);

For: El for es muy similar al while, pero se asegura de que los valores evaluados en la condicin siempre cambien, y se usa cuando se quiere hacer un ciclo de determinado nmero fijo de veces. Sintaxis: for (inicio; condicin; incremento) { //Cdigo a ejecutar }

Ejemplo:

<?php $amigos=array(Laura,Pablo,Daniela); for ($i=0; $i<count($amigos); $i++) {

Echo $amigos[$i]. "<br />"; } ?> Salida en pantalla: Laura Pablo Daniela En este ejemplo, usamos este for para recorrer todos los valores de un array y mostrarlos por pantalla.

Prctica 2 Basndose en la Prctica 1 ejercicio 1, hacer una tabla similar pero para varios Nmeros1 y varios Nmeros2 usando arrays y un ciclo for. Si la cantidad de Nmeros 1 difiere a la cantidad de Nmeros 2, informar por pantalla que no es posible mostrar la tabla. La tabla debe tener tantas filas como elementos tengan ambos arrays Numeros1 y Numeros2.

PHP Clase 2
Variables Predefinidas, Proceso de Formularios y Envo de Variables por URL.

Variables de Servidor: $_SERVER Una variable predefinida de PHP muy til es la variable $_SERVER. $_SERVER es un array asociativo mediante el cual podemos acceder a informacin relevante a rutas, ubicacin y otras cosas de un script. Algunos ejemplos de claves de esta variable son: 'HTTP_REFERER' La direccin de la pgina que se refiri a la pgina actual (si la hay). 'HTTP_USER_AGENT' Informacin relevante al cliente con el que se navega la pgina. Por ejemplo, el nombre del explorador y su versin. PHP_SELF La direccin relativa a la raz del sitio de la pgina actual. REMOTE_ADDR Direccin IP de donde se est navegando la pgina actual. DOCUMENT_ROOT La direccin (del sistema de archivos) de la carpeta raz del sitio. Slo funciona si estamos en un Servidor Apache. Ejemplo: <? echo echo echo echo echo ?>

$_SERVER['HTTP_REFERER']."<br>"; $_SERVER['HTTP_USER_AGENT']."<br>"; $_SERVER['PHP_SELF']."<br>"; $_SERVER['REMOTE_ADDR']."<br>"; $_SERVER['DOCUMENT_ROOT']."<br>";

Puede dar como resultado lo siguiente por pantalla: http://localhost/tutorial/links.php Mozilla/5.0 (Windows; U; Windows NT 5.1; es-AR; rv:1.8.1) Gecko/20061010 Firefox/2.0 /tutorial/holamundo.php 127.0.0.1 c:/archivos de programa/easyphp1-8/www

Variable $_GET La variable $_GET es otro vector asociativo que guarda toda la informacin enviada de una pgina a otra bajo el mtodo get. Por ejemplo, si nosotros tenemos un formulario con el valor get en la propiedad method, que contenga los campos con nombre Usuario e Email, al enviar ese formulario podemos ver que nos dirige a la pgina especificada en en la propiedad action con algunas variables en su url. Ejemplo http://www.apuntesphp.com.ar/procesoforlulario.php?Usuario=carla&Email=carla.griggio@gmail.com Cuando vemos que tras la url de un documento hay un signo de interrogacin, lo que sigue es el nombre de una variable con su valor correspondiente (Variable=valor), y a cada variable a partir de la segunda en vez de un signo de interrogacin se le antepondr un ampersand (&). La variable $_GET guarda cada una de estas variables, a las que se puede acceder usando el nombre de cada una de ellas como clave del array $_GET. Ejemplo: <?php echo $_GET[Usuario]; //devuelve carla echo $_GET[Email]; //devuelve carla.griggio@gmail.com ?> No slo se usa la variable $_GET para recuperar la informacin enviada por un formulario con mtodo get. Uno mismo puede filtrar informacin en una pgina envindole informacin en la URL. En el siguiente ejemplo tenemos una pgina alumnos.htm donde hay 2 links. Ambos links estn dirigidos a la misma pgina, detallealumnos.php, con la diferencia de que en el primero se enva la variable nombre=juan y en el segundo nombre=pepe. Al hacer click en alguno de los dos, nos dirigimos a la pgina detallealumnos.php, donde un script PHP verifica que la variable nombre enviada sea igual a juan o pepe, y depende el caso muestra los datos del alumno correspondiente. alumnos.htm <a href=detallealumnos.php?nombre=juan>Informacin de Juan</a> <a href=detallealumnos.php?nombre=pepe>Informacin de Pepe</a> detallealumnos.php <?php if(isset($_GET[nombre]) { //Preguntamos si se obtuvieron datos por el mtodo get if($_GET[nombre]==juan) { //Evaluamos si la variable nombre enviada // tiene el valor juan. ?> Nombre: Juan Apellido: Prez Edad: 24 <?php } elseif ($_GET[nombre]==pepe) { //Evaluamos si la variable nombre // enviada tiene el valor pepe. ?> Nombre: Pepe Apellido: Gonzlez Edad: 30 <?php } } else header(Location:alumnos.htm); ?> Ntese el uso de dos funciones: isset y header. Antes de evaluar el valor de la variable $_GET[nombre] se evala si existe con la funcin isset. Esto se hace para verificar que se estn mandando por url las variables que se van a usar dentro de los scripts del documento. Se puede dar el caso de que alguien quiera acceder adrede a la pgina detallealumnos.php, y si no se evala antes que nada que $_GET[nombre] existe, al no estar envindose la variable nombre por url en detallealumnos.php el

navegador mostrara errores de Undefined index, ya que al preguntar por $_GET[nombre] se encontrara con que nombre no es un ndice definido dentro del array $_GET. En caso de que no se haya enviado la variable nombre, se redirecciona al usuario a la pgina alumnos.htm con la funcin header, para mostrarle la lista de links vlidos de donde s puede acceder a detallealumnos.php. isset se usa para saber si una variable existe (si est seteada). header se usa para redireccionar a una pgina de la forma header(Location:urldepagina);

Variable $_POST $_POST es otro vector asociativo que tambin guarda informacin transferida de una pgina a otra como la variable $_GET, pero en este caso guarda la informacin transferida bajo el mtodo post de un formulario. Otra diferencia con $_GET es que las variables enviadas bajo post no se vern en la url de la pgina a la que se envan los datos, por eso es ms cmodo usar el mtodo post en formularios en vez de get. Ejemplo: formulario.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Formulario</title> </head> <body> <form id="info" name="info" method="post" action="procesoform.php"> <p>Nombre: <input name="nombre" type="text" id="nombre" value="" /> </p> <p> Email: <input name="email" type="text" id="email" value="" /> </p> <p> <input type="submit" name="Submit" value="Enviar" /> </p> </form> </body> </html> procesoform.php <?php if($_POST) { $ok=true; if(!isset($_POST["nombre"])) { $ok=false; } if(!isset($_POST["email"])) { $ok=false; } if($ok) { echo "Nombre: ".$_POST["nombre"]."<br/>"; echo "Email: ".$_POST["email"]; } else { header("Location: formulario.php"); } } else { header("Location: formulario.php"); } ?> En procesoform.php antes de mostrar los datos recibidos del formulario, se validan. Si los campos nombre y/o email no fueron completados en el formulario, las variables $_POST[nombre] y $_POST[email] no existen. La variable $ok se usa como una bandera que se usa para controlar si los campos fueron completados o no. Si fueron completados (es decir, si $ok es true) se muestran los datos por pantalla. Si no, se redirecciona al usuario a la pgina del formulario. Al principio de todo se pregunta por $_POST. Esto es para verificar que se hayan enviado datos por el mtodo post, no importa cuales. Si no se envi ningn dato, el script saltea todo el cdigo de validacin y proceso de los datos y redirecciona la pgina a formulario.php.

Observaciones sobre algunos elementos de formulario y PHP Los checkbox y los radiobutton no se registran en $_POST a menos que estn chequeados. Por eso para preguntar si se cheque un checkbox al procesar un formulario debemos usar la funcin isset(). Los men desplegables o combobox, cuando permiten seleccionar varias opciones a la vez, deben tratarse como arrays en el proceso con PHP. Por ejemplo, un select que permite seleccionar una sola opcin podra tener la propiedad name=menu. Pero si permite mltiples opciones debe tener la propiedad name=menu[], para que al procesarlo con PHP se lo pueda tratar como un array. Variables de Sesin: $_SESSION Qu pasa si queremos trasladar informacin de una pgina a otra sin tener que usar variables por url o formularios? O incluso, por ms de dos pginas? Este es el caso, por ejemplo, de un sitio que pida login de Username y Password para permitir el acceso a todas y cada una de sus pginas. Sera muy incmodo pedirle al usuario que complete su Username y Password cada vez que quiera ver una pgina nueva. Para estos casos resultan muy tiles las variables de Sesin. Son variables que no pierden su contenido a lo largo de la navegacin por un sitio y no es necesario renovarlas en cada pgina. Para poder usarlas, en la primer lnea de la pgina donde se las use debe ir la funcin session_start(); Para eliminar todas las variables de sesin arrastradas por el sitio hasta el momento, se usa session_destroy(); Para eliminar slo una variable de sesin, se usa unset($_SESSION[clave]);

Como primer ejemplo, supongamos que en el formulario del ejemplo anterior queremos informarle al usuario qu campos le faltaron completar al redireccionarlo a formulario.php Para eso podemos guardar variables de sesin que informen el error en cada campo. Primero veamos cmo quedara procesoform.php: <?php session_start(); if($_POST) { $ok=true; if(!isset($_POST["nombre"]) OR $_POST["nombre"]=="") { $ok=false; $_SESSION["nombre"]=""; } else { $_SESSION["nombre"]=$_POST["nombre"]; } if(!isset($_POST["email"]) OR $_POST["email"]=="") { $ok=false; $_SESSION["email"]=""; } else { $_SESSION["email"]=$_POST["email"]; } if($ok) { echo "Nombre: ".$_POST["nombre"]."<br/>"; echo "Email: ".$_POST["email"]; } else { header("Location: formulario.php"); } } else { header("Location: formulario.php"); } ?> Si $_POST[nombre] no existe, o est en blanco, se crea la variable de sesin $_SESSION[nombre] con el caracter vaco, y si existe se copia el valor recibido en esta misma variable de sesin. Lo mismo se hace con $_POST[email]. Recuerden que para poder usar variables de sesin hay que indicarle a PHP con session_start(); que nos permita accederlas. De esta manera, cuando volvamos a formulario.php podremos controlar los valores enviados y no enviados por el formulario: Primero se abre la sesin y luego se pregunta si existen las variables de sesin nombre e email. Si es as, se pregunta si su valor es el caracter vaco, ya que en procesoform.php que significa que el campo no haba sido completado. Si es as, se informa el error. Luego en cada campo de texto, en la propiedad value se imprime el valor que se complet anteriormente, chequeando que la variable exista. Al final del documento se destruyen las sesiones para que los mensajes de error y los campos ya completos no aparezcan si el usuario vuelve a ir a formulario.php en otro momento de su navegacin por el sitio. formulario.php

<?php session_start(); if(isset($_SESSION["nombre"]) && isset($_SESSION["email"]) ) { if($_SESSION["nombre"]=="") echo "Falt completar el campo \"Nombre\".<br/>"; if($_SESSION["email"]=="") echo "Falt completar el campo \"Email\".<br/>"; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Documento sin t&iacute;tulo</title> </head> <body> <form id="info" name="info" method="post" action="procesoform.php"> <p>Nombre: <input name="nombre" type="text" id="nombre" value="<? if(isset($_SESSION["nombre"])) echo $_SESSION["nombre"]; ?>"/> </p> <p> Email: <input name="email" type="text" id="email" value="<? if(isset($_SESSION["email"])) echo $_SESSION["email"]; ?>"/> </p> <p> <input type="submit" name="Submit" value="Enviar" /> </p> </form> </body> </html> <? session_destroy(); ?>

Prctica 3 1) Formulario de Contacto. Realizar un formulario de contacto mnimamente con los siguientes campos: 2 campos de texto 1 textarea 1 checkbox 2 radiobutton 1 menu desplegable que permita mltiples opciones. a) b) c) Hacer el formulario en HTML y procesarlo con PHP, mostrando los datos recibidos desde el formulario por pantalla. Validar los campos (a eleccin) con variables de Sesin, y si el usuario no complet algn campo obligatorio informrselo por pantalla. En caso de que el formulario no haya sido bien completado, al informar el error por pantalla tambin lograr que los campos que s se haban llenado vuelvan a aparecer completos con los datos que se haban puesto.

2) Carrito de Compras Realizar el funcionamiento de un carrito de compras simple usando variables de sesin ($_SESSION) y variables pasadas por URL ($_GET). Una peguea gua a seguir: a) Hacer una pgina carrito.php con una lista de productos, cada uno con un link a agregar_a_carrito.php y pasando una variable por url con su nombre. b) Por ejemplo, el producto Auto tendra un link a agregar_a_carrito?prod=Auto c) En agregar_a_carrito.php registrar una variable de Sesin con clave igual al nombre del producto que se quiera agregar (que se reciba con una variable por URL). d) En carrito.php, en algn lado listar todas las variables de sesin con un foreach, y esos sern los productos agregados al carrito, el carrito en s. e) Para sacar los productos del carrito, hacer que cada producto listado en el carrito tenga un link a eliminar_de_carrito.php y pasando una variable por url con su nombre. f) En eliminar_de_carrito.php, borrar la variable de sesin con el nombre del producto obtenido por la variable de URL.

Recordar que eliminar_de_carrito.php y agregar_a_carrito.php, deben volver siempre a carrito.php al terminar de operar.

PHP Clase 3

Funciones
Funciones definidas por el programador
Las funciones son bloques de cdigo que pueden o no recibir parmetros para trabajar con ellos, y generalmente tienen una salida. Sirven para modularizar el cdigo, hacerlo ms legible, y lo ms importante: reutilizacin cmoda de cdigo. Si tuviramos que repetir un extenso cdigo varias veces a lo largo de una pgina (o varias pginas de un ciclo), nos conviene tener una funcin que contenga a ese cdigo y en cada lugar donde lo usbamos en las pginas, reemplazarlo por la llamada a su funcin (y lo resumimos en una sola lnea). Sintaxis de declaracin de funcin:
<?php function NombreDeFuncion($parametro1,$parametro2) { /* cdigo a ejecutar */ return $salida; // $salida sera el valor que retorna la funcin }

Ejemplo:
<?php function Suma($sumandos) { $suma=0; for($i=0; $i<count($sumandos);$i++) { $suma+=$sumandos[$i]; } return $suma; } $numeros[0]=3; $numeros[1]=42; $numeros[2]=16; echo Suma($numeros); //Llamada a la funcin ?>

Funciones predefinidas de PHP


PHP viene con muchsimas funciones predefinidas listas para su uso. La lista completa se encuentra en http://ar.php.net/manual/es/funcref.php

Prctica 4
Complementar la prctica del carrito realizando los siguientes tems: 1. Por cada producto de la lista de productos a agregar, adems de pasar por URL una variable con el nombre del producto, pasar otra ms con su precio. Ejemplo:
<a href=agregar_a_carrito.php?nombre=Auto&precio=25000>Auto </a>

2. En agregar_a_carrito.php, guardar como valor de cada variable de sesin su precio correspondiente. Ej:
$_SESSION[Auto]=25000;

Recordar que para que la asignacin de variables de Sesin sea dinmica y se corresponda con el producto que se quiere agregar al carrito, se deben recuperar las variables enviadas por URL con la variable $_GET. 3. En carrito.php, adems demostrar los productos agregados mostrar el precio correspondiente a cada uno. 4. Crear una funcin para mostrar por pantalla cada producto dentro del carrito con el formato (ejemplo):
Producto: Auto ($25000)

5. Crear una funcin para sumar los precios de todos los productos y mostrar el total del importe acumulado por el carrito.

Includes
Existe una funcin llamada include muy til que lo que nos permite es incluir el cdigo de un documento en otro (ya sea PHP o HTML). No se confundan, include incluye cdigo y no por ejemplo, imgenes o archivos swf. Sintaxis:
<?php include(pagina.php); ?>

Utilidades: En cuanto a cdigo PHP, son muy tiles para por ejemplo tener un nico archivo con todas las funciones que se usarn en todas las pginas del sitio (sobre todo si son funciones que se usan reiteradas veces y en distintas pginas). Para usar las funciones en ese archivo biblioteca usamos la funcin include para incluirlo en la pgina donde lo necesitemos. En cuanto a cdigo HTML, nos sirve para incluir DIVs enteros. Supongamos que tenemos un sitio medianamente grande de 50 pginas individuales, cada una con un men a la izquierda. Sera muy prctico que todas estas pginas incluyeran al DIV del men con un include, para que el da de maana al tener que agregar o quitar un link el men slo tengamos que modificar el archivo que lo contenga y no a las 50 pginas individualmente.

Ejemplo: encabezado.htm
<div id=encabezado> Bienvenido a mi sitio< </div>

biblioteca.php
<?php function FechaConFormato() { $fecha=date("d \de M H:i"); return Hoy es .$fecha.hs.<br>; } ?>

index.php
<?php include(encabezado.htm); <?php include(biblioteca.php); echo FechaConFormato(); ?>

El resultado por pantalla sera algo como:


Bienvenido a mi sitio Hoy es 04 de Nov 16:30 hs.

Prctica 5
1. Mudar (cortar y pegar) a las funciones creadas en la Prctica 4 a otro archivo PHP, e incluirlo en carrito.php. 2. a. Encerrar a la lista de productos a agregar en un DIV con posicionamiento relativo y hacer lo mismo con el bloque de cdigo que muestra a los productos dentro del carrito. Darles propiedades CSS al borde de los DIVs para poder ver sus lmites. b. Mudar al DIV que contiene a los productos dentro del carrito a otro archivo PHP, y luego incluir a este nuevo archivo en carrito.php en su ubicacin correspondiente.

PHP Clase 4

Pginas dinmicas con bases de datos


Incorporar bases de datos a pginas dinmicas con PHP sirve para almacenar informacin en el sitio que puede cambiar dinmicamente y no que se encuentre listada estticamente en nuestro sitio como mero texto. Esta informacin luego se recuperara bajo scripts PHP para mostrarla por pantalla. Ejemplos concretos de esto pueden ser: En un Carrito de Compras, los productos y sus caractersticas estaran almacenados en una base de datos, y en el sitio un script PHP recuperara estos datos desde la base de datos para mostrarlos por pantalla.

En un Libro de Visitas (Guestbook), cada post sera un registro en una tabla de una base de datos. En un sistema que necesite comprobacin de Username y Password, habra una tabla en una base de datos que guarde todas las combinaciones Username/Password permitidas.

Nosotros con PHP vamos a utilizar MySQL como motor de Base de Datos. Para ms informacin acerca del uso de MySQL y bases de datos, referirse a los apuntes correspondientes.

Conceptos bsicos de MySQL y PHP integrados


Conexin al servidor MySQL desde PHP
Cada vez que se vayan a usar bases de datos en una pgina PHP, primero se debe hacer una conexin al servidor MySQL. La funcin que permite esto es mysql_connect(), y su resultado se guarda en una variable para luego hacer referencia a esta conexin cuando se la necesite.
$Conexion=mysql_connect("servidor","username","password");

Los tres parmetros que tiene son: 1) El servidor donde se est haciendo la conexin. Por ejemplo, localhost o la direccin IP que corresponda. 2) El nombre de usuario de la cuenta que permita acceder al servidor MySQL (por ejemplo, root). 3) El password correspondiente a ese nombre de usuario (en el caso de root, no hay password y el tercer parmetro se completa con ). Esta lnea de cdigo se suele guardar en un archivo aparte (por ejemplo, "connect.php"), que luego se incluir en las pginas donde se necesite usar la conexin establecida. Esto es prctico ya que al mudarnos de hosting los parmetros proporcionados en mysql_connect() es muy probable que cambien. Si tenemos estos parmetros almacenados en un solo archivo, nos ahorramos el tener que cambiar a mano todas las lneas de conexin hechas en cada pgina de nuestro sitio. Para cerrar conexiones se usa la funcin:
mysql_close();

Para seleccionar una base de datos dentro de la conexin establecida, se usa la funcin:
mysql_select_db("nombre_de_base_de_datos", $conexion);

Ejemplo:
<?php //Creamos una conexin @$conexion=mysql_connect("localhost", "root", "") /*Si la conexin no se puede establecer, se detiene la ejecucin del cdigo y se muestra el error.*/ or exit("No se pudo establecer una conexin"); /*Seleccionamos una base de datos del Servidor MySQL al que nos acabamos de conectar.*/ @$dbseleccionada=mysql_select_db("Empleos", $conexion)

/*Si la seleccin de la DB no se puede establecer, se detiene la ejecucin del cdigo y se muestra el error.*/ or exit("No se pudo seleccionar la base de datos"); ?>

La funcin exit() se usa para detener la ejecucin de todo el cdigo PHP de la pgina mostrando por pantalla un mensaje de error. De esa manera nos ahorramos que en el cdigo posterior a la conexin a la base de datos surjan errores en consecuencia de esto.

Manejo de consultas:
Una vez establecida la conexin a la base de datos, se puede acceder a los datos en ella. A continuacin se listan algunas de las funciones ms usadas para trabajar con MySQL desde PHP: mysql_query(query, conexion): Ejecuta una consulta. Se debe usar con 2 parmetros: el primero ser la consulta MySQL y el segundo la conexin utilizada. Si la consulta fue DELETE, UPDATE o INSERT devuelve true o false para saber si se realiz con xito, y si fue SELECT devuelve el conjunto de filas obtenidas (resultado) en caso exitoso o false en caso contrario. mysql_num_rows(resultado): Permite saber cuntas filas tiene el resultado obtenido en una consulta SELECT. mysql_fetch_row(resultado): Recupera los datos que contiene la fila actual dentro del resultado de la consulta SELECT realizada previamente. La variable que guarda la fila ser un vector (array), y para acceder a cada uno de los datos que guarda debe usarse el subndice respetando el orden que se le dio a las columnas en la consulta. Por ejemplo, si recuperramos una fila haciendo $fila=mysql_fetch_row($resultado) luego se accedera a cada columna de esa fila as: $fila[0], $fila[1], etc... mysql_fetch_array(resultado): Parecido al mysql_fetch_row, pero en vez de tener que usar nmeros en el subndice del vector $fila, el subndice puede ser el nombre de la columna a la que queramos acceder. Por ejemplo, si recuperramos una fila haciendo $fila=mysql_fetch_array($resultado) luego se accedera a cada columna de de la siguiente manera: $fila[Nombre], $fila[Apellido], etc... mysql_free_result(resultado): Libera la memoria consumida por el resultado de la consulta SELECT realizada previamente.

Las consultas a la base de datos se usan exactamente igual que si estuviramos trabajando directamente en algn administrador de MySQL, como por ejemplo el PhpMyAdmin.

Uso de la consulta SELECT


Al recuperar datos de una base de datos con la consulta SELECT, luego debemos listarlos en pantalla. Para eso se suelen usar tablas. La primer fila de la tabla sern los ttulos de cada campo, y una segunda fila de esa tabla se repetir por cuantos registros haya recuperado desde la base de datos.

El siguiente ejemplo explica cada paso en los comentarios:


<?php //Creamos una conexin @$conexion=mysql_connect("localhost", "root", "") /*Si la conexin no se puede establecer, se detiene la ejecucin del cdigo y se muestra el error.*/ or exit("No se pudo establecer una conexin"); /*Seleccionamos una base de datos del Servidor MySQL al que nos acabamos de conectar.*/ @$dbseleccionada=mysql_select_db("Empleos", $conexion) /*Si la seleccin de la DB no se puede establecer, se detiene la ejecucin del cdigo y se muestra el error.*/ or exit("No se pudo seleccionar la base de datos"); //Si la base de datos se seleccion correctamente, //realizamos una consulta. //Queremos mostrar en pantalla a todos los empleados $query="SELECT Nombre, Apellido FROM Empleos"; $resultado=mysql_query($query,$conexion); //Verificamos si se encontr al menos un resultado if(mysql_num_rows($resultado)!=0){ //Si se encontraron resultados, creamos una tabla en //HTML para mostrarlos fila por fila ?> </p> <table width="400" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="50%">Nombre</td> <td width="50%">Apellido</td> </tr> <?php while ($fila=mysql_fetch_array($resultado)) { //Recorremos el resultado registro por registro //y mostramos los datos en cada columna de la tabla. //Dentro de un while repetimos filas. ?> <tr> <td width="50%"><?php echo $fila["Nombre"]; ?></td> <td width="50%"><?php echo $fila["Apellido"]; ?></td> </tr> <?php } ?> </table> <?php } else { echo "No se encontraron empleados"; } } } mysql_free_result($resultado); mysql_close(); ?>

El resultado en pantalla sera: Nombre Prez Hernndez Apellido Juan Diego

Prctica 6
Crear una base de datos, en la que figure una tabla de Productos de la siguiente estructura: ID_Producto (int) Nombre (varchar) Precio (float) ID_Rubro (int)

1) Ingresar algunos registros desde el PhpMyAdmin y luego hacer una pgina PHP que liste el contenido de la tabla por pantalla. 2) Integrar este ejercicio a la prctica del Carrito de Compras, haciendo que la lista de productos a agregar provenga de la tabla de la base de datos creada en el punto anteror. El nombre del producto y su precio deben ser los provenientes de la base de datos.

Uso de SELECT relacionando tablas.


Repasemos cmo relacionar tablas en MySQL. Tomaremos las tablas ejemplo que figuran en la Pgina 1 (Empleados y Sueldos) para mostrar el sueldo que cobra cada empleado. Tabla: Empleados ID_Empleado 01 02 Tabla: Sueldos ID_Empleo 01 02

Nombre Juan Diego

Apellido Prez Hernndez

ID_Empleo 01 02

Puesto Puesto1 Puesto2

Importe 2300 1800

Con la clusula WHERE:


SELECT Empleados.Nombre, Empleados.Apellido, Sueldos.Importe FROM Empleados,Sueldos WHERE Empleados.ID_Empleo=Sueldos.ID_Empleo

Usando JOIN:
SELECT Empleados.Nombre, Empleados.Apellido, Sueldos.Importe FROM Empleados JOIN Sueldos ON Empleados.ID_Empleo=Sueldos.ID_Empleo

Recordar que si se quieren priorizar los resultados de la primer tabla seleccionada, para que en caso de que un registro de la primer tabla no tenga correspondencia con uno de la segunda y de todos modos los datos de la primera aparezcan, se debe usar LEFT JOIN en lugar de JOIN. Para priorizar los resultados de la segunda tabla seleccionada, se debe usar RIGHT JOIN en lugar de JOIN.

Alias
A veces nos puede resultar molesto tener que escribir el nombre entero de una tabla cada vez que tengamos que hacer referencia a ella en una consulta, o al consultar entre varias tablas podemos llegar al caso en que consultemos por dos columnas con

el mismo nombre pero de diferentes tablas, y se creara cierta ambigedad en los datos que recuperemos. Para estos casos podemos darle Alias a los nombres de las columnas o las tablas y luego referirnos a ellas bajo ese nuevo nombre. Los alias se pueden usar en las clusulas HAVING, ORDER BY o GROUP BY, o en los ON de los JOIN, pero no en la clusula WHERE. Para darle el Alias a una tabla o columna, luego de referirse a ella se escribe AS nuevo_nombre.

Ejemplos:
SELECT E.Nombre, E.Apellido, S.Importe FROM Empleados AS E, Sueldos AS S WHERE Empleados.ID_Empleo=Sueldos.ID_Empleo

SELECT Empleados.Nombre AS NomEmp, Empleados.Apellido AS ApEmp, Sueldos.Importe AS SuelEmp FROM Empleados,Sueldos WHERE Empleados.ID_Empleo=Sueldos.ID_Empleo
SELECT E.Nombre, E.Apellido, S.Importe FROM Empleados AS E JOIN Sueldos AS S ON E.ID_Empleo=S.ID_Empleo

Los Alias son sensibles a maysculas y minsculas. Ejemplo aplicado:


<body> <?php include("connect.php"); //Realizamos la consulta para obtener a todos los empleados y sus sueldos. $query="SELECT empleados.ID_Empleado, empleados.Nombre, empleados.Apellido,sueldos.Importe FROM empleados JOIN sueldos ON empleados.ID_Empleo=sueldos.ID_Empleo"; $resultado=mysql_query($query,$conexion); echo mysql_error(); //Sirve para describir el error en caso de que la consulta no se haya //ejecutado correctamente. //Verificamos si se encontr al menos un resultado if(mysql_num_rows($resultado)!=0){ //Si se encontraron resultados, creamos una tabla en //HTML para mostrarlos fila por fila ?> <p align="center"><strong>Lista de Empleados: </strong></p> <table width="600" border="1" align="center" cellpadding="0" cellspacing="0"> <tr> <td><strong>Nombre</strong></td> <td><strong>Apellido</strong></td> <td><strong>Sueldo</strong></td> </tr> <? while ($fila=mysql_fetch_array($resultado)) { //Recorremos registro por registro el resultado //y mostramos los datos ?> <tr> <td><? echo $fila["Nombre"]; ?></td> <td><? echo $fila["Apellido"]: ?></td> <td><? echo $fila["Importe"]; ?></td> </tr>

<? } ?> </table> <? } else { echo "No se encontraron empleados"; } mysql_free_result($resultado); mysql_close($conexion); ?> </body>

Prctica 7
En la base de datos creada en la Prctica 6, aadir una tabla con la siguiente estructura: ID_Rubro (int) Nombre (varchar)

1) Hacer una pgina que liste todos los rubros disponibles, y que al hacer click en uno de ellos nos lleve a una pgina con todos los productos pertenecientes a ese rubro (pasando por URL una variable con el ID_Rubro), donde se pueda elegir a uno de esos productos y agregarlos al carrito. En la pgina de rubros tambin se debe ver el carrito con los productos ya agregados. En el carrito no es necesario aclarar de qu rubro son los productos. 2) En la pgina de productos, slo se deben ver los productos del rubro elegido, y debe haber un ttulo que diga Rubro: NombreDelRubro antes de listarlos.

PHP Clase 5

Uso de la consulta INSERT


Para insertar un nuevo registro en una tabla de una base de datos, necesitamos un formulario donde completar los campos que irn en ese registro. Por ejemplo, para agregar un nuevo registro en la tabla Empleados usada en ejemplos anteriores, se necesitara un formulario para completar los datos, que luego enve la informacin proporcionada a otra pgina que los procese y agregue a la base de datos. La pgina del formulario tendra el siguiente cdigo fuente:
<?php session_start(); ?> <html> <head> <title>Agregar Empleados</title> </head> <body> <?php if (isset($_SESSION["error"])) { //Si existe la variable de sesin "error" mostramos el error //en pantalla echo "Error: ".$_SESSION["error"]; //Destruimos la variable de sesin para que no se muestre el //error en otro momento unset($_SESSION["error"]); }

?> <form id="nuevoemp" name="nuevoemp" method="post" action="insertar.php"> <p> <b>Agregar un nuevo empleado:</b></p> <p>Nombre: <input name="nombre" type="text" id="nombre" maxlength="30" /> </p> <p>Apellido: <input name="apellido" type="text" id="apellido" maxlength="30" /> </p> <p>ID_Empleo: <input name="empleo" type="text" id="empleo" maxlength="2" /> </p> <p> <input type="submit" name="Submit" value="Enviar" /> </p> </form> </body> </html>

Ntese que la propiedad ACTION del formulario tiene el valor insertar.php. Esa ser la pgina que recibe los datos enviados por este formulario y que los inserte en la base de datos. Ahora entonces, creamos el archivo insertar.php. El cdigo en el mismo ser:
<?php session_start(); //Incluyo la conexin include("connect.php"); //Chequeo que se hayan recibido datos if($_POST) { //Chequeo si todos los campos fueron completados if($_POST["nombre"]=="" || $_POST["apellido"]=="" || $_POST["empleo"]=="") { //Asigno una variable de sesin para enviar el error //de vuelta a la pgina anterior $_SESSION["error"]="Faltan completar campos."; //Redirecciono a la pgina anterior header("Location:nuevo_empleado.php"); } else { //Si los campos fueron completados, inserto en la base de //datos $query="INSERT INTO Empleados VALUES ('','".$_POST["nombre"]."','".$_POST["apellido"]."',". $_POST["empleo"].")"; mysql_query($query,$conexion); } } ?>

En este formulario se pide el ID_Empleo para el empleo correspondiente al empleado nuevo en vez del nombre del Puesto correspondiente a ese ID_Empleo. Para elegir entre los Puestos existentes por su nombre, convendra hacer un elemento de formulario de tipo select donde el texto de cada elemento option sea el nombre del Puesto recuperado de la tabla Empleos, y la propiedad value de ese elemento option sea el ID_Empleo correspondiente a ese Puesto. Habra que hacer una consulta adicional para recuperar los Puestos y sus ID_Empleo para luego listarlos en el select. En vez de repetir filas dentro de un while como se hizo en el ejemplo del Uso del Select, dentro de un while habra que repetir etiquetas <option>.

La implementacin de esta observacin se deja como prctica para el alumno.

Uso de la consulta UPDATE


Para modificar un registro de una tabla, se debera crear un formulario en el que ya se mostraran completos los datos del empleado que se quiere modificar, de otro modo sera como agregarlo de nuevo y no habra forma de ver los datos anteriores para tenerlos de referencia. En el ejemplo de la tabla Empleados, tendramos que recibir la variable ID_Empleado desde la pgina que liste a todos los empleados que nos servir para filtrar el resultado del SELECT a slo el empleado que coincida con el ID_Empleado que recuperamos desde la URL. Es decir, al listar los empleados, debe haber un link a la pgina del formulario de modificacin pasando por URL el ID del empleado en cuestin. Este formulario tendr la propiedad ACTION con valor modificar.php, que ser la pgina que procese los nuevos datos que enve este formulario y los modifique en la base de datos.
modificar_empleado.php <?php include("connect.php"); //Chequeamos que se acceda a la pgina desde //lista_empleados.php if($_GET) { //Realizamos la consulta para el empleado //correspondiente al id recibido $query="SELECT Nombre, Apellido, ID_Empleo FROM Empleados WHERE ID_Empleado=".$_GET["id"]; $resultado=mysql_query($query,$conexion); //Recuperamos los datos del resultado obtenido $fila=mysql_fetch_row($resultado); ?> <html> <head> <title>Modificar Empleado</title> </head> <body> <form id="modifemp" name="modifemp" method="post" action="modificar.php?<?php echo $_GET["id"]; /*enviamos el id para modificar SLO a este empleado */?>"> <p><b>Modificar datos de un empleado:</b></p> <p>Nombre: <input name="nombre" type="text" id="nombre" maxlength="30" value="<?php echo $fila[0]; ?>" /> </p> <p>Apellido: <input name="apellido" type="text" id="apellido" maxlength="30" value="<?php echo $fila[1]; ?>" /> </p> <p>ID_Empleo: <input name="empleo" type="text" id="empleo" maxlength="2" value="<?php echo $fila[2]; ?>" /> </p> <p> <input type="submit" name="Submit" value="Enviar" /> </p> </form> </body> </html> <?php

} else { //Si no se accedi a la pgina desde lista_empleados.php //redireccionamos al usuario a dicha pgina header("location:lista_empleados.php"); } ?>

El archivo modificar.php entonces recibe los datos que se completen (o modifiquen) en el formulario y tambin el id del empleado a modificar. El cdigo sera el siguiente:
modificar.php <?php include("connect.php"); //Chequeamos si se estn recibiendo datos //del formulario de modificar_empleado.php if($_POST){ if($_POST["nombre"]=="" || $_POST["apellido"]=="" || $_POST["empleo"]=="") { //Asigno una variable de sesin para enviar el error //de vuelta a la pgina anterior $_SESSION["error"]="Faltan completar campos."; //Redirecciono a la pgina anterior header("Location:modificar_empleado.php?$_GET["id"]"); } else { //Si los campos fueron completados, modifico el registro en //la base de datos $query="UPDATE Empleados SET Nombre='".$_POST["nombre"]."', Apellido='".$_POST["apellido"]."' WHERE ID_Empleado=".$_GET["id"]; mysql_query($query,$conexion); mysql_close(); } //Si no recibi datos por POST, alguien accedi por error //Entonces lo redireccionamos header("location:lista_empleados.php"); ?>

Uso de la consulta DELETE


Para eliminar un registro necesitamos el id del registro a eliminar, que se recibe de una variable pasada por URL desde la pgina que liste el resultado de todos los registros. A esta pgina la llamaremos eliminar.php y tambin recibir el id del empleado que se quiere eliminar, lo que nos sirve para filtrar el DELETE de la consulta mysql.
<?php include("connect.php"); //Chequeo si se est accediendo desde lista_empleados if($_GET){ if(isset($_GET["id"])) { //Ejecuto la consulta para eliminar al empleado elegido $query="DELETE FROM Empleados WHERE ID_Empleado=".$_GET["id"]; mysql_query($query,$conexion); mysql_close(); } } //Redireccionamos header("location:lista_empleados.php"); ?>

Prctica 8
Hacer una pgina Maestro-Detalle (es decir, una lista de todos los registros de una tabla) para los Productos disponibles para agregar al Carrito similar a la que ya se hizo anteriormente, pero con las siguientes particularidades: La lista debe ser una tabla, con las columnas Nombre del Producto, Precio, Nombre de Rubro, Modificar, Eliminar. La columna Modificar tendr un link a una pgina con un formulario de modificacin el registro seleccionado (pasando el ID del Producto por URL). La columna Eliminar tendr un link a una pgina que elimine el registro seleccionado (pasando el ID del Producto por URL). Al final de la lista, debe figurar un link a un formulario para insertar un nuevo registro.

Luego de hacer la pgina Maestro-Detalle, crear las pginas para la insercin, modificacin y eliminacin de los registros. Estas pginas deben volver siempre a la pgina Maestro-Detalle una vez que terminen de ejecutar su accin correspondiente.

Ante cualquier duda comunicarse con darioblanco@hotmail.com Recuerden registrar su e-mail en el grupo http://es.groups.yahoo.com/group/utn-seu-progweb De esta manera canalizaremos las dudas que tengamos y las soluciones sern aprovechadas por todos.

Vous aimerez peut-être aussi