Concepto de PHP
Concepto de PHP
Concepto de PHP
Concepto de PHP
Segn diversas fuentes como la Wikipedia y la documentacin Oficial podemos resumirlo en lo siguiente: PHP es un lenguaje de programacin interpretado, diseado originalmente para la creacin de pginas web dinmicas. Es usado principalmente en interpretacin del lado del servidor (server-side scripting) pero actualmente puede ser utilizado desde una interfaz de lnea de comandos o en la creacin de otros tipos de programas incluyendo aplicaciones con interfaz grfica usando las bibliotecas Qt o GTK+.. Es un acrnimo de "PHP: Hypertext Preprocessor", la mayor parte de su sintaxis es similar a C, Java y Perl, y es fcil de aprender. La meta de este lenguaje es permitir escribir a los creadores de pginas web, pginas dinmicas de una manera rpida y fcil, aunque se pueda hacer mucho ms con PHP. Fue creado originalmente por Rasmus Lerdorf en 1994; sin embargo la implementacin principal de PHP es producida ahora por The PHP Group y sirve como el estndar de facto para PHP al no haber una especificacin formal.
Wordpress.org El sistema ms utilizado para crear blogs, que actualmente alcanza el ttulo de CMS con cientos de poderosas opciones que permiten personalizarlo. Wordpress.com Uno de los servicios favoritos para iniciar tu propio blog sin necesidad de un servicio de hosting. La Wikipedia funciona gracias al software llamado mediawiki que est escrito con PHP. vBulletin - Es uno de los softwares ms robustos para tener un sistema de foros en tu servidor, tambin existe phpbb quien fuera uno de los sistemas ms populares hace algunos aos tambin fue creado en PHP y debido a eso su nombre. Se sabe que Facebook, una de las redes sociales ms grandes fue programado en su mayora utilizando PHP, adems poseen una API para crear aplicaciones que interactuen con su sitio las cuales pueden ser creadas con el mismo lenguaje.
Como ves, la robustez de PHP ha sido probada en un sin fin de servicios y distintos sitios que visitamos a diario, lo cual espero sea una motivacin para que te animes a aprender este lenguaje.
Adems, PHP no devuelve solamente cdigo HTML al navegador, entre muchas de sus funciones tambin puede crear imgenes, generar miniaturas de las mismas, crear archivos PDF en base a contenido definido o crear archivos de tipo Flash en el instante y bajo demanda, entre muchas cosas ms, todo depende del uso adecuado de libreras y el conocimiento del lenguaje. En lo que se refiere a datos almacenados, PHP soporta una gran cantidad de bases de datos para interactuar con la informacin, son ms de veinte distintas a las que podemos ingresar datos o extraer, entre las que se encuentran:
Windows
XAMPP es uno de los ms utilizados y confiables o La ruta para guardar tus archivos debera ser C:/xampp/htdocs o en su defecto la ruta donde este instalado XAMPP Tambin puedes usar WAMP, que es para Windows solamente. o La ruta para guardar tus archivos debera ser C:/wamp/www o en su defecto la ruta donde este instalado WAMP Tambin es posible instalar el servidor web y PHP por separado.
Mac OS
Todo viene instalado de base a excepcin de MySQL pero requiere de algn tiempo para configurarlo, por eso te recomiendo que instales MAMP en su versin gratuita. o La ruta para guardar tus archivos debera ser /Macintosh HD/Applications/MAMP/htdocs
Linux
XAMPP tambin puede instalarse en sistemas como Ubuntu. o La ruta para guardar tus archivos debera ser /opt/lampp/htdocs/ o en su defecto la ruta donde este instalado XAMPP aunque lo mejor es hacer un symlink a alguna carpeta que pertenezca al usuario ya que por defecto /opt/lampp/htdocs/ pertenece a root Tambin es posible instalar un servidor web (lighttpd, apache son algunos ejemplos), y las libreras de php por separado, as como el mysql y otras utilidades. El directorio por defecto para guardar los archivos es /var/www/, que se puede cambiar en la configuracin del servidor web. En algunas distribuciones Linux viene instalado por defecto.
Luego de instalar cualquiera de las alternativas toma en cuenta la ruta en donde debes crear tus propios archivos para que all almacenes todos los ejemplos que vamos a realizar. Una breve explicacin de lo que hace cada elemento que se ha instalado en nuestra computadora
El servidor Apache entrega los archivos para que puedan ser mostrados en el navegador. El interprete o mdulo de apache lee el cdigo de los archivos .php y lo ejecuta en base al contenido. En el tiempo de ejecucin puede realizar una consulta a una base de datos como Mysql, para ingresar o leer informacin. Y entonces mostrarse el resultado en el navegador.
Editores de Cdigo
Para escribir el cdigo de nuestros programas podemos utilizar cualquier aplicacin como el Block de Notas de Windows, es decir no necesitamos ninguna herramienta sofisticada, sin embargo algunas aplicaciones nos ayudarn a visualizar mejor lo que estamos programando, as que recomendamos algunas que puedes bajar y probar, cualquiera que elijas estar bien.
Notepad++ - Windows (Gratuito) PSPad - Windows (Gratuito) gedit - Linux (Ya incluido en gnome) Smultron - Mac OS (Gratuito)
De ellos, los dos primeros siempre estarn disponibles, y los dos ltimos deben ser habilitados en la configuracin de PHP para que funcionen correctamente. Es por eso que se recomienda siempre usar el primer conjunto de tags: <?php y ?> para lograr la mayor compatibilidad de nuestros scripts en todos los servidores. En PHP6 se eliminar el soporte al ltimo de ellos <% y %>. Todo lo que est encerrado entre esos smbolos ser reconocido por el servidor como cdigo PHP, y empezar a leerlo e interpretarlo. El siguiente ejemplo es para mostrar slo la correcta inclusin de cdigo PHP en un script: 5
El tag de cierre ?> es opcional, y se usa solamente cuando queremos dejar de interpretar la salida en PHP, por lo general se recomienda no usarlo si el archivo es de puro cdigo PHP. Despus veremos por qu.
Separacin de instrucciones
Como dijimos, un programa o script en PHP es un conjunto de instrucciones que deben ser ledas por el servidor para generar un resultado. Si analizamos este concepto, podremos deducir que no se trata de una sla intruccin, sino mas bien de una serie de ellas que en conjunto realizarn determinadas tareas. Para separar las diferentes instrucciones una de otra usamos, al igual que en Pascal, el punto y coma (;). Usaremos este punto para decir que PHP es un lenguaje "ciego" a los espacios en blanco y saltos de lnea antes o despus de una intruccin. Gracias a esto podemos insertar tabulaciones y saltos de lnea en nuestro cdigo, para as lograr una mejor organizacin del mismo, en base a "niveles". Como veremos a lo largo de este manual, esta aclaracin ayudar a lograr un mejor cdigo, visualmente hablando, aunque el resultado ser igual que si no aadisemos nada.
<?php $variable = "Esta es una variable PHP"; echo $variable; ?> echo "Dos instrucciones..."; echo "...en la misma lnea";
Es obligatorio separar las diferentes instrucciones, pues si no lo hacemos obtendremos un error por parte del servidor. Aunque se ver despus, adelantaremos que una palabra precedida del signo de dolar ($) indica que esa palabra es en realidad una variable en PHP.
Desplegar la informacin
Para desplegar o imprimir informacin en la pantalla utilizaremos algunas instrucciones como echo o print
echo "Texto impreso con echo"; print "Texto impreso con print";
identificar y separar las diferentes secciones del script en base a su funcin; o incluso es posible comentar tambin el cdigo PHP para que ste no sea interpretado, con la ventaja de que est ah disponible para cuando sea necesario. Cuando queremos hacer un comentario o evitar que se ejecute un cdigo que hayamos programado debemos utilizar los smbolos // #, y si queremos comentar todo un bloque con varias lneas debemos encerrarlo entre /* y */. ejemplos:
// Este es un comentario de una sla lnea echo "Un texto"; /* Este programa fue creado por Oscar Mota y su funcin es mostrar la utilidad de los comentarios en un script
// O podemos comentar tambin una porcin de cdigo # echo "Esta instruccin no se ejecuta pues est comentada";
Como habrs notado, un comentario no es una intruccin propiamente dicha, por lo tanto, no requiere terminar con el deimitador ; No hay un consenso sobre cul de esas tres formas deberamos usar para comentar en el script. El criterio del programador juega un papel importante en ello, pues al final, es el nico que podr leer los comentarios en el script. Personalmente, recomiendo usar // para escribir comentarios textuales acerca de la funcin de alguna lnea de cdigo, y # dejarlo para comentar lneas de cdigo. A estas alturas, de ms est decir que un comentario puede ir inmediatamente despus de una intruccin (en la misma lnea), pues como dijimos PHP es ciego a los saltos de lnea. Sin embargo, como excepcin a esta regla, una vez que iniciamos un comentario lineal (con // o #) todo lo que est despus de l en la misma lnea ser ignorado por el servidor:
echo "Este texto s se imprime"; // Un comentario acerca de sta lnea // Otro comentario. echo "Este texto no se imprime pues forma parte del comentario";
</body> </html>
Guarda este archivo con el nombre primer_script.php en la ruta que mencionamos en los requisitos para aprender PHP , y dirige tu navegador a la siguiente direccin que por el momento ser solo una pgina en blanco
http://localhost/primer_script.php
Ahora que tienes la plantilla bsica en HTML para tu primer programa, agrega el cdigo PHP. Fjate adems que en el ejemplo se usan comentarios para indicar que hace cada lnea en tu primer script.
<html> <body> <?php // Iniciamos el intrprete de PHP usando <?php echo "Hola, esto es una prueba"; // Este es mi primer programa en php /* La funcin anterior debera mostrar en el navegador, el texto que est entre comillas. Adems, hemos usado espacios al inicio de las lneas para as diferenciar claramente el cdigo PHP */ ?> </body> </html>
Guarda el archivo y recarga el navegador, deberas poder ver el mensaje "Hola, esto es una prueba" en la pantalla; si as es, significa que ya has creado tu primer programa en PHP. Si no te ha salido nada o ha mostrado algn error verifica que el cdigo de tu archivo sea idntico al del ejemplo, y revisa la ruta en donde guardaste el archivo. Como puedes ver, cada vez que queramos imprimir un texto en pantalla tendremos que usar la instruccin echo seguida del texto que queremos mostrar, encerrado entre comillas simples o comillas dobles. Adems, que no se te olvide agregar el ; al final para dejar claro al intrprete PHP que la instruccin echo ya termin, si no haces eso obtendras un error al colocar la siguiente instruccin.
Por ejemplo podemos hacer un programa conversor de monedas, entonces en una variable llamada $tipodecambio podemos grabar el valor por el que debe ser multiplicada la otra moneda.
$tipodecambio = 7.25;
Si te fijas en este ejemplo, notars que una variable es en realidad una palabra precedida del signo de dlar ($). Aunque suene obvio, hay que indicar que las variables dentro de nuestro script deben tener nombres distintos. Un nombre de variable vlido ser aquel que empiece por un caracter alfabtico [a-z] o de subrayado [_], seguido de caracteres alfanumricos [a-z y 0-9] y de subrayado [_]. En otras palabras, una variable NO puede empezar con caracteres numricos, ni puede contener caracteres especiales [signos de puntuacin, letras especiales como , acentos, etc.). Slo letras, nmeros y caracteres de subrayado (_). Adems, es importante saber que el nombre de variable es case sensitive, osea sensible a maysculas y minsculas; por lo tanto, no es lo mismo $variable que $Variable.
Deliberadamente, hasta ahora, hemos usado valores de texto (o de tipo string) para casi todos los ejemplos. Pero, como veremos en el siguiente punto, hay muchos tipos de variables, cada uno con una finalidad especfica.
Tipos de Variables
9
El tipo de variable est dado por el tipo de datos que sta contiene. Entonces, al hablar de tipos de variables en realidad estamos hablando de tipos de datos que PHP maneja. Hay distintos tipos de variables y cada una tiene un uso especfico:
$tipodecambio = 7.25; $nombre = 'Oscar Mota'; $pagado = true;
Si ya tienes algunos conceptos de programacin notars cmo en el segundo ejemplo hemos declarado una variable de tipo string y lo nico que hemos hecho es colocarle comillas al valor, en los otros casos no lo necesita, como el primer ejemplo que es una variable de tipo double o float (numrica) y en el ltimo ejemplo que sera una de tipo boolean (falso y verdadero). En otra seccin revisaremos los tipos de datos ms usados en PHP.
Esta caracteristica importante de PHP es luego el dolor de cabeza de muchos programadores, ya que luego al querer imprimir cadenas HTML con comillas se crean errores. Lo importante es decidir qu comillas se van a utilizar; si necesitas muchas comillas dobles, crea tu cadena con comillas simples, por ejemplo, imprimir un atributo HTML:
$div = '<a href="http://www.forosdelweb.com/" title="Foros del Web" id="link_fdw" style="link_azul">Link a Foros del Web</a>';
Otra caracteristica de PHP es el operador de unin de cadenas (.). Con este operador podemos unir dos o ms cadenas de texto, o incluso cadenas con variable, de manera que formen parte de la misma serie de datos.
$cadena1 = "Hola mundo"; $cadena2 = ", este es "; $texto = $cadena1 . "$cadena2 mi primer script"; echo $texto; // Imprime: Hola mundo, este es mi primer script
Como se aprecia en el ltimo ejemplo, el usar comillas dobles hace que las variables en el texto sean reemplazadas por sus valores correspondientes, no as con las comillas simples.
Hay dos tipos de mbitos en los que se puede declarar las variables: local y global. La diferencia es que las variables locales solo pueden ser usadas dentro de la funcin en donde fueron definidas, mientras que las globales las podemos utilizar en cualquier parte de nuestro script y desde diferentes funciones. Por norma general cada variable es tomada como local a menos que se declare de diferente forma para que sea global, ejemplo:
global $nombre_del_sitio = "Foros del Web";
Puedes grabarlo con el nombre que desees y vers que funciona de igual forma que el primer ejemplo, pero si nos fijamos en el cdigo vemos que hemos almacenado un valor en la variable $texto y que para desplegarlo hemos utilizado de nuevo el comando echo, pero ahora sin las comillas pues que lo que queremos es que imprima el contenido de la variable. Tambin podemos imprimir en pantalla el resultado de una variable ms algn texto especfico en una misma lnea, por ejemplo:
<body> <html> <?php $texto = "Hola, soy una variable con un texto"; echo "El programa quiere saludarte: " . $texto; ?> </body> </html>
11
Escape de caracteres
Un dato tipo texto, como ya dijimos, puede contener cualquier caracter, y debe ser delimitado por comillas simples o dobles. Un dolor de cabeza frecuente para muchos desarrolladores es la necesidad de imprimir un texto que contiene ambos tipos de comillas. Si delimitamos nuestro texto con comillas simples, entonces tendremos un problema a la hora de querer incluir una comilla simple textual dentro de nuestro texto, sin que esto indique el fin de la cadena. Para solucionar esto podemos escapar esa comilla simple que queremos que sea interpretada textualmente. Para escapar un caracter debemos precederlo por una barra invertida (\) Veamos un ejemplo:
$texto = 'Nuestro foro se llama \'Foros del Web\' y ahora tiene un wiki!'; echo $texto; // Imprime: Nuestro foro se llama 'Foros del Web' y ahora tiene un wiki!
Al usar una barra invertida delante de la comilla simple, le indicamos al intrprete PHP que ese caracter debe ser tomado textualmente y no como el final de la cadena. Intentar escapar cualquier otro caracter har que la barra invertida sea tomada tambin textualmente.
12
Como ves, al usar comillas dobles, al igual que con las simples, podemos tambin escaparlas cuando queramos imprimirlas textualmente. Y adicionalmente, si queremos imprimir el signo de dlar sin que ste sea tomado como parte de un nombre de variable, tambin podemos escaparlo. Nota la diferencia entre usar comillas simples y dobles:
echo 'El valor de echo "El valor de valor de la la variable valor de la la variable variable \$nombre es $nombre'; // Imprime: El \$nombre es $nombre variable \$nombre es $nombre"; // Imprime: El $nombre es Marco Madueo
Usando comillas dobles disponemos tambin de ciertos caracteres especiales. Los ms usados son:
* \n * \r * \t echo : Salto de lnea : Retorno de carro : Tabulacin "Este texto va en una lnea \n Este va en la siguiente";
OJO, el salto de lnea \n no es un salto de lnea HTML (como <br>). Si ejecutas el cdigo anterior en tu navegador, vers que se imprime todo en una lnea. La diferencia la vers si observas el cdigo fuente generado. A lo largo de este manual vers la importancia de este salto de lnea sin ninguna aparente utilidad prtica.
HEREDOC y NOWDOC
Son sintaxis poco usadas, aunque pueden llegar a ser muy prcticas. Primero sepamos que HEREDOC es el equivalente de las comillas dobles, y NOWDOC el de las comillas simples. Estas dos sintaxis nos sirven para imprimir textos sin la necesidad de escapar las comillas. Son tiles a la hora de escribir o almacenar en variables textos largos, proceso engorroso si lo hacemos delimitando la cadena con comillas. Veamos la sintaxis de HEREDOC (Equivalente de las comillas dobles):
13
$variable = "Un valor"; $cadena = <<<FOO Texto largo, de varias lneas, que se imprime usando la sintaxis HEREDOC. Las variables aqu son interpretadas: $variable FOO; echo $cadena;
Y un ejemplo de NOWDOC
$variable = "Un valor"; $cadena = <<<'ABC' Texto largo, de varias lneas, que se imprime usando la sintaxis NOWDOC. Las variables aqu NO son interpretadas: $variable ABC; echo $cadena;
Hay que considerar algunas pautas. Para usar ambas sintaxis, debemos primero colocar el signo menor qu (<) 3 veces: <<<, seguidos inmediatamente de un identificador que conste de caracteres alfanumricos y de subrayado, clsicamente de 3 letras, y luego un salto de lnea. Es importante seguir esta secuencia y no agregar nada, como espacios, entre estos elementos. Para usar NOWDOC debemos encerrar el identificador entre comillas simples (ver ejemplo). Para cerrar el bloque, debemos dar un salto de lnea, escribir el identificador tal y como lo pusimos al inicio (NOWDOC, ahora NO se incluye las comillas que se coloc al abrir el bloque), cerrar la instruccin (punto y coma ;) y luego dar un salto de lnea. No se debe colocar espacios ni tabulaciones antes o despus de esta secuencia pues de ser as el bloque de texto no ser finalziado. La ventaja principal de estas sintaxis, como ya dijimos, es la posibilidad de escribir bloques largos de texto sin la necesidad de escapar las comillas. Usando HEREDOC las variable y los caracteres especiales ya vistos seguirn siendo reemplazados por sus valores correspondientes, no as con NOWDOC.
14
$d = ( ( $b / 3 ) + 5) * $c - 7;
Las operaciones usando datos numricos siguen los mismos principios que para las matemticas comunes.
Para acceder a los elementos de un array se usa el nombre de la variable que lo contiene, seguido del ndice del elemento deseado entre corchetes []:
echo $var['a']; // Imprime: o pueden ser textuales echo $var['letras'][2]; // Imprime: b
Los valores pueden ser de cualquiera de los tipos que soporta PHP. No es necesario indicar los ndices, y en ese caso se usarn valores enteros tomando como base el mximo valor entero ya existente:
$arreglo = array(3 => "c", "d", "e", "f"); echo $arreglo[5]; // Imprime: e
Analiza cada uno de los ejemplos hasta que entiendas el funcionamiento bsico de los arrays. Para modificar los elementos de un array lo puedes hacer igual que como si fueran variables:
15
$arreglo = array("fruta1" => "pera", "fruta2" => "manzana", "fruta3" => "banana"); echo $arreglo['fruta2']; // Imprime: manzana $arreglo['fruta2'] = 'naranja'; echo $arreglo['fruta2']; // Imprime: naranja
Para eliminar variables podemos simplemente asignarles un valor NULL, como ya dijimos, o en su defecto usar la funcin unset(). Asignarles un espacio en blanco no elimina la variable:
// Formas CORRECTAS de eliminar una variable $variable = null; unset($variable); // Formas INCORRECTAS de eliminar una variable $variable = " "; $variable = ""; $variable = 0; $variable = false; $variable;
Otros tipos
Existen dos tipos ms de datos: Los recursos y los objetos. stos sern vistos posteriormente, ya que requieren un mayor nivel del conocimiento de PHP y escapan de los objetivos de cualquier tutorial bsico.
16
Operadores aritmticos
Operador + * / % ++ -Operacin Sumar Restar Multiplicar Dividir Mdulo Incrementar Disminuir Descripcin Ejemplo Suma entre valores x=10+2 Resta entre valores y=5-1 Multiplica distintos valores z=5*5 Divide entre valores a=20/2 Devuelve el resto de una divisin 10%2 Suma una unidad a determinado valor $b=10; $b=++; Resta una unidad a determinado valor $b=10; $b=--; Resultado 12 4 25 10 0 11 9
Operadores de Asignacin
Operador Operacin = . Asignar Union Descripcin Asigna un valor a una variable Une dos variables Ejemplo $var = 1 $var1 . $var2 Resultado $var contiene 1 Union de $var1 con $var2
Operadores de Comparacin
Operador == === != <> !== < > Descripcin Ejemplo Resultado Compara dos valores (no compara $a == $b Verdadero si $a es igual a $b el tipo de variable) Compara los dos valores si son Verdadero si $a es igual a $b y $a === $b iguales y del mismo tipo son el mismo tipo de variable Compara si las variables son Verdadero si $a es diferente de $a != $b diferentes $b Compara si las variables son Verdadero si $a es diferente de $a <> $b diferentes $b Compara que las dos variables sean Verdadero si $a y $b son $a !== $b diferentes y de diferentes tipos diferentes y son diferentes tipos Compara que la primera variable $a < $b Verdadero si $a es menor que $b sea ms pequea que la segunda Compara que la primera variable $a > $b Verdadero si $a es mayor a $b sea mayor que la segunda
17
<= >=
Compara que la primera variable sea menor o igual que la segunda Compara que la primera variable sea mayor o igual que la segunda
Operadores Lgicos
Operador And Descripcin Compara que las dos variables sean verdaderas (tambin se puede usar &&) Compara que alguna de las dos variables sean verdaderas (tambin se puede usar ) Compara que $a o $b sean verdaderos pero no ambos Niega una condicin Ejemplo $a And $b Resultado Verdadero si $a y $b son verdaderos Verdadero si $a o $b son verdaderos Verdadero si $a o $b son verdaderos pero no ambos Verdadero si $a es falso
Or Xor Not
$a Or $b $a Xor $b !$a
Tipos de condicionales
if
Es la sintaxis bsica y la ms sencilla dentro de todos los condicionales en PHP. Lo utilizamos para que ejecute determinado cdigo SI Y SLO SI la condicin es verdadera.
<?php $estado_civil = 'Casado'; if ($estado_civil == 'Soltero') { echo 'Est buscando novia?'; }
18
En este caso pudimos haber preguntado su estado civil con anterioridad, el cul tenemos guardado en la variable $estado_civil, para entonces poder evaluar luego su valor. Como se observa en el ejemplo, el bloque de cdigo a ejecutar si la condicin es verdadera debe ir encerrado entre {llaves}, y slo si el cdigo que queremos ejecutar consta de una sola lnea podemos omitir las llaves; sin embargo, es recomendable nunca omitirlas para conservar la legibilidad del cdigo. Ntese adems que en el ejemplo hemos usado el operador == para comparar con un valor.
if else
Es una ampliacin de la sintaxis IF. Nos permite ejecutar un bloque de cdigo si la condicin es verdadera, y otro bloque diferente si es falsa.
<?php $estado_civil= 'Soltero'; if ($estado_civil == 'Casado') { echo 'Felicitaciones!'; } else { echo 'Est buscando novia?'; }
En este ejemplo podemos notar que las lneas en donde se encuentra el if y el else no terminan con un (;), pues no representan una instruccin PHP propiamente dicha, sino un nodo que deriva el flujo de ejecucin de cdigo a un lado u otro dependiendo del resultado de la evaluacin de la condicin.
if elseif else
Es una versin un poco ms avanzada del anterior en donde podemos tener dos o ms condiciones que se ejecutan secuencialmente hasta que una es evaluada como VERDADERA, en cuyo caso se ejecuta el bloque correspondiente de cdigo y finaliza la evaluacin de las condiciones restantes. Si se incluye un bloque else al final, ste ser ejecutado si ninguna de las condiciones anteriores es verdadera.
<?php $estado_civil = 'Soltero'; if ($estado_civil == 'Casado') { echo 'Felicitaciones!'; } elseif ($estado_civil == 'Viudo') { echo 'Sentimos mucho su prdida'; } elseif ($estado_civil == 'Conviviente') { echo 'Esperamos su pronto matrimonio'; } else { echo 'Est buscando novia?'; }
19
$numero = 115; if ($numero == 115) { echo 'Felicitaciones usted ha ganado la lotera!'; } elseif ($numero >= 116) { echo 'Su ticket de lotera participa la otra semana'; } else { echo 'Lo sentimos, pero su nmero no ha salido ganador'; } ?> </body> </html>
En este caso adems del cdigo del programa hemos incluido las etiquetas HTML lo cual se puede hacer con cualquiera de los ejemplos que hemos dado, y vemos cmo podemos desplegar un mensaje segn en qu rango se encuentre un nmero que hemos definido anteriormente o que bien puede ser un valor resultado de una operacin.
switch
Es otro tipo de condicional muy similar al IF ELSEIF ELSE. Su ventaja radica en que permite confrontar un valor patrn con una serie de valores. Cuando uno de los valores es igual (==) al valor patrn, se ejecuta el bloque de cdigo correspondiente. Note que la sintaxis es algo diferente a la de los condicionales estndares IF, pero hace que el cdigo se vea mucho ms legible y ordenado.
<html> <body> <?php $sistema_operativo = 'Mac OS X'; switch($sistema_operativo) { case 'Windows': // Podemos incluir comentarios echo "Su sistema lo invent <strong>Bill Gates</strong><br />"; echo " y sirve mucho para jugar solitario."; break; //este comando sirve para finalizar el condicional case 'Linux': echo 'Su sistema fue creado a partir del cdigo de Linus Torvalds.'; break; default: //cualquier otro valor no especificado en los case echo "Hay un mito con las computadoras creadas por Apple<br />"; echo "que dice que solo sirven para disear, pero no es cierto."; } ?> </body> </html>
La palabra clave default desempea el mismo rol que el ELSE, es decir, el bloque de cdigo bajo esta palabra se ejecuta cuando la confrontacin del valor patrn con los otros valores dio en todos FALSO. Adems, es muy importante saber que cada bloque de 20
cdigo DEBE finalizar con la palabra clave break, como en el ejemplo. De ser omitida, la ejecucin del cdigo continua ignorando las condiciones siguientes, hasta que encuentra un break o termina el bloque switch.
Tipos de bucles
while
Ejecuta un bloque de cdigo mientras una condicin especfica sea verdadera, por ello la verificacin de dicha condicin se hace desde un principio.
$i = 1; while($i <= 5) { echo 'Nmero ' . $i . '<br>'; ++$i; // Esta instruccin hace que el valor de $i se incremente en 1 }
En el ejemplo, primero definimos una variable $i asignndole el valor de 1, luego iniciamos el bucle diciendo que mientras $i contenga un valor menor o igual a 5 que ejecute lo que est entre llaves {}, osea desplegar un mensaje que diga Nmero ms el valor de $i, y luego que le sume una unidad, lo que nos dara como resultado:
Nmero Nmero Nmero Nmero Nmero 1 2 3 4 5
Cuando $i toma el valor de 6, la condicin deja de cumplirse (es falso que 6 es menor o igual a 5). Por lo tanto, el bucle termina y se contina con la ejecucin de las instrucciones despus del ciclo.
do while
La diferencia con el anterior es que ste siempre va a ejecutar el cdigo la primera vez, y luego recin har la comprobacin de la condicin para determinar si contina un nuevo ciclo o termina.
$i = 1; do { ++$i;
21
Resultado:
Nmero Nmero Nmero Nmero Nmero 2 3 4 5 6
Explicacin: como en un inicio colocamos el $i++ (le sumamos uno al valor de $i); el primer valor que muestra es Nmero 2 pero tambin pudimos haber colocado eso luego del echo para que mostrara del 1 al 5.
for
Su sintaxis es bastante corta y dentro de la misma lnea se especifica la inicializacin de la variable (que se ejecuta solo una vez), la condicin a evaluar, y una operacin a realizar. Estos "parmetros" deben escribirse en esa secuencia y separados por punto y coma (;) uno de otro, pues constituyen cada uno instrucciones totalmente diferentes. En el siguiente ejempo entenders mejor este concepto:
for($i=0; $i<=100; ++$i) { echo 'Nmero ' . $i . '<br>'; }
En este ejemplo el for le asigna un valor de 0 a $i (primera instruccin) y condiciona que, luego de incrementar en uno el valor de $i (tercera instruccin), se inicie un nuevo ciclo s y slo s $i tiene un valor menor o igual a 100 (segunda instruccin). Para entender esto es importante que sepas el papel de cada una de estas instrucciones
La primera instruccin es ejecutada slo una vez, al iniciar el ciclo for. Por eso se usa generalmente para asignar un valor a nuestra variable gua o bandera, que en este caso es $i. La segunda instruccin se ejecuta siempre al iniciar un nuevo ciclo (No en el primer ciclo). Esta es evaluada para, segn el valor booleano que devuelva, determinar si debe iniciarse un ciclo nuevo o si el bucle debe terminar. Por lo tanto, casi siempre se hace una comparacin entre el valor de $i (la variable gua) y un valor estndar. La tercera instruccin ejecuta una tarea adicional siempre al finalizar cada ciclo. Se le usa generalmente para modificar el valor de la variable gua, como por ejemplo, incrementar su valor.
Ahora, sabiendo esto, vuelve a revisar el ejemplo anterior para que te des cuenta del proceso que se sigue al realizar este bucle.
foreach
Se utiliza para recorrer arreglos (arrays), que como vimos son conjuntos de informacin dentro de una variable. El ciclo foreach toma uno de los valores del array (con o sin su 22
ndice) y lo asigna a otras variables 'temporales' que especificamos, luego ejecuta un cdigo, y al finalizar se mueve al siguiente elemento del array. Por lo tanto, vuelve a ejecutar el cdigo tantas veces como valores tenga el arreglo.
<?php $hermanos = array('Juan', 'Lucas', 'Carlos', 'Adolfo', 'Roberto'); foreach ($hermanos as $nombre) { echo $nombre . '<br />'; }
Explicacin: En la primera lnea asignamos a una variable $hermanos un conjunto de datos organizados en un arreglo, usando array() y separando cada dato con comas. Luego, con el foreach lo que hace es crear un ciclo en base a los datos contenidos en nuestra variable, asignando en cada ciclo uno de los valores a la nueva variable $nombre. El foreach hace un recorrido desde el primer valor de $hermanos que en este caso sera Juan, le pasa ese valor a $nombre y entonces imprime la variable usando echo, luego vuelve a ejecutar el ciclo, pero ahora $nombre tiene el segundo valor de nuestro arreglo, que sera Lucas, y as sucesivamente hasta terminar con todos los elementos del arreglo. Resultado:
Juan Lucas Carlos Adolfo Roberto
Una extensin de este tipo de ciclo es que adems puedes hacer el mismo proceso asigando tambin a otra variable el ndice correspondiente a cada valor del arreglo. Miremos el siguiente ejemplo
$frutas 'a' 'b' 'c' 'd' 'e' ); = array( => 'Pltano', => 'Pia', => 'Manzana', => 'Fresa', => 'Naranja'
foreach($frutas as $letra => $fruta) { echo "La fruta '$letra' es '$fruta' <br>"; }
El proceso es el mismo, slo que sta vez en la lnea del foreach agregamos una variable adicional $letra que en cada ciclo tomar como valor el ndice correspondiente a los valores respectivos, asignados a $fruta. La sintaxis bsica de foreach, en resumen, es
foreach($arreglo as $variable_indice => $variable_valor) { El cdigo }
23
La La La La
es es es es
Variables de PHP
Este ejemplo te mostrar informacin acerca de la instalacin de PHP en tu servidor o computadora, muchas veces es til para saber qu mdulos estn activos o cuales no, as como para identificar los lmites de memoria que tienen ciertas configuraciones que talvez te estn ocasionando problemas.
<html> <body> <?php phpinfo(); ?> </body> </html>
Identificando el navegador
Adems de las variables locales y globales existen las _variables reservadas_ tambin conocidas como globales, a stas no se les puede asignar un valor, pues lo que contienen es informacin del servidor web o informacin del cliente que lo visita. El siguiente cdigo nos muestra el tipo de navegador que estamos utilizando para ingresar.
<html> <body> <?php echo $_SERVER["HTTP_USER_AGENT"]; ?> </body> </html>
24
Ahora veamos un ejemplo combinando dos de los temas aprendidos en este tutorial, lo que haremos es evaluar si el navegador utilizado es Internet Explorer para entonces mostrar un mensaje.
<html> <body> <?php if (strstr($_SERVER["HTTP_USER_AGENT"], 'MSIE')) { echo "Usted utiliza Internet Explorer<br />"; } ?> </body> </html>
Como notarn, utilizamos una funcin llamada strstr al hacer el IF, lo que esto realiza es buscar una cadena de texto dentro de otra, en este caso la frase MSIE dentro del resultado de la variable $_SERVER y mostrarnos todo el texto que le sigue, otro ejemplo similar:
<?php $nombre = 'Juan Carlos Lpez Morales'; $extraer = strstr($nombre, 'Carlos'); echo $extraer; // Nos devolver Carlos Lpez Morales ?>
A la variable $extraer le estamos indicando que busque el texto Carlos dentro de $nombre, para que entonces nos devuelva Carlos ms el resto del contenido.
La funcin date() devuelve la fecha actual del servidor o computadora en donde estemos ejecutando el cdigo y la puede mostrar en diferentes formatos, tal como el ejemplo anterior en donde Y = al ao, m = al mes y d= da en valores numricos.
25
Por ejemplo, podemos crear una funcin que haga un calculo matemtico complejo cuando le enviemos dos valores, entonces en lugar de programar de nuevo ese clculo en cada momento que lo necesitemos, solo lo hacemos una vez como una funcin, y luego hacemos un llamado cada vez que vayamos a necesitar de ese bloque de programacin. Para declarar la funcin dentro de nuestros programas hacemos lo siguiente:
function nombredeFuncion() { bloque de programacin; }
Funciones Bsicas
<html> <body> <?php function sitioweb() { echo 'Foros del Web'; } echo 'Bienvenido a nuestro sitio llamado '; sitioweb(); ?> </body> </html>
En ste primer ejemplo iniciamos nuestro bloque de programacin creando nuestra primera funcin titulada sitioweb que tiene una impresin de pantalla por medio de echo , la funcin por si misma no hace nada hasta que la llamamos, an teniendo el echo el mensaje no se desplegar sino hasta que escribimos sitioweb();
26
En este caso lo que hacemos es ingresar dentro de los parntesis de suma() el valor de 15, all estamos llamando a la funcin por lo que el programa ejecutar el cdigo indicado arriba sumando el valor enviado ms el valor de la variable $valor2 para mostrarnos el resultado. Conviene poner los parntesis agrupando la operacin.
Otro ejemplo:
<?php function Cuadrado($numero) { return $numero * $numero; } echo Cuadrado(4); ?> // igual a 16
27
function numeros() { return array (0, 1, 2); } list ($cero, $uno, $dos) = numeros();
En return array() tenemos tres valores los cuales luego podemos asignar cada uno a una variable distinta gracias a la funcin list, de esa forma $cero tendr el primer valor, $uno tendr 1 y $dos el ltimo valor del arreglo.
En este ejemplo, la etiqueta <form> sirve para armar el formulario en HTML, dentro de sta etiqueta estamos utilizando action para indicar que toda la informacin sea enviada al archivo llamado programa.php y por ltimo method es para especificar de qu forma ser enviada esa informacin para lo cual hay dos formas, GET y POST.
$_GET y $_POST
Cuando utilizamos $_GET dentro del php y el formulario, la informacin que enviamos ser visible por cualquier persona pues es mostrada en la barra de direcciones, por lo que no debemos utilizar ste mtodo para enviar contraseas o informacin sensible. Una limitante de GET es que solo puede enviar hasta 100 caracteres. Comparado a $_POST, la informacin enviada por esta forma es invisible pues no se muestra cuando se enva y prcticamente no hay un lmite en cuanto a tamao se refiere. Es recomendable utilizar el segundo mtodo cuando vamos a enviar informacin que por ejemplo va a ser almacenada en una base de datos y ya no va a ser modificada, o cuando vamos a enviar un formulario de contacto por ejemplo, y utilizamos GET cuando la informacin puede cambiar en algn momento, por ejemplo, si estamos buscando algo en Google puede ser que los resultados no son los que necesitemos entonces regresamos a la pantalla anterior para modificar la informacin.
28
Ahora abrimos en el navegador formulario.html, ingresamos la informacin que se nos pide y veremos cmo nuestro programa procesa los datos. A simple vista podemos entender bastante bien cmo funciona, como vemos al utilizar $_GET['nombre']; lo que hacemos es capturar el campo llamado nombre del formulario:
<input type="text" name="nombre" id="nombre" />
Y lo mostramos utilizando echo tal como aprendimos a imprimir en pantalla las variables.
o
Captura de pantalla*
http://localhost/programa.php?nombre=Juan&age=25
29
Como vemos cuando en el formulario utilizamos method=get en la programacin tambin debemos utiliza $_GET, igual para post, sin embargo tambin existe $_REQUEST que puede obtener la informacin de los formularios sin importar qu metodo se utiliza, ejemplo:
Bienvenido <?php echo $_REQUEST["nombre"]; ?>,<br /> Tu edad es: <?php echo $_REQUEST["edad"]; ?> aos.
Inputs
Son campos regularmente para el ingreso de texto, son los que vemos en los formularios de contacto para ingresar nombre, correo electrnico, etc. Sintaxis:
30
<form> <label for="nombre_campo">Texto</label> <input id="nombre_campo" type="text" name="nombre" value="texto_default" /> </form>
La primera lnea label sirve para identificar el nombre del campo que le sigue, es adems la etiqueta que aparece para que el usuario sepa qu dato se le est pidiendo que llene aunque no es necesario encerrarlo en una etiqueta label.
o
Otra variante de este Input es el de tipo password que hace que el texto que se escribe en el sea reemplazado por smbolos como proteccin:
<input id="contrasea" type="password" name="contrasea" value=""" />
Y tambin podemos ocultar stos campos de texto colocndole el type=hidden lo cual nos sirve para enviar alguna informacin ya predefinida junto a todo lo que el usuario ingrese.
<input type="hidden" name="contador" value="350 /> o
captura
El ltimo tipo de input que veremos es el submit que es el botn que regularmente hacemos click para poder enviar un formulario con la informacin que llenamos.
<form name="input" action="programa.php" method="get"> Nombre: <input type="text" name="nombre" /> <input type="submit" value="Enviar" /> </form> o
captura
31
Radio
Los controles de tipo Radio son los que vemos que tienen una forma redonda y se pueden utilizar para preguntar opciones de tipo falso/verdadero, masculino/femenino, etc y en donde solo puede estar seleccionada una de las opciones:
<form> <label for="nombre_input">Masculino</label> <input type="radio" name="sexo" value="masculino" checked="checked"/> <label for="nombre_input">Femenino</label> <input type="radio" name="sexo" value="femenino" /> </form>
Checked nos sirve para indicar que queremos que ese campo aparezca seleccionado desde un inicio.
o
Checkbox
Estos controles son usados cuando se necesita que se pueda seleccionar una o ms opciones de las que se presentan, o tambin cuando solo se presenta una opcin y necesitamos que el usuario la marque por ejemplo para poder continuar con algn proceso.
<form> Mac OS <input type="checkbox" name="sistema" value="mac" checked="checked"/> <br /> Windows <input type="checkbox" name="sistema" value="windows" /> <br /> Apple <input type="checkbox" name="sistema" value="linux" /> </form>
32
Textarea
A diferencia del primer input que vimos, los textarea son campos grandes para ingreso de texto multilnea en donde podemos especificar la cantidad de stas y de columnas que queramos.
<form> <textarea id="comentario" name="comentario" rows="10" cols="30"> texto default si deseamos </textarea> </form> o
Las tablas son los contenedores de informacin. En nuestra base de datos podremos tener mltiples tablas, cada una destinada a un fin especfico. En una guardaremos los datos de los usuarios registrados en nuestro sitio, en otra pondremos los mensajes de visita, y en otra las noticias. Podemos crear tantas tablas como necesitemos para el sistema que queremos crear.
33
Cada tabla est formada por una serie de columnas, llamadas usualmente campos o atributos. stas van a contener un determinado tipo de datos, como nmeros o texto, y van a estar representadas por un nombre nico que las va a identificar. Por ejemplo, si queremos tener un sistema de comentarios en nuestro sitio, tendremos una tabla llamada comentarios, y en ella mltiples columnas, como nombre, fecha, ip, email y comentario. Una prctica estndar muy recomendada es tener siempre una columna ndice que va a identificar cada registro en nuestra tabla. Por lo tanto, a nuestros campos aadiremos uno llamado id. Una fila es un registro de datos. Podemos tener tantas filas en nuestra tabla como capacidad tenga nuestro servidor. Siguiendo el ejemplo anterior, cada nuevo comentario que deje un usuario ser almacenado en nuestra tabla destinada a ello, junto con los otros datos como su nombre, fecha, etc. Este conjunto de datos que vamos a insertar en la tabla constituye un registro o una fila dentro de ella.
El lenguaje SQL
Una base de datos es un sistema que dispone de su propio lenguaje, muy diferente al lenguaje PHP. Hay muchos lenguajes en funcin de la base de datos, pero el que vamos a utilitzar es el conocido lenguaje SQL, este est formado por una serie de instrucciones, las cules van a modificar, agregar o eliminar los datos almacenados en la base de datos. No es el objetivo de este tutorial profundizar en este lenguaje. Para poder interactuar con la base de datos PHP dispone de una serie de funciones, las cules permiten tres tipos de operaciones bsicamente:
Abrir/cerrar conexiones con los servidores de bases de datos Ejecutar consultas SQL Trabajar sobre el resultado de dichas consultas
En todas ellas se usa el lenguaje SQL. La ms usada y conocida es MySQL, pero PHP puede tambin interactuar con las dems. Cabe destacar que, pese a que conozcamos el lenguaje SQL y estos SGBD estn basados en l, puede que algunas instrucciones determinadas no funcionen en algunos de stos. Esto es porque en realidad estos gestores pueden haber redefinido en mayor o menor medida el lenguaje para lograr el objetivo para el que fueron diseados. Sin embargo, esto slo suele ocurrir en las instrucciones ms avanzadas, en cuyo caso si recibimos un error de sintaxis deberamos recurrir al manual para comprobar cul es la instruccin adecuada para nuestro propsito.
Luego de hacer esto tendremos una conexin abierta con nuestro servidor MySQL, y podemos ahora trabajar sobre ella.
35
Ocasionalmente necesitaremos conectarnos a dos o ms servidores simultneamente (de hecho son casos muy excepcionales). Para poder lograrlo debemos trabajar tambin con recursos de conexin. Un recurso es, en trminos simples, una variable que lleva consigo la llave de determinado proceso. La funcin mysql_connect() genera un recurso de conexin, llamado identificador de enlace, que lleva consigo la conexin abierta con el servidor MySQL. Podemos usar ese recurso para hacer referencia a esa conexin de forma especfica. Para obtenerlo basta con asignar la funcin vista a una variable que se convertir en el recurso para esa conexin:
$conexion = mysql_connect($servidor, $usuario, $clave);
Como casi nunca tendremos que abrir varias conexiones simultneas, no tocaremos ms el tema de los identificadores de enlace. Slo tienes que saber que estn ah. Tambin disponemos de mysql_close(), una funcin destinada a cortar la conexin abierta con el servidor MySQL. Antiguamente se sugera siempre cerrar la conexin con el servidor MySQL al terminar de ejecutar todas las consultas SQL, argumentando que se liberaba la memoria usada por sta en el servidor; pero ahora se sugiere dejarla abierta, ya que al terminar la ejecucin del script todas las conexiones abiertas son cerradas automticamente; adems, si por alguna razn se necesita volver a consultar a la base de datos tendremos que abrir nuevamente la conexin, y eso s genera una carga totalmente innecesaria al servidor. Por lo tanto, el uso de mysql_close() debe quedar reservado exclusivamente para aquellos casos en los que se requiera procesar una gran cantidad de informacin tras ejecutar las consultas SQL. En general, nunca cerraremos la conexin con el servidor MySQL; bastar con indicar entonces que para hacerlo basta con llamar a esa funcin:
mysql_close();
Una vez seleccionada la base de datos, podemos empezar a ejecutar consultas SQL.
Realizar consultas
36
Como ya hemos venido diciendo, las consultas SQL, o tambin conocidas por su nombre en ingls como queries, son instrucciones que le enviamos al servidor MySQL para que ejecute determinada tarea. Una consulta, en trminos prcticos, no es ms que una cadena de texto. Para ejecutar la consulta debemos usar la funcin mysql_query() pasndole como parmetro la cadena de texto que contiene la consulta SQL. Al llamarla as, estaremos haciendo una consulta a la base de datos. Al igual que mysql_connect(), esta funcin tambin crea un recurso, el cul no ser til despus paratrabajar en base a la consulta que hemos realizado. Veamos un ejemplo de todo lo visto hasta ahora:
mysql_connect('localhost', 'admin', ''); mysql_select_db('mi_base_de_datos'); $query = mysql_query('SELECT * FROM tabla');
Al realizar la consulta, tenemos el recurso $query que podremos usar luego para leer los datos devueltos por la consulta o trabajar sobre ella. NOTA: es muy frecuente ver que muchos intentan usar el recurso devuelto por mysql_query() como si fuese el resultado en s de la consulta. Debemos aclarar que por s slo este recurso no representa nada, no se puede imprimir ni se puede emplear directamente, sino a travs de otras funciones que veremos en las siguientes secciones.
Procedimientos ms comunes
En esta seccin vamos a revisar las tareas ms frecuentemente usadas al trabajar con bases de datos. Para hacerlo, pensemos que tenemos una base de datos llamada "principal" y una tabla en ella llamada "comentarios" que tiene la siguiente estructura:
* id almacena el identificador de cada registro, es un campo autoincrementable, esto quiere decir que para cada registro el valor de este campo se incrementa en 1. * nombre el nombre de la persona que enva el comentario * email la direccin de correo de la persona que enva el comentario * comentario el comentario del usuario * estado el estado actual del comentario (publicado, eliminado o spam)
37
No profundizaremos en el cdigo SQL usado para crear la bases de datos o esa tabla en ella, pues no es algo que vayamos a realizar rutinariamente en nuestros scripts. Adems existen aplicaciones como PHPMyAdmin que van a facilitar estas tareas. Basta con indicar que las consultas SQL son estas: Crear la base de datos
CREATE DATABASE 'principal';
Si realmente deseas profundizar en el tema del lenguaje SQL puedes leer el manual de SQL en Maestros del Web. Vamos a revisar los procedimientos ms comunes al hablar de bases de datos, los cules son:
SELECT: Obtener los datos existentes INSERT: Insertar nuevos datos UPDATE: Actualizar los datos existentes DELETE: Eliminar datos existentes
38
Con esta consulta le estamos pidiendo al servidor MySQL que nos enve el nombre y email de todos los registros en la tabla comentarios. Si quisiramos todos los datos, en vez de colocar uno a uno los nombres de los campos podemos usar un asterisco (*) para hacer referencia a todas las columnas de la tabla. Podemos hacer la consulta un poco ms especfica, para ello hacemos uso de las clasulas disponibles para esta sentencia. Una clasula acta igual que un parmetro para los tags HTML. Veamos las ms comunes:
WHERE: Acta como un filtro en la consulta SQL, haciendo que sta devuelva slo los campos que cumplan con los criterios all establecidos (WHERE campo1 = 'valor1' AND campo2 = 'valor2'). Lo ms comn es hacer comparaciones, donde comparamos el valor de un campo con un valor gua. LIMIT: Define cuntos registros queremos que nos devuelva la consulta SQL y desde dnde debe empezar a extraer (LIMIT registro_inicial, nmero_de_registros). El primer registro en nuestro resultado va a ser el registro cero (0), por lo que si queremos extraer 3 registros a partir del segundo deberemos poner LIMIT 1, 3 ORDER BY: Ordena los resultados en base a una columna (ORDER BY campo ASC/DESC). Por ejemplo, si queremos ordenar en orden alfabtico (ascendente) en base al campo nombre, pondremos ORDER BY nombre ASC
Si despedazamos la consulta, veremos que le estamos pidiendo al servidor MySQL que nos devuelva todos los campos (SELECT *) de los registros de la tabla 'comentarios' (FROM comentarios) cuyo estado es 'spam' (WHERE estado = 'spam'), pero ordenndolos en orden descendente en base al valor del campo 'id' (ORDER BY id DESC) y que slo nos d 3 registros empezando por el primero (LIMIT 0, 3).
39
Hecha la consulta hemos obtenido un recurso, y lo hemos guardado en la variable $query. Ahora podemos trabajar sobre esa consulta haciendo referencia a esa variable.
Si te fijas en el ejemplo, en cada ciclo creamos un array $fila que contiene los datos de la fila correspondiente a ese ciclo. Como estamos usando mysql_fetch_assoc(), obtenemos un array asociativo, esto quiere decir que los ndices del array son los nombres de los campos de la tabla en la base de datos. Usando la tabla que especificamos al inicio, con esta consulta obtendremos lo siguiente:
El comentario #9 escrito por Brenda (brenda@proveedor.tld) es spam El comentario #6 escrito por Mara (maria@proveedor.tld) es spam El comentario #5 escrito por Miguel (miguel@proveedor.tld) es spam
Es importante que notes que, en la condicin del while no hacemos una comparacin (== ===), sino una asignacin (=). En la prctica, la asignacin $variable = false devuelve en su conjunto false, y como ya mencionamos, al llegar al final de los resultados la funcin mysql_fetch_assoc() devuelve false. Por eso es que el ciclo funciona.
$total = mysql_num_rows($query); if($total == 0) { echo 'La consulta no devolvi ningn resultado'; } else { echo 'La consulta devolvi ' . $total . '$filas'; // Podemos mostrar aqui los resultados (while...) }
El recurso es el resultado devuelto por la llamada a mysql_query(), la fila es el nmero de fila que queremos extraer (Recordemos que la primera fila es cero!), y como parmetro opcional campo debemos indicar el nombre o nmero del campo deseado si en nuestra consulta solicitamos ms de una columna. Veamos algunos ejemplos tomando como base el ejemplo anterior:
echo mysql_result($query, 0, 'nombre'); // Imprime: Brenda echo mysql_result($query, 1, 'email'); // Imprime: maria@proveedor.tld echo mysql_result($query, 2); // Imprime: 5 (No escribir el campo hace que se tome el valor del primer campo, en este caso id) echo mysql_result($query, 0, 2); // Imprime: brenda@proveedor.tld (El campo #2 es 'email' {tercer campo})
Liberando la memoria
Podemos usar mysql_free_result() para liberar la memoria usada por la consulta SELECT actual. Sin embargo, no es necesario hacerlo a menos que estemos trabajando con un montn muy grande (demasiado grande) de datos.
mysql_free_result($query)
El siguiente ejemplo muestra cmo podramos insertar nuevos datos a nuestra tabla de ejemplo:
$sql = "INSERT INTO comentarios (nombre, email, comentario, estado) VALUES ('lex', 'alex@proveedor.tld', 'Comentario de lex', 'publicado')";
41
mysql_query($sql);
A diferencia de la sentencia SELECT, mysql_query() no retornar un recurso cuando se ejecuta una sentencia INSERT. En su lugar retornar el valor booleano true si la consulta se ejecut con xito, y false en el caso contrario. Es posible agregar varias filas usando la misma consulta, slo hay que separar los grupos VALUES con comas, de la siguiente forma:
$sql = "INSERT INTO comentarios (nombre, email, comentario, estado) VALUES ('Johanny', 'johanny@proveedor.tld', 'Comentario de Johanny', 'publicado'), ('Mayra', 'mayra@proveedor.tld', 'Comentario de Mayra', 'publicado'), ('Xiomara', 'xiomara@proveedor.tld', 'Comentario de Xiomara', 'publicado') "; mysql_query($sql);
Podemos usar, adicionalmente, la funcin mysql_affected_rows() para saber cuntas filas se insertaron tras la ejecucin de la consulta:
echo 'Se insert ' . mysql_affected_rows() . ' nuevos registros';
Por ltimo, podemos omitir el especificar los nombres de los campos de la tabla a la cul queremos insertar los datos, pero en los grupos VALUES tendremos que implcitamente hacer referencia a ellos. Vale decir, el primer valor ir al primer campo, el segundo ir al segundo campo, y as sucesivamente:
$sql = "INSERT INTO comentarios VALUES (NULL, 'Patty', 'patty@proveedor.tld', 'Comentario de Patty', 'publicado')"; mysql_query($sql);
Nota que el valor NULL corresponde al campo id, y le asignamos un valor nulo porque al ser un campo auto_increment su valor va aumentando automticamente al crear nuevos registros.
En este caso definimos una clasula WHERE para indicarle al servidor qu filas son las que deseamos modificar. Puede ser una nica fila, o mltiples filas, siempre que cumplan con los criterios establecidos.
$sql = "UPDATE comentarios SET comentario = 'Este comentario ha sido marcado como spam' WHERE estado = 'spam'"; mysql_query($sql);
42
En este ejemplo vamos a modificar el valor del campo comentario de nuestra tabla para todos los registros cuyo campo estado tenga como valor spam, y les vamos a asignar el valor textual 'Este comentario ha sido marcado como spam'. Al iguul que en el caso de INSERT, la funcin mysql_query() no retorna un recurso, sino un valor booleano. Y tambin aqu podemos usar la funcin mysql_affected_rows() para obtener el nmero de filas modificadas por la consulta. En nuestro ejemplo:
echo 'Se han modificado ' . mysql_affected_rows() . ' filas';
Y en este caso nos dira que se han modificado 3 (las 3 que tienen como estado spam).
Y tambin aqu podemos usar la funcin mysql_affected_rows() para determinar el nmero de filas eliminadas de la tabla con la ejecucin de la consulta. Ejemplo:
$sql = "DELETE FROM comentarios WHERE estado = 'eliminado'"; mysql_query($sql); echo 'Se han eliminado ' . mysql_affected_rows() . ' registros';
Con este ejemplo, estamos eliminando de la tabla comentarios todas las filas cuyo campo estado tenga el valor de eliminado, que en total son 3 filas.
Como has visto a lo largo de este manual, desde PHP podemos controlar todos los datos existentes en nuestra base de datos. Usando formularios y tomando los datos introducidos podemos crear muchas aplicaciones dinmicas, como blogs, sistemas de comentarios, o sistemas de noticias. Las 4 sentencias vistas son las sentencias bsicas del lenguaje SQL, pero hay muchas ms que hacen ms sencillo todava el trabajar con bases de datos. Te invito a que investigues y leas un poco sobre todas ellas.
43