PHP/MySQL Tutorial Lección 1
Mientras tu has estado viviendo en Marte durante los pasados 6 u 8 meses, tu has oído sobre el Open Source Software (OSS). Este movimiento ha tenido mucha importancia dado que los grandes muchachos están tomando en cuenta la noticia. Compañías como ORABLE, INFORMIX y una multitud de otros están liberando sus productos de base de datos para los carteles de niño en el movimiento OSS, Linux.
Teniendo una gran complejidad de RDBMS (Relation Data Base Managament System)es tan bien y tan bueno que tu conozcas que hacer con ellas. Pero quizá estas solo introduciéndote en el mundo de las bases de datos. Tu has leído el articulo de Jay(Liga) y quiere poner tu propio manejador de base de datos en el Web. Pero no tienes los recursos o deseas una ASP por el mismo precio que una Base de Datos. Quieres algunas cosas gratis, y quieres trabajar con UNIX.
Entra a PHP y MySQL. Estos dos componentes hacen la mejor combinación de manejadores de datos para sitios Web en el planeta. No necesitas creerme esto. Un no Oficial Netcraft(liga) examino y demostró que el uso de PHP ha saltado de 7,500 host en Junio de 1998 a 410,000 host en Marzo de 1999. No esta tan mal. La combinación también ha ganado el premio de Bases de Datos en Webcon98.
MySQL es una pequeña, compacta servidor de base de datos ideal por pequeña - y no solo para pequeñas - aplicaciones. En adición a soporta el standard SQL (ANSI), compila en un numero de plataformas y tiene habilidades de multithreading en servidores UNIX, lo cual le da gran desempeño. Para personas que no utilizan UNIX puede correr como un servicio en WinNT y también como un proceso normal en maquinas con Win95/98.
PHP- es un lenguaje script del lado del servidor. Si has visto ASP(liga)podría ser familiar con el código embebido dentro de una pagina HTML. Como ASP, el script de PHP es procesado por el servidor de Web. Después el servidor corre con el código PHP y retorna el viejo código HTML al Navegador. Entonces el tipo de interacción permite algunas operaciones complejas.
En adición a ser libre (MySQL no tiene alguna licencia con restricciones), la combinación PHP-MySQL es también multiplataforma, lo cual significa que puede ser desarrollado en Windows y servir para una plataforma UNIX. También, PHP puede correr en un proceso externo de un CGI, un script interprete montado solo o pegado a un modulo Apache.
Si esta interesado, PHP también soporta un numero masivo de bases de datos, incluyendo INFORMIX, ORACLE, Sybase, Solid y PostgreSQL, lo hace también como el ubicuo ODBC.
PHP también soporta un host de otros desarrollos en el limite tecnológico del desarrollo de Internet. Esto incluye autenticación, XML, creación de imágenes dinámicas, WDDX, parte de soporta de memoria y creación dinámica de documentación PDF, y si esto no es suficiente, PHP es fácil de extender, así que tu puedes rodar tu propia solución si tu eres un programador sabihondo.
Finalmente desde ambas partes son colaborativas por naturaleza, y siempre hay cientos de soportes de documentación y listas de email. Los errores son reparados rápidamente y los requisitos para desarrollos son siempre escuchados, evaluados, y feasibles de implementar.
Suficiente platica! Vamos sobre lo que nos interesa, el tutorial.
La Lección 1 esta cubriendo la instalación de estos productos en ambos sistemas, UNIX y Windows. Si no necesitas preocuparte acerca de que (Tu estas trabajando en una maquina con ISP, quizá) saltemos a los primeros scripts de ejemplos (liga) donde la magia comienza.
En la lección 2 observaremos algunos de los mas complejos y buenerrimos scripts, incluyendo ciclos, formas de entrada, y envío de datos de una forma o la base de datos.
En la lección 3 podría cubrir la validación y las técnicas para hacer tus scrips PHP inteligentes y limpios.
Vamos, adelante..!!
INSTALANDO MySQL
Saltemos correctamente, salva tu mismo una copia de estos grandes paquetes y a darle!
Esto no es un no es un simple genero. Existen muchas opciones disponibles para que tu la obtengas, compiles e instales el software. Tratemos primero con MySQL, después iremos a obtener PHP.
La central de MySQL es http://www.mysql.com/ . Como localizas un programa de esta estatura, existen millones de mirrors localizados alrededor del mundo, has un favor a Internet y escoge alguno cercano a ti.
Has encontrado cientos de opciones en este punto. SI no lo vas a hacer tu mismo, entonces graba el código fuente. SI no eres tan bravo, existen algunos binarios precompilados para otras plataformas disponibles para bajarlos.
En suma, existen versiones shareware de MySQL para usuarios de Windows. Esta es una versión antigua de MySQL. Si tu quieres la versión mas reciente, tu tendrás que registrar la licencia. Existen drivers de ODBC que permiten a tus aplicaciones relacionarse con MySQL. Otras varias excitantes piezas son acultas en el sitio, demasiado, así que echa un vistazo.
Las versiones de UNIX precompiladas y las de Windows , son tan simple como desempaquetar y ocupar, y estos no requieren mucha explicación. Esto lo dejamos para la compilación del código fuente. Los usuarios de Windows, por favor mantener en mente que necesitan correr mysql en el directorio mysql/bin.
Baja el archivo comprimido en tu directorio fuente y descomprimelo-untar usándolo gzip y tar. La manera mas rápida de hacerlo es tecleando:
gunzip < mysql-xxxx.tar.gz | tar xvf -
Donde xxxx es el numero de la versión. Esto podría crear un directorio llamado mysql-xxxx, el cual contiene los códigos fuentes. Muévete al directorio tecleando cd mysql-xxxx y checalos varios archivos README e INSTALL. Ellos son salvavidas en muchas situaciones peligrosas.
MySQL viene con un script de configuración. Simplemente teclea ./configure y deja que las cosas ocurran por si mismas. Si tu necesitas especificar que sucede y donde, teclea ./configure --help y te da una lista de opciones para escoger. Por ejemplo si estas compilando en una maquina con poca memoria, puedes optar por la bandera --with-low-memory . Me gusta instalar MySQL en un árbol próximo de directorios mejor dicho en varias localidades de mi maquina, así yo digo la localización de la instalación con la bandera --prefix .
También puedes especificar otras varias opciones, como que compilar y que saltarse. Asumiremos que deseamos todas la cosas bajo /usr/local/mysql en nuestro servidor.
Esto significa que deberías de teclear ./configure --prefix=/usr/local/mysql.
El script de configuración podría correr e inspeccionar tu sistema y entonces construir lo archivos necesarios para la compilación exitosa. Si falla, pudieses obtener un mensaje de error de mucha ayuda diciéndote el porque. Con frecuencia, podrías encontrar en el script por que fallo, cuando estés observando o buscando las librerías de hilos. Checa que tengas los MIT-pthreads instalados en tu maquina, si no adiciónalos. Los usuarios de Linux, tendrían que obtener los Linuxthreads. Estas son librerías criticas que alojan la multitarea de MySQL. (Que sirve para correr múltiples versiones de si mismo). Las distribuciones recientes de Linux, pueden contener estas librerías instaladas.
Si todas las cosas van de acuerdo al plan, simplemente teclea make y tomate un café. MySQL es un programa complejo y toma algún tiempo compilarlo. SI tu tienes un error, checa la documentación y ve si existe alguna cosa especificada que hayas olvidado en particular para tu sistema operativo.
Después, teclea make install y todos los archivos necesarios quedaran instalados en todos los lugares. Ahora estas casi listo para seguir. Si tu eres nuevo en MySQL y nunca lo has instalado antes, necesitas crear los permisos por default, así que teclea... scripts/mysql_install_db para darlos de alta.
Así es. Estas listo para continuar. Todo lo que necesitamos es adicionar la habilidad de inicializar y para el servidor en reinicio y apagado. Y si, existe un script que puede hacerlo bien. Teclea mysql.server.start para iniciarlizarlo, y mysql.server.stop para detener el servidor. Esto es obvio realmente. Puedes iniciarlizar el servidor manualmente(así que tu puedes ejecutar sin rebotear) entrar al directorio raíz (root) de tu instalación de MySQL ( /usr/local/mysql ) y teclea bin/safe_mysqld &
Estamos a la mitad. Ahora entremos a PHP.
INSTALANDO PHP
Phew, prometedoramente has obtenido e instalado MySQL y esta corriendo ahora. Esto fue casi divertido! Ahora hagamoslo para PHP. Este proceso no es más fácil, pero los arreglos de opciones son deslumbrantes. No te desanimes, sin embargo. Puedes siempre retroceder y recompilar PHP para adicionar o remover las opciones como las necesites.
El home de PHP esta en http://www.php.net/ . El sitio de PHP es una mina de información, de listas de proyectos y de reporte de errores. Así como MySQL, podrías escoger un mirror cercano. Obviamente buscaras la sección en donde bajar y obtener el PHP.
Tu rango de opciones aquí es un poco más limitado. Unos pocos binarios precompilados están disponibles, pero estos son experimentales. Si estas en cualquier plataforma, exceptuando a Windows, guarda el código fuente y compílalo tu mismo.
Primeramente vamos a cubrir a los usuarios de Windows. Cuando uses PHP, una practica común es desarrollarlo en una maquina con Windows y entonces correr tu sitio en un servidor de UNIX. Podrías ponerle fin y por ti mismo, lo cual significa que necesitas ser experto en la instalación para ambas plataformas.
Graba los binarios en Windows y descomprímelos usando tu descompresor favorito en un directorio en el drive C llamado php3. El archivo README ofrecido trata algunos de los detalles de la instalación, pero hay la versión Reader´s Digest: Si tu quieres instalar PHP en algún otro folder que no sea c:\php3, necesitarias editar el archivo .inf que viene con PHP.
En el directorio php3, podrás encontrar muchos archivos .dll. Toma todos los archivos que no inicien con php_ y muevelos al directorio Windows/System . Entonces renombra php.ini-dis a php3.ini y muevelos al directorio /windows. Si abres alguno de estos archivos podrías ver que hay muchas cosas interesantes que cambiar. Por ahora solo comenta la línea:
Extension=php3_mysql.dll
Si estas utilizando Apache para Win32, levanta al Apache para que reconozca e archivos PHP. Dependiendo de la versión de Apache que estés utilizando, podrías necesitar adicionar lo siguiente a los archivos http.con o al srm.conf:
ScriptAlias /php3/"c:/path-to-php-dir/"
AddType application/x-httpd-php3.php3
Action application/x-httpd-php3"/php3/php.exe"
O si estas usando IIS o PWS, con el click derecho en php_lis_reg.inf y selecciona 'Install'. Podrías necesitar reinicializar la maquina para IIS para obtener los cambios.
Ok, ahora que ya estuvo con Windows, vamos con UNIX. De acuerdo, estaríamos compilando del código fuente. Como con MySQL, baja y descomprime el código fuente. De nuevo, PHP viene con un script de configuración. No puedes dejar ahora mismo con los defaults aquí, reflexionando. Ejecuta ./configure -help | more para ver paginas y paginas de nuevas e interesantes opciones. Has decidido entre compilar como un CGI o como un Modulo Apache. Si estas utilizando un servidor de Web Apache y eres capaz de compilarlo, usa el modulo: Esto es más rápido y fácil de usar. En otro caso, puedes irte con la versión CGI. Necesitaremos compilar el soporte para MySQL.
Por ahora asumiremos que correremos un modulo con soporte para MySQL. Si quieres adicionarlo otras opciones u otras librerías, lo puedes hacer mas tarde. Teclea:
./configure --with-apache=/path/to/apache/dir --with-mysql=/usr/local/mysql
Salta la opción -with-apache si estas creando la versión para CGI. El proceso de configuración podría correr y producir los archivos de sistema relevantes. Ahora simplemente teclea de nuevo make .
Es tiempo para otro café. Si inicias sintiéndote un poco nervioso y tembloroso en este punto, no te preocupes. Todos podrías estar ansiosos durante nuestra primera instalación de PHP Tomate algunos cafés más.
Si estas creando la versión CGI, estas listo para darle vuelta a la hoja, simplemente copia el ejecutable resultante en un tu archivo CGI. Para los usuarios de los módulos de Apache, teclear make install para copiar los archivos a directorio del Apache. De ahí, sigue las instrucciones para adicionar un modulo al Apache y recompilalo.
Necesitaras decirle al servidor de Web como procesara las paginas ahora atraves del programa PHP. Si no estas usando Apache, necesitaras checar la documentación de tu servidor de Web para saber como obtener los documentos con una extensión .php3. Los usuarios del Apache 1.3.x pueden simplemente adicionar addtypeapplication/x-httpd-php3 .php3 al archivo httpd.conf o al srm.conf. Si estas utilizando la versión CGI, necesitarías adicionar lo siguiente antes de AddType:
ScriptAlias /php3/"/path-to-php-dir/" AddType application/x-httpd-php-3 .php3 Action
Application/x-httpd-php3"/php3/php"
¡Eso es!. Con algo de suerte, tendrás corriendo MySQL y funcionando el PHP. No olvides de checar los FAQS y la documentación si estas atorado. También intenta en las listas de email (Liga).
Ahora que ya has manejado todo esto, vamos a ponerlo en movimiento.
TU PRIMER SCRIPT
Estarás contento de conocer que realmente la suerte esta detrás de ti. La instalación del software siempre es un hoyo negro porque existen muchos cambios de sistemas a sistemas. Pero con un poco de suerte tu base de datos esta corriendo y el PHP esta compilado e instalado en nuestro servidor de Web y es capaz de reconocer documentos con extensiones .php3.
Metámonos correctamente y escribamos nuestro primer script. Crea un archivo de texto conteniendo lo siguiente:
<html>
<body>
<?php
$myvar = "Hola mundo";
echo $myvar;
?>
</body>
</html>
Ahora llamaremos la siguiente URL, para instancias, http://myserver/test.php3 . Podrías ver una pagina conteniendo el texto "Hola mundo". Si obtienes un mensaje de error, checa la documentación de PHP y observa que todas las cosas estén correctamente.
Eso es ! Esto es tu primer script. Si ves el código HTML de tu pagina, veras que solo hay el texto "Hola mundo".
Esto es a causa que la maquina PHP esta examinando la pagina, procesando algún bloque de código que encontró, y retorno solo HTML.
La primera cosa que debiste notar del script de arriba, son los delimitadores. Hay líneas que indican el inicio y el fin del bloque. El poder de PHP, es que este puede ser introducido en cualquier lugar y yo malamente donde sea - en tu código, de alguna manera. Mas tarde veremos algunos interesantes usos para esto, pero por ahora vamos a dejarlo así de simple. Si quieres, puedes configurar PHP para usar etiquetas cortas, pero no son compatibles con XML, se cuidadoso. Si estas haciendo un switch para ASP, puedes configurar el PHP para usar delimitadores <% y %>.
Otra cosa que debes notar es el punto y coma, al final de cada línea. Esto lo conoceremos como un separador y sirve para distinguir un grupo de instrucciones de otro. Es factible escribir un programa PHP en una línea y separarlo en porciones con puntos y comas. Pero será una confusión, así que adicionamos una nueva línea después de cada punto y coma. Solo recuerda que cada línea debe finalizar con un punto y coma.
Finalmente, observas que la palabra myvar inicia con un signo de dólar($). Este símbolo le dice a PHP que es una variable. Nosotros asignamos la palabra "Hola mundo" a la variable $myvar. Una variable puede también contener números o un arreglo. De cualquier manera, todas las variables inician con un símbolo de dólar.
El poder Real de PHP viene de sus funciones. Estas son básicamente instrucciones procesadas. Si adicionaste, todas las instrucciones del add-ins opcional de PHP, hay más de 700 funciones disponibles.
Así que hay bastantes cositas que puedes hacer.
Ahora vamos a adicionarle MySQL a la pintura..
DANDO DE ALTA UNA BASE DE DATOS
Ahora estamos listos para conectarnos a MySQL. Una forma manejable de conocer que opciones están disponibles en PHP y que hacen en tu servidor el usando la función phpinfo() . Crea un script con lo siguiente:
<html>
<body>
<?php
phpinfo();
?>
</body>
</html>
Salva y ve este script atraves de tu servidor de Web. Observaras una pagina con información útil e interesante como esta (Liga). Es información dice todo acerca de tu servidor, el ambiente interno de las variables del servidor de Web, las opciones que son compiladas y mucho más.
Si MySQL esta aquí, entonces estas listo para continuar...
Antes que puedas obtener datos fuera de MySQL, tienes que poner datos en ella. No hay una manera fácil de hacer esta etapa. La mayoría de los scripts de PHP viene con un archivo conocido como Core Dump que contiene todos los datos requeridos para crear y almacenar una base de datos MySQL. La inserción y salida de este proceso esta realmente fuera del objetivo de este tutorial, así que podríamos hacerlo solo para ti.
MySQL utiliza su propia tabla de usuarios. En la instalación, un usuario default (root) es automáticamente creado sin password. Es el administrador de la base de datos, para adicionar nuevos usuarios con varios permisos, pero podría escribir un articulo entero sobre esto, así que la controlaríamos como usuario root. Si tu levantas tu propio servidor y base de datos, es vital que asignes un password al usuario root.
De cualquier manera, entremos a la base de datos. Para los usuarios de Win32. Disculpen, pero esto requiere algún trabajo en DOS. Tendrá que utilizar una ventana DOS y teclear siempre todas las cosas en la ventana que esta corriendo. No se les olvide teclear toda la ruta del directorio MySQL/bin con tus comandos. Los usuarios de UNIX, pueden trabajar en el directorio bin de MySQL, pero debes iniciar cada comando con ./ para correr los comandos.
La primera cosa que necesitamos, es crear la primera base de datos, desde la línea de comando, teclear:
Mysqladmin -u root create mydb
Esto crea la base de datos llamada "mydb". La bandera dice a MySQL que estas haciendo esto como usuario root.
Próximamente adicionaremos datos utilizando algún ejemplo favorito de todos, los empleados. Vamos a necesitar que el montón de archivos que mencione anteriormente. Si estas interesado en como al mismo tiempo revisamos el manual que viene con MySQL o checa la liga http://www.turbolift.com/mysql/ .
Copia y pega el siguiente texto en el archivo de MySQL salvándolo en el directorio bin.(Pondrías al archivo mydb.dump.)
CREATE TABLE employees ( id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMENT, first varchar(20), last varchar(20)),
INSERT INTO employees VALUES (2, 'John', 'Roberts','45 There St, Townville','Telphonist`);
INSERT INTO employees VALUES (3,'Brad','Johnson','1/34 Nowhere Blvd, Snowston','Doorman');
Si la línea se envuelve, ten por seguro que cada declaración insertada es una nueva línea. Ahora insertaríamos en la base de datos mydb, Desde la línea de comandos tecleamos:
Mysql -u root mydb < mydb.dump
Podrías tener algunos errores ejecutando esto. Si los tienes checa para una línea envuelta incorrecta.
REARRANCANDO
OK, ahora tenemos los datos en la base de datos. Vamos a hacer algunas cosas con ello. Copia y pega las siguiente línea de texto y salva el archivo en el documento del servidor de Web con la extensión .php3.
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
printf("First Name: %s<br>\n", mysql_result($result,0,"first"));
printf("Last Name: %s<br>\n", mysql_result($result,0,"last"));
printf("Address: %s<br>\n", mysql_result($result,0,"address"));
printf("Position: %s<br>\n", mysql_result($result,0,"position"));
?>
</body>
</html>
Explicaremos que sucede aquí. La función mysql_connect() abre una conexión al servidor MySQL en el host especificado (en este caso es el host local) accesandolo con el nombre del usuario (root). Si necesitas especificar un password, puedes adicionarlo también. El resultado de la conexión es almacenada en la variable $db.
Mysql_select_db() esto le dice a PHP que algunas consultas que estamos haciendo contra la base de datos mydb. Podríamos crear múltiples conexiones a las bases de datos en diferentes servidores. Pero por ahora, dejaremos esto así.
La siguiente, mysql_query() hace todo el trabajo duro. Usando el identificador de la conexión a la base de datos, este envía una línea de SQL al servidor MySQL para ser procesada. Los resultados que son retornados son almacenados en la variable $result.
Finalmente, mysql_result() es usado para desplegar los valores de los campos de nuestra consulta. Usando $result, nos vamos a la primera línea, la cual esta numerada como 0 y desplegamos el valor de los campos especificados.
La sintaxis de print puede ser vista como las utilizadas en C o Perl. En cada una de las líneas de encima, los % indican que la variable en la segunda mitad de la expresión (por ejemplo, mysql_resutl($result,0,"position")) pueden ser manejados como una cadena e imprimirlos. Para más información sobre print, puedes ver la documentación de PHP.
http://www.php3.net/manual/function.printf.php3
Hasta aquí tenemos esto. Exitosamente compilamos, instalamos y configuramos MySQL y PHP, y ejecutamos un script simple para recuperar información. En la lección 2, con destreza y maña desplegaremos múltiples récords y al parejo enviaremos datos a y de la base de datos.
Sigamos, ahora.
Tutoríal PHP/ MySQL SEGUNDA PARTE
En esta lección vamos a zambullirnos correctamente y crear algunas paginas útiles usando el PHP y MySQL. Iniciaremos por desplegar la base de datos que ya creamos, pero con un .....
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
echo "<table border=1>\n";
echo "<tr><td>Name</td><td>Position</tr>\n";
while ($myrow = mysql_fetch_row($result)) {
printf("<tr><td>%s %s</td><td>%s</td></tr>\n", $myrow[1],
$myrow[2], $myrow[3]);
}
echo "</table>\n";
?>
</body>
</html>
Probablemente notaste que introducimos nuevos desarrollos. Lo más obvio es el ciclo while. El ciclo dice que es tan largo como existan nuevas líneas de datos para ser grabadas (usando la función mysql_fetch_row()) asignamos que línea a la variable $myrow. Entonces ejecutamos las instrucciones contenidas entre los corchetes ({}). Toma un vistazo para una segunda y esta haría sense....
La función mysql_fetch_row() escucha un cierre. Un pequeño problema con mysql_fetch_row() es que retorna un arreglo que soporta solo referencias numéricas a campos individuales. Así que el primer campo es referido como 0, el segundo como 1 y así sucesivamente. En consultas complejas esto puede ser algunas veces un nighmare....
Ahora examinares el ciclo con más detalle. Las primeras líneas las puedes reconocer de la primera lección. Entonces en el ciclo while, marcamos a una línea del resultado y lo asignamos al arreglo $myrow. Entonces imprimimos el contenido del arreglo en la pantalla con la función printf. Después este ciclo inicia de nuevo y otra celda es asignada a $myrow. Esto sucede hasta que obtiene todas las celdas a grabar.
Una gran cosa acerca del ciclo while es que si tu consulta no retorna registros, no obtendrás un mensaje de error. La primera vez ...
Pero si la consulta no retorna datos, no tenemos manera de que el usuario lo conozca y tal vez recibamos un mensaje corto. Esto es posible así que hagámoslo.
Mantenerse Informado
Echa un vistazo a este script.
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
if ($myrow = mysql_fetch_array($result)) {
echo "<table border=1>\n";
echo "<tr><td>Name</td><td>Position</td></tr>\n";
do {
printf("<tr><td>%s %s</td><td>%s</tr>\n", $myrow["first"], $myrow["last"],
$myrow["address"]);
} while ($myrow = mysql_fetch_array($result));
echo "</table>\n";
} else {
echo "Sorry, no records were found!";
}
?>
</body>
</html>
Hay un número de nuevos desarrollos introducidos aquí pero no son tan simples. Primero, existe la función mysql_fetch_array(). Es exactamente lo mismo que mysql_fetch_row() con una pequeña excepción: Usando esta función, podemos referirnos a los campos por sus nombre (como $myrow["first"]) en lugar de sus números. Esto podría traernos algunos dolores de cabeza. También introducimos un ciclo do/while y una sentencia if-else.
Si la sentencia if-else dice que si podemos asignar una celda a $myrow, entonces que continue; en otro caso saltar a la sección del else y hacer lo que hay ahí.
En otro caso salta a la sección del else y hace lo que esta ahí.
El loop do/while es una variación del while() que utilizamos antes. Necesitamos hacer el do/while aquí por una buena razón: Con la sentencia inicial if, nosotros asignamos el primer renglón retornado de la consulta a la variable $myrow. Si en este punto ejecutamos una sentencia regular while (como while($myrow = mysql_fetch_row($result)), Tenemos que sacar forzosamente el primer registro fuera de la variable y reemplazándola con el segundo registro. Pero el ciclo do/while nos deja probar la condición después de que el código ha sido corrido ya una vez. Así que no hay oportunidad de que nos saltemos algún renglón.
Finalmente, si no hay registros retornados en todo, las sentencias contenidas en la porción, Else{} podría ser ejecutada. Para ver esta porción en acción, cambia la sentencia SQL a : SELECT * FROM employees WHERE id=6 o alguna otra cosa que no retorne registros.
Ahora vamos a extender este ciclo y el código if-else para hacer una pagina de fantasía. Estas soñandolo.
LIGA INTELIGENTE
Vamos a tomar el poder de un ciclo que aprendimos y usamos en un ejemplo mas practico. Pero antes de que procedamos aquí, usted debe saber trabajar con las formas, la cadena de consulta y los métodos GET y POST. Jay cubrió esto no hace mucho tiempo, así que echaremos una mirada a su articulo si esto no es familiar para ti.
Ahora voy a trabajar con la cadena de consulta. Como usted debe saber, hay tres maneras de conseguir la información en la cadena de consulta. Lo primero es utilizar el método del GET en una forma. Lo segundo es el tipo de información dentro del URL en tu Navegador. Solo haz que la bandera observe alguna cosa como esta: <a href="http://my_machine/mypage.php3?id=1">. Vamos a utilizar esta técnica ahora.
Primero apagado, consultaremos nuestra base de datos otra vez y enumera los nombres de los empleados. Observe el script siguiente. Mucho de esto se vería muy familiar ahora.
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
if ($myrow = mysql_fetch_array($result)) {
do {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow["id"],
$myrow["first"], $myrow["last"]);
} while ($myrow = mysql_fetch_array($result));
} else {
echo "Sorry, no records were found!";
}
?>
</body>
</html>
Todas las cosas son lo mismo excepto la función printf, así que observaremos esto con algún detalle.
Primero observa que cada marca, va precedida por un backslash. El backslash dice a PHP que debe desplegar el caracter que le sigue, mas bien lo trata como parte del código. También nota el uso de la variable $PHP_SELF. Esta variable, almacena el nombre y la locación del script, se pasa con cada paginación del PHP. Usando $PHP_SELF, podemos asegurar que esto sucederá al igual si el archivo es movido a otro subdirectorio o al igual a otra maquina.
Como yo he mencionado estas ligas podrían recargar la pagina. Una segunda vez, sin embargo una información podría ser adicionada a la cadena de consulta. PHP hace una nifty cuando ve un nombre = valor en la cadena de consulta. Crea automáticamente una variable con el nombre y valor que indica la consulta. Este desarrollo nos permite probar si es la primera o segunda vez que lo envía la pagina. Todo lo que tenemos que hacer es pregunta al PHP si la variable $id existe.
Una vez que conozco la respuesta a la pregunta, yo puedo desplegar un diferente grupo de información la segunda vez. Aquí esta como:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
// display individual record
if ($id) {
$result = mysql_query("SELECT * FROM employees WHERE id=$id",$db);
$myrow = mysql_fetch_array($result);
printf("First name: %s\n<br>", $myrow["first"]);
printf("Last name: %s\n<br>", $myrow["last"]);
printf("Address: %s\n<br>", $myrow["address"]);
printf("Position: %s\n<br>", $myrow["position"]);
} else {
// show employee list
$result = mysql_query("SELECT * FROM employees",$db);
if ($myrow = mysql_fetch_array($result)) {
// display list if there are records to display
do {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow["id"],
$myrow["first"], $myrow["last"]);
} while ($myrow = mysql_fetch_array($result));
} else {
// no records to display
echo "Sorry, no records were found!";
}
}
?>
</body>
</html>
Este código esta completo ahora, así que he empezado a hacer comentarios para seguirle la pista de lo que esta sucediendo. Puedes utilizar // para hacer un comentario sencillo de una sola línea o utilizar /* y */ para iniciar y finalizar respectivamente un block largo de comentario.
Aquí tenemos esto: tu verdadero primer y útil script de PHP/MySQL. Ahora vamos a observar como vamos a conectar las formas para enviar la información a la base de datos.
LANZA ALGUNAS FORMAS
Hemos manejado para obtener datos de la base de datos sin mucha dificultad. Pero que hay de enviar datos de otra manera?. Esto no es problema para PHP
Primero creamos una pagina con una forma simple.
<html>
<body>
<form method="post" action="<?php echo $PHP_SELF?>">
First name:<input type="Text" name="first"><br>
Last name:<input type="Text" name="last"><br>
Address:<input type="Text" name="address"><br>
Position:<input type="Text" name="position"><br>
<input type="Submit" name="submit" value="Enter information">
</form>
</body>
</html>
Note que usamos $PHP_SELF otra vez. Como dije en la lección numero 1, tu puedes utilizar el PHP donde quiera dentro de tu código HTML. Podrías también notar que cada elemento de la forma concuerda con el nombre del campo en la base de datos. Esto no es obligatorio, esta es solo una buena idea, así que puedes poner tu cabeza alrededor del código mas tarde.
También nota que he dado al botón Submit un atributo nombre(<cursiva).
Yo he abandonado esto así que puedo probarlo para la existencia de una variable $submit (<cursiva). De esta manera cuando la pagina es llamada otravez, podría conocer si ya se ha utilizado esta forma.
Tengo que mencionar que no es necesario que tengas una pagina que se recargue así misma. Puedes atravesar dos, tres o las paginas que tu gustes. De esta manera todas las cosas permanecen compactas.
OK. vamos a añadir algún código que podría checar la entrada a la forma. Solo prueba que la entrada de la forma no haya sido introducida otra vez, podría vaciar todas las variables a la pantalla con $HTTP_POST_VARS. Este es un útil desarrollo de depuración. Si necesitas ver todas las variables en una pagina utiliza $GLOBALS.
<html>
<body>
<?php
if ($submit) {
// process form
while (list($name, $value) = each($HTTP_POST_VARS)) {
echo "$name = $value<br>\n";
}
} else{
// display form
?>
<form method="post" action="<?php echo $PHP_SELF?>">
First name:<input type="Text" name="first"><br>
Last name:<input type="Text" name="last"><br>
Address:<input type="Text" name="address"><br>
Position:<input type="Text" name="position"><br>
<input type="Submit" name="submit" value="Enter information">
</form>
<?php
} // end if
?>
</body>
</html>
Ahora que se observa bien, vamos a tomar la información de la forma y vamos a ponerla en la base de datos.
<html>
<body>
<?php
if ($submit) {
// process form
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$sql = "INSERT INTO employees (first,last,address,position) VALUES
('$first','$last','$address','$position')";
$result = mysql_query($sql);
echo "Thank you! Information entered.\n";
} else{
// display form
?>
<form method="post" action="<?php echo $PHP_SELF?>">
First name:<input type="Text" name="first"><br>
Last name:<input type="Text" name="last"><br>
Address:<input type="Text" name="address"><br>
Position:<input type="Text" name="position"><br>
<input type="Submit" name="submit" value="Enter information">
</form>
<?php
} // end if
?>
</body>
</html>
Has introducido datos en la base de datos. Y todo esta lejos de la perfección. ¿Que pasa si alguien deja un campo en blanco o introduce texto cuando debió de introducir un numero? ¿Que pasa si hay un error donde sea?
No te preocupes. Vamos a solucionar esto.
HACIENDO FORMAS MUY INTELIGENTES
Atravez de este tutorial , hemos cargado las declaraciones de SQL en la variable ($sql) antes de lanzar la consulta a la base de datos con mysql_query(). Esto es útil para checarlo . Si algo hace un error, siempre puedes desplegar el SQL a la pantalla y examinar los errores.
Ya conocemos como obtener datos de la base de datos. Ahora vamos a intentar modificar los registros que están en la base de datos. Editar datos combina dos elementos que ya hemos visto: desplegar datos en la pantalla y enviar datos a la base de datos vía una forma de entrada. Sin embargo editar es hacer algo diferente a que mostremos los datos apropiados en la forma.
Primeramente, reciclamos el código de la lección 1 para desplegar los nombres de los empleados en nuestra pagina. Pero esta vez completo, vamos a llenar nuestra forma con la información de los empleados. Se podría observar como esto:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
if ($id) {
// query the DB
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
?>
<form
method="post" action="<?php echo $PHP_SELF?>">
<input type=hidden name="id" value="<?php echo $myrow["id"] ?>">
First name:<input type="Text" name="first" value="<?php echo $myrow["first"]
?>"><br>
Last name:<input type="Text" name="last" value="<?php echo $myrow["last"]
?>"><br>
Address:<input type="Text" name="address" value="<?php echo $myrow["address"]
?>"><br>
Position:<input type="Text" name="position" value="<?php echo
$myrow["position"] ?>"><br>
<input type="Submit" name="submit" value="Enter information">
</form>
<?php
} else {
// display list of employees
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow["id"],
$myrow["first"], $myrow["last"]);
}
}
?>
</body>
</html>
Solo desplegamos la información del campo en el atributo value de cada elemento, lo cual fue mas o menos fácil. Construyamos un poco mas. Adicionaremos la habilidad de enviar el código editado de vuelta a la base de datos. De nuevo vamos a utilizar el boton submit para probar si necesitemos procesar la entrada de la forma.
También nota que es algo diferente las sentencias SQL que utilizamos.
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
if ($id) {
if ($submit) {
$sql = "UPDATE employees SET
first='$first',last='$last',address='$address',position='$position' WHERE
id=$id";
$result = mysql_query($sql);
echo "Thank you! Information updated.\n";
} else {
// query the DB
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
?>
<form method="post" action="<?php echo $PHP_SELF?>">
<input type=hidden name="id" value="<?php echo $myrow["id"] ?>">
First name:<input type="Text" name="first" value="<?php echo $myrow["first"]
?>"><br>
Last name:<input type="Text" name="last" value="<?php echo $myrow["last"]
?>"><br>
Address:<input type="Text" name="address" value="<?php echo
$myrow["address"] ?>"><br>
Position:<input type="Text" name="position" value="<?php echo
$myrow["position"] ?>"><br>
<input type="Submit" name="submit" value="Enter information">
</form>
<?php
}
} else {
// display list of employees
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow["id"],
$myrow["first"], $myrow["last"]);
}
}
?>
</body>
</html>
Y que es esto. Hemos manejado la mayor combinación de desarrollos, los cuales hemos visto en un mismo script. También puedes ver como hemos utilizado un if() dentro de otro if() para checar condiciones múltiples.
Es hora de poner todo junto en un script y hacer un script mortal.
PON TODO JUNTO AHORA
Finalizamos esta lección poniendo todo en una pagina sencilla que podemos aumentar, editar y remover entradas de la base de datos. Es una extensión de lo que hemos visto hasta ahora y haremos un buen repaso. Echemos un vistazo.
<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
if ($submit) {
// here if no ID then adding else we're editing
if ($id) {
$sql = "UPDATE employees SET
first='$first',last='$last',address='$address',position='$position' WHERE
id=$id";
} else {
$sql = "INSERT INTO employees (first,last,address,position) VALUES
('$first','$last','$address','$position')";
}
// run SQL against the DB
$result = mysql_query($sql);
echo "Record updated/edited!<p>";
} elseif ($delete) {
// delete a record
$sql = "DELETE FROM employees WHERE id=$id";
$result = mysql_query($sql);
echo "$sql Record deleted!<p>";
} else {
// this part happens if we don't press submit
if (!$id) {
// print the list if there is not editing
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a> \n", $PHP_SELF, $myrow["id"],
$myrow["first"], $myrow["last"]);
printf("<a href=\"%s?id=%s&delete=yes\">(DELETE)</a><br>",
$PHP_SELF, $myrow["id"]);
}
}
?>
<P>
<a href="<?php echo $PHP_SELF?>">ADD A RECORD</a>
<P>
<form method="post" action="<?php echo $PHP_SELF?>">
<?php
if ($id) {
// editing so select a record
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
$id = $myrow["id"];
$first = $myrow["first"];
$last = $myrow["last"];
$address = $myrow["address"];
$position = $myrow["position"];
// print the id for editing
?>
<input type=hidden name="id" value="<?php echo $id ?>">
<?php
}
?>
First name:<input type="Text" name="first" value="<?php echo $first ?>"><br>
Last name:<input type="Text" name="last" value="<?php echo $last ?>"><br>
Address:<input type="Text" name="address" value="<?php echo $address ?>"><br>
Position:<input type="Text" name="position" value="<?php echo $position
?>"><br>
<input type="Submit" name="submit" value="Enter information">
</form>
<?php
}
?>
</body>
</html>
Se ve complejo, pero realmente no lo es. El script esta dividido en tres partes. La primera condición if() checa para ver que el botón de Submit ha sido presionado y si es así, checa que la variable $id exista. Si no entonces adiciona un registro. En otro caso , editamos un registro.
Después checamos si la variable $delete existe. Si existe borramos el registro. Nota que con la primera sentencia if() checamos para una variable que viene completo como un POST y en este la variable que podría ser parte de un GET.
Finalmente, tomamos la acción default que despliega la lista de empleados y la forma. De nuevo checamos la existencia de la variable
$id. Si existe, consultamos a la base de datos para desplegar los registros relevantes. En otro caso, desplegamos una forma en blanco.
Hemos puesto todo lo aprendido y lo pusimos en un script. Usamos ciclos while() y sentencias if() y hemos corrido la gama de sentencias básicas de SQL como SELECT - INSERT - UPDATE y DELETE. Ultimamente hemos observado como podemos pasar información de una pagina a otra usando URLs y formas de entrada.
En la lección 3 observaremos como hacer una pagina más inteligente.
T E R C E R A P A R T E 3
Bienvenido a la tercera y parte final de nuestro tutorial. Si tu has ido atraves de la lección 1 y la lección 2 ya conoces lo esencial para instalar y escribir scripts útiles con MySQL y PHP. Vamos a observar algunos funciones de PHP útiles que podrían hacer tu vida mas fácil. Echaremos un vistazo en los archivos include.
Conocemos los includes básicos, correcto ?. El contenido de un archivo externo son referenciados e importados en un archivo main. Es muy fácil: puedes llamar un archivo e incluirlo. Cuando hacemos esto en PHP hay dos funciones de las cuales necesitamos hablar:
include() y require(). La diferencia entre estas dos funciones es sutil pero importante, así que vamos a verlas de cerca.
La función require() trabaja en una manera como XSSI; los archivos son incluidos como parte del documento original tan pronto como el archivo pasa por el parser, recargado de alguna locación en le script. Así que si tu decides poner una función require() dentro de un ciclo condicional, el archivo externo podría ser incluido al igual si alguna parte del ciclo condicional es falsa.
La función include() importa el archivo referenciado cada vez que es encontrado, PHP puede no fastidiarse con el. Lo que significa que puedes usar include dentro de los ciclos y sentencias condicionales y podría trabajar exactamente como lo planeas.
Finalmente si estas usando require() y el archivo que estas incluyendo no existe el script podría pararse y producir un error. Si usas include(), tu script podría generar un warning, pero seguir ejecutándose. Puedes probar esto tu mismo intentándolo con el siguiente script. Corre el script y luego reemplaza el include() por el require() y compara los resultados.
<html>
<body>
<?php
include("emptyfile.inc");
echo "Hello World";
?>
</body>
</html>
Me gusta usar el sufijo .inc con mis archivos include, así que puedo separarlos de un script normal de PHP. Si haces esto, ten por seguro que el grupo de tu archivo de la configuración del servidor de Web para analizar ficheros .inc como archivos de PHP. En otro caso los hackers podrían adivinar el nombre de tus archivos include y desplegarlos en el browser como archivos de texto. Esto es malo si tienes información sensible - como los passwords de una base de datos - contenido en los includes.
Y que vas a hacer con los archivos include? Simple ! Pon la información común de todas las paginas dentro de estos. Cosas como cabeceras HTML, pies de pagina, código de conexión a la base de datos y funciones definidas son buenos candidatos para ponerlos. Pega este texto en un archivo llamado header.inc.
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db); ?>
<html>
<head>
<title>
<?php echo $title ?>
</title>
</head>
<body>
<center><h2><?php echo $title ?></h2></center>
Entonces crea otro archivo llamado footer.txt que contenga algún texto apropiado para cerrarlos el texto y las banderas HTML.
Ahora vamos a crear el tercer archivo que contenga el script actual de PHP. Intenta el siguiente código, asegurándote que tu servidor MySQL esta corriendo.
<?php
$title = "Hello World";
include("header.inc");
$result = mysql_query("SELECT * FROM employees",$db);
echo "<table border=1>\n";
echo "<tr><td>Name</td><td>Position</tr>\n";
while ($myrow = mysql_fetch_row($result)) {
printf("<tr><td>%s %s</td><td>%s</tr>\n", $myrow[1], $myrow[2],
$myrow[3]);
}
echo "</table>\n";
include("footer.inc");
?>
Que sucede ? Los archivos include son lanzados dentro del archivo principal y entonces todo es ejecutado por el PHP. Observa ahora que la variable $title fue definida antes que sea referenciado header.inc.
Su valor esta disponible en el código de header.inc; desde, que el titulo de la pagina es cambiado. Ahora puedes utilizar header.inc atraves de todas tus paginas de PHP y todo lo que tendrías que hacer es cambiar el valor de $tile de pagina a pagina.
Usando una combinación de includes, HTML, sentencias condicionales y ciclos puedes crear variaciones complejas de pagina a pagina con un mínimo absoluto de código.
Los includes, son especialmente útiles cuando son utilizados con funciones, como hemos visto en el camino.
En el excitante mundo de la validación.
UNA VALIDACION SIMPLE
Imagina por un momento que hemos estropeado nuestra base de datos y necesitamos información de los usuarios que pudieron insertarse en la base de datos. Adelantándonos, imaginemos que tenemos un campo en nuestra base de datos esperando para alguna entrada numérica, como un precio por así decirlo. Finalmente imagina que tu aplicación falla sobre una pila a causa de algún tipo inteligente puso texto en este campo. MySQL no quiere ver texto en la posición de tu sentencia SQL - y esto es completamente amargo.
¿Que hacer ? Tiempo de validar.
La validación simplemente significa que examinaremos una pieza de datos, usualmente de una forma de HTML para checarla y asegurarnos que es un modelo apropiado. Esto puede asegurarnos que no es un elemento en blanco para validar que un elemento encuentra cierto criterio (por ejemplo, que un valor numérico es estipulado o que una dirección de email contiene una @).
La validación puede ser echa del lado del servidor o del lado del cliente. El PHP es usado para la validación del lado del servidor, mientras que JavaScript u otro lenguaje de scripts basado en clientes para la validación de estos. Este articulo es acerca de PHP, así que nos vamos a concentrar en las cosas del servidor. Pero si estas buscando algo echo para las validaciones de los scripts del lado del cliente, puedes checar la librería de código de WebMonkey.
Ignoraremos nuestra base de datos y nos concentraremos en la validación de PHP. Si quieres, puedes adicionar campos a la base de datos de los empleados, rápidamente utilizando las sentencias ALT de MySQL (Liga a )- esto es si quieres que estos datos son los que validemos.
Existen muchas funciones de PHP útiles que podemos usar para validar nuestros datos y ellos ser simples o altamente complejos. Una función simple que podríamos usar podría ser strlen(), la cual nos dice la longitud de la variable.
Una función mas compleja podría ser ereg(), la cual maneja expresiones regulares (liga) para consultas complejas. No quiero meterme en complejidades de registros aquí, como libros enteros escritos sobre la materia, pero podría proveer algunos ejemplos en lo siguiente.
Iniciaremos con un ejemplo simple. Checaremos para ver si una variable existe o no existe.
<html>
<body>
<?php
if ($submit) {
if (!$first || !$last) {
$error = "Sorry! You didn't fill in all the
fields!";
} else {
// process form
echo "Thank You!";
}
}
if (!$submit || $error) {
echo $error;
?>
<P>
<form method="post" action="<?php echo $PHP_SELF ?>">
FIELD 1: <input type="text" name="first" value="<?php echo $first
?>"><br>
FIELD 2: <input type="text" name="last" value="<?php echo $last
?>"><br>
<input type="Submit" name="submit" value="Enter Information">
</form>
<?php
} // end if
?>
</body>
</html>
Las claves de este script son las sentencias condicionales anidadas. La primera checa para ver si el botón de submmit ha sido presionado. Si es así, se va a checar si existen las variables $first y $last. El símbolo || significa "or" y el símbolo ! significa "not".
Prodriamos también escribir la sentencia diciendo, "Si no existe $first o si $last no existe, entonces pon $error a lo siguiente".
Después, extenderemos pocas cosas para checar si es que una cadena tiene cierta longitud.
Esto podría ser ideal para passwords, desde cuando no desees algún holgazán introduzca un password con una o dos letras. Puedes decirle que sea de seis o mas caracteres.
La función para esto tu ya la conoces, strlen(). Simplemente retorna un numero igual a el numero de caracteres en la variable que esta siendo checada. Aquí, modifique el script de abajo para checar la longitud de $first y de $last.
<html>
<body>
<?php
if ($submit) {
if (strlen($first) < 6 || strlen($last) < 6) {
$error = "Sorry! You didn't fill in all the
fields!";
} else {
// process form
echo "Thank You!";
}
}
if (!$submit || $error) {
echo $error;
?>
<P>
<form method="post" action="<?php echo $PHP_SELF ?>">
FIELD 1: <input type="text" name="first" value="<?php echo $first
?>"><br>
FIELD 2: <input type="text" name="last" value="<?php echo $last
?>"><br>
<input type="Submit" name="submit" value="Enter Information">
</form>
<?php
} // end if
?>
</body>
</html>
Corre este script e intenta introducir seis caracteres o menos y observa que sucede. Es simple pero efectivo.
UNA VALIDACION NO TAN SIMPLE
Hablaremos un poco acerca de utilizar expresiones regulares con las funciones ereg() y eregi(). Como yo decía en un principio, esto puede ser tan complejo como se quiera o muy simple, dependiendo de lo que necesites.
Usando expresiones regulares, puedes examinar una cadena e inteligentemente buscar patrones y variaciones para ver que ellos correspondan a según los criterios que deseas. Los mas comunes de estos envuelven estar checando si una dirección de Email es valida ( aunque, de acuerdo, existe la manera no segura de hacer esto).
Así que para develar los misterios de las expresiones regulares, proveeremos algunos ejemplos.
Puedes utilizar esta misma forma que creamos en la pagina previa - solo pega en las líneas de abajo para ver como trabaja.
Primero, nos aseguraremos que solo texto se introducido en el elemento de la forma. Esta expresión regular verifica si es verdad que el usuario introducido uno o mas caracteres minúsculas, de la a a la z. Los números no son alojados:
if(!ereg("[a-Z],$firts) || !ereg("[a-Z]", $last)){
Ahora extenderemos esta expresión para checar ya sea que la cadena sea de 4 a 6 caracteres de longitud. Usando [[:alpha:]] es una manera fácil de checar caracteres alfabéticos validos. Los números en las llaves checan el numero de ocurrencias. Y nota que el ^ (gorrito) y el $ indican el inicio y el fin de la cadena.
if(!ereg("^[[:alpha:]]{4,6}$",$first) || !ereg(^[[:alpha:]]{4,6}$",$last)){
Finalmente, construiremos una expresión regular que cheque la viabilidad de la dirección de Email. Ha habido abundantes discusiones acerca de la efectividad de checar las dirección de correo electrónico Email de esta manera. No es completamente a prueba de fallos, pero yo he trabajado con ella muy bien.
He tomado esta gema de la lista de email de PHP. Es un gran recurso, úsalo. Y si, esto esta tan de miedo como se observa.
if
(!ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.
'@'.
'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.
'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $last)) {
No consumas demasiado tiempo observando esto. Mejor sigue leyendo.
FUNCIONES
¿Disfrutaste de la pasada expresión? ¿Divertido no fue? ¿No podría ser igual de divertido entrar a una docena de trozos de diferentes paginas que necesiten procesar direcciones de Email?
Piensa acerca de lo divertido de encontrar un tipo de letra en la sopa de letras - y hacerlo una docena de veces y no una. Pero de acuerdo, ha una mejor manera de hacerlo.
Recuerda que hablamos de incluir archivos, en la primera parte de esta lección. Podría alojarnos a crear una pieza de código como el del checador de Email e incluirlo múltiples veces atraves de muchas paginas. De esta manera , cuando queramos cambiar el código, necesitaremos solo editar un archivo, no todo.
Pero si nosotros queremos esto terminado, tendríamos que utilizar funciones.
Hemos ya usado funciones cientos de veces. Cada vez que consultamos la base de datos o checamos la longitud de una cadena, estamos usando funciones. Estas funciones son construidas dentro de PHP. Si eres un codificador agudo, puedes extender el PHP con tus propias funciones customizadas. Pero esto es muy avanzado para este tutorial. EN lugar de esto podemos crear funciones que podrían residir dentro de nuestro script de PHP.
Una función es simplemente un bloque de código al que le pasamos uno o mas valores. La función entonces procesa la información y retorna el valor. La función puede ser tan simple o tan compleja como queramos, pero tan larga como podamos pasar un valor y obtener uno fuera, no sabemos que tan complicado es realmente esto. Esto es la hermosura de las funciones.
Las funciones en PHP son muy similares a las funciones en C. Cuando definimos las funciones, podemos especificar que valores la función tiene que recibir. Es complicado obtener un manejador del primero, pero previene que cosas extrañas sucedan tirando el camino. Esto es abandonado por que las variables dentro de una función son conocidas como variables privadas. Esto es, existen solo dentro de la función. Puedes, en lugar, tener una variable en el script llamado $myname. Si creaste un función y esperaste usar la misma variable (con el mismo valor) pudiera no trabajar. Alternativamente puedes tener la variable $myname en el script y también crear otra variable llamada $myname en tu función, y las dos podrían coexistir felizmente con valores independientes. No recomiendo hacer esto, sin embargo! Cuando regreses y lo edites dentro de seis meses, podrías estar rompiendo cosas a la derecha y la izquierda. Estas son excepciones a las reglas como con todas las cosas, pero están fuera del alcance de este articulo.
Así que vamos a crear una función. Iniciaremos de manera simple. Necesitamos dar a la función un nombre y decirle que variables esperar. También necesitamos definir la función antes de llamarla.
<html>
<body>
<?php
function addnum($first, $second) {
$newnum = $first + $second;
return $newnum;
}
echo addnum(4,5);
?>
</body>
</html>
Eso es! Primeramente crearemos nuestra función. Nótese como definimos dos nuevas variables, llamadas $first y $second. Cuando llamamos a la función, cada variable es asignada a un valor basado en el orden en el cual aparecen en la lista - 4 es a $first, 5 es a $second. Entonces simplemente adicionamos los dos números juntos y retornamos el resultado. "Return" aquí simplemente significa enviar el resultado de regreso. EN el fin de el script imprimimos el numero 9.
Crearemos algunas cosas que serán mas útiles para las aplicaciones de base de datos. Como hacer algunas cosas que graciosamente manejen errores? Intenta esto.
<html>
<body>
<?php
function do_error($error) {
echo "Hmm, looks like there was a problem here...<br>";
echo "The reported error was $error.\n<br>";
echo "Best you get hold of the site admin and let her know.";
die;
}
if (!$db = @mysql_connect("localhost","user", "password")) {
$db_error = "Could not connect to MySQL Server";
do_error($db_error);
}
?>
</body>
</html>
Antes que ejecutes esto , intenta tirar MySQL o usar un vago nombre de usuario o password. Podrías obtener un agradable y útil mensaje de error. Los lectores observadores podrían notar que el símbolo de @ en frente de mysql_connect(). Esto suprime los mensajes de error, así que si quieres obtener la información solo para la función. Podrías también ver como pasamos una variable dentro de la función , la cual fue definida donde sea.
Recuerdas que dije que las funciones usan sus propias variables privadas?. Esto fue una mentira blanca pequeña. De echo, puedes crear variables fuera de una función accesible a la función. Puedes crear una función para consultar una base de datos y desplegar el grupo de resultados sobre muchas paginas. Tu no quieres tener que pasar toda el identificador de la conexión a la base de datos a una función todo el tiempo. Por lo tanto en esta situación, puedes hacer el código de la conexión disponible como una variable global. Por ejemplo:
<html>
<body>
<?php
function db_query($sql) {
global $db;
$result = mysql_query($sql,$db);
return $result;
}
$sql = "SELECT * FROM mytable";
$result = db_query($sql);
?>
</body>
</html>
Esta es una función básica, pero el punto es que no necesitas enviar $db cuando tu llames a la función - puedes crear una variable usando la palabra global. Puedes definir otras variables como global en estas sentencias, solo separa los nombres de las variables por una coma.
Finalmente, puedes observar como una real prueba para usar opcionalmente funciones variables. Aquí, la clave es como definir la variable para algún default en la función, entonces cuando llames la función sin algún valor especifico para la variable, el default podría ser adoptado. Pero si haces un valor especifico, podría tener precedencia.
Confundido? . Por ejemplo, cuando te conectas a la base de datos, siempre te conectas al mismo servidor y quieres utilizar siempre el mismo username y password. Pero en ocasiones tu necesitaras conectarte a diferentes bases de datos. Vamos a echar un vistazo.
<html>
<body>
<?php
function db_connect($host = "localhost", $user="username", $pass="graeme") {
$db = mysql_connect($host, $username, $password);
return $db;
}
$old_db = db_connect();
$new_host = "site.com";
$new_db = db_connect($new_host);
?>
</body>
</html>
Esto no es grandioso?. Las variables usadas dentro de la función fueron definidas cuando la función fue definida. La primera vez la función es llamada, los defaults son usados. La segunda vez, nos conectamos a un nuevo host, pero con el mismo username y password. Gran material !!
Piensa acerca de donde podemos utilizar estas funciones en tu código. Podrías usarlas para checar datos, en tareas rutinarias, y donde sea. Yo las utilizo cuando proceso texto para desplegarlo en una pagina de Web. Puedo checar, la escritura y modificar el texto para aumentar nuevas líneas y caracteres de escape HTML en un solo golpe.
Ahora todo se deja de hacer para impartir unas palabras de sabiduría.
CERRANDO DISPOSITIVOS
Cuando regrese a la base de datos, hay mucho que aprender. Si no lo has abandonado, encuentra un buen libro acerca del diseño de base de datos y aprende a poner una base de datos sólida - en alguna plataforma. Esta es una invaluable destreza y podría ahorrarte mucho tiempo y dolores de cabeza en la larga carrera. También aprende acerca de MySQL. Es una base de datos compleja pero interesante con un buen tanto de documentación útil. Aprende sobre las estructuras de las tablas, tipos de datos, y SQL. Puedes actualmente llevar a cabo alguna hermosa e improvista idea si tu conoces suficiente SQL.
Finalmente hay PHP. El sitio de PHP tiene todo lo que tu necesitas, desde un manual comprensible hasta una lista de email, repositorio de archivos. Una excelente manera de aprender PHP es estudiando los ejemplos usados en el manual y también checando el código de los archivos. Muchos de los scripts posteados consisten en funciones o clases que puedes usar gratis en tus propios scripts, sin que tengas que reinventar la rueda. Adicionalmente, las listas de correo es una excelente de anunciarte y obtener ayuda. Los desarrolladores mismos leen la lista y hay bastante gente con conocimiento que te pueda ayudar a lo largo del camino.
Buena suerte y buena codificación.
FIN . . . .