Tutorial PHP
Tutorial PHP
Una vez que ya tenemos instalados PHP y MySQL, y el servidor Apache configurado para
usarlos, podemos comenzar a escribir nuestro primer Script en PHP.
Una vez escrito esto lo salvamos en un fichero con la extension php3, y lo colocamos en
nuestro servidor, http://mi_servidor/php/test.php3. Ahora si ponemos esta URL en
nuestro navegador veremos una linea con el texto "Hola Mundo. Este es mi primer script
en PHP".
Lo primero que apreciamos en el script son sus delimitadores. En la primera línea del script
vemos <?php que nos indica que comienza un script en PHP, y en la última colocamos ?>
para indicar el final del script. Hay que destacar que todas las líneas que se encuentre entre
estos delimitadores deben acabar en punto y coma, excepto las sentencias de control (if,
swich, while, etc.).
Para que el servidor envie texto utilizaremos la instrucción echo, aunque también podemos
utilizar printf de uso similar al del C oPerl.
Finalmente, vemos que la palabra myvar comienza con el signo dólar ($) . Este símbolo le
indica a PHP que es una variable. Nosotros le hemos asignado un texto a esta variable, pero
también pueden contener números o arrays. Es importante recordar que todas las variables
comienza con el signo dólar
Para crear nuestra BD, debemos ser el administrador de MySQL o el root,para ello
haremos lo siguiente:
Ya hemos creado una BD, ahora le añadiremos una tabla y algunos registros, para lo cual
copia el siguiente texto y sálvalo en un archivo, que podríamos llamar mybd.dump.
INSERT INTO agenda VALUES (0, 'Juan Pérez', 'C/ Laguna, 15. Sevilla',
'95.455.55.55', '[email protected]' )\g
INSERT INTO agenda VALUES (1, 'Luis García', 'C/ Betis, 22. Cádiz',
'95.655.66.33', '[email protected]' )\g
Debemos tener en cuenta que los comandos de arriba debe escribirse cada uno en una sola
línea. Se han separado para aumentar la legibilidad del código.
Cabe destacar el campo id, que no puede estar vacio, y además es autoincrementable, lo
cuál deberemos tener en cuenta a la hora de actualizar y añadir registros. Si no hemos
cometido ningún error, ya tenemos nuestra base de datos de ejemplo en el servidor
MySQL.
Conexión al MySQL
<html>
<body>
<?php
$link = mysql_connect("localhost", "nobody");
mysql_select_db("mydb", $link);
$result = mysql_query("SELECT * FROM agenda", $link);
echo "Nombre: ".mysql_result($result, 0, "nombre")."<br>";
echo "Dirección: ".mysql_result($result, 0, "direccion")."<br>";
echo "Teléfono :".mysql_result($result, 0, "telefono")."<br>";
echo "E-Mail :".mysql_result($result, 0, "email")."<br>";
?>
</body>
</html>
En la primera línea del script nos encontramos con la función mysql_connect(), que abre
una conexión con el servidor MySQL en el Host especificado (en este caso la misma
máquina en la que está alojada el servidor MySQL,localhost). También debemos
especificar un usuario (nobody, root, etc. ), y si fuera necesario un password para el
usuario indicado (mysql_connect("localhost", "root", "clave_del_root")). El
resultado de la conexión es almacenado en la variable $link.
Con mysql_select_db() PHP le dice al servidor que en la conexión $link nos queremos
conectar a la base de datos mydb. Podríamos establecer distintas conexiones a la BD en
diferentes servidores, pero nos conformaremos con una.
Finalmente, mysql_result() es usado para mostrar los valores de los campos devueltos
por la consulta ($result). En este ejemplo mostramos los valores del registro 0, que es el
primer registro, y mostramos el valor de los campos especificados.
Consulta de la BD
<html>
<body>
<?php
$link = mysql_connect("localhost", "nobody");
mysql_select_db("mydb", $link);
$result = mysql_query("SELECT nombre, email FROM agenda", $link);
echo "<table border = '1'> \n";
echo "<tr><td>Nombre</td><td>E-Mail</td></tr> \n";
while ($row = mysql_fetch_row($result)){
echo ""<tr><td>$row[0]</td><td>$row[1]</td></tr> \n";
}
echo "</table> \n";
?>
</body>
</html>
En este script hemos introducido dos novedades, la más obvia es la sentencia de control
while(), que tiene un funcionamiento similar al de otros lenguajes, ejecuta una cosa
mientras la condición sea verdadera. En esta ocasión while() evalua la función
mysql_fetch_row(), que devuelve un array con el contenido del registro actual (que se
almacena en $row) y avanza una posición en la lista de registros devueltos en la consulta
SQL.
Consulta modificada de BD
<html>
<body>
<?php
$link = mysql_connect("localhost", "nobody");
mysql_select_db("mydb", $link);
$result = mysql_query("SELECT nombre, email FROM agenda", $link);
if ($row = mysql_fetch_array($result)){
echo "<table border = '1'> \n";
echo "<tr><td>Nombre</td><td>E-Mail</td></tr> \n";
do {
echo "<tr><td>".$row["nombre"]."</td><td>".
$row["email"]."</td></tr> \n";
} while ($row = mysql_fetch_array($result));
echo "</table> \n";
} else {
echo "¡ No se ha encontrado ningún registro !";
}
?>
</body>
</html>
Esencialmente, este script hace lo mismo que el anterior. Almacenamos en $row el registro
actual con la función mysql_fetch_array() que hace exactamente lo mismo que
mysql_fetch_row(), con la exepción que podemos referenciar a los campos por su
nombre ($row["email"]), en vez de por un número.
Con la sentencia if/else, asignamos a $row el primer registro de la consulta, y en caso de
no haber ninguno (else) mostramos un mensaje ("No se ha encontrado..."). Mientras que
con la sentencia do/while, nos aseguramos que se nos muestren todos los registros
devueltos por la consulta en caso de haber más de uno.
Hay que destacar la utilización del punto (.), como operador para concatenar cadenas.
En primer lugar escribiremos el texto HTML de la página web que nos servirá como
formulario de entrada, la llamaremos formulario.htm.
Formulario entrada
<html>
<body>
<form method="POST" action="http://mysevidor/php/buscador.php3">
<strong>Palabra clave:</strong> <input type="text" name="T1"
size="20"><br><br>
<input type="submit" value="Buscar" name="buscar">
</form>
</body>
</html>
Script búsqueda
<html>
<body>
<?php
if (!isset($buscar)){
echo "Debe especificar una cadena a bucar";
echo "</html></body> \n";
exit;
}
$link = mysql_connect("localhost", "nobody");
mysql_select_db("mydb", $link);
$result = mysql_query("SELECT * FROM agenda WHERE nombre LIKE '%$buscar%'
ORDER BY nombre", $link);
if ($row = mysql_fetch_array($result)){
echo "<table border = '1'> \n";
//Mostramos los nombres de las tablas
echo "<tr> \n";
while ($field = mysql_fetch_field($result)){
echo "<td>$field->name</td> \n";
}
echo "</tr> \n";
do {
echo "<tr> \n";
echo "<td>".$row["id"]."</td> \n";
echo "<td>".$row["nombre"]."</td> \n";
echo "<td>".$row["direccion"]."</td> \n";
echo "<td>".$row["telefono"]."</td> \n";
echo "<td><a href='mailto:".$row["email"]."'>".
$row["email"]."</a></td> \n";
echo "</tr> \n";
} while ($row = mysql_fetch_array($result));
echo "</table> \n";
} else {
echo "¡ No se ha encontrado ningún registro !";
}
?>
</body>
</html>
Lo primero que comprobamos es que el contenido de la variable $buscar que recibimos del
la página web formulario.htm no es una cadena vacia, y esto lo hacemos con la función
isset() que devuelve 'falso' si la variable que recibe está vacia. A la función le
anteponemos el signo admiración (!) que es equivalente a un NOT, para convertirlo en
'verdadero' en caso de que la variable esté vacia, y en es caso terminamos la ejecución del
script con exit.
Lo más importante de este script, es sin duda la sentencia SQL que le enviamos al servidor
MySQL, y más concretamente la condición que le imponemos, WHERE nombre LIKE '%
$buscar%'. Con la sentencia LIKE buscamos cualquier ocurrencia de la cadena contenida
en $buscar, mientras que con los signos de porcentaje (%) indicamos el lugar de la
coincidencia, por ejemplo, si hubiesemos puesto nombre LIKE '%$buscar', buscariamos
cualquier ocurrencia al final del campo"nombre", mientras que si hubiesemos puesto
nombre LIKE '$buscar%', buscariamos cualquier ocurrencia al principio del campo
"nombre".
</body>
</html>
Hemos creado un formulario donde recoger los datos, y una vez introducidos ejecutamos un
script llamado add_reg.php3, pues veamos como es este script.
añadir registros
<html>
<body>
<?php
// process form
$link = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$sql = "INSERT INTO agenda (nombre, direccion, telefono, email) ".
"VALUES ('$nombre', '$direccion', '$telefono', '$email')";
$result = mysql_query($sql);
echo "¡Gracias! Hemos recibido sus datos.\n";
</body>
</html>
Como se puede ver, para introducir un nuevo registro, utilizamos la ya conocida función
mysql_query(), la cúal también usamos para las consultas, y usaremos para las
actualizaciones, es decir una señora función. ¡Aaah!, una cosa muy importante, para poder
añadir o modificar registros debemos tener permiso para ello en el servidor MySQL, por
eso en este caso me conecto como root, pero podría ser cualquier otro usuario.
Para terminar esta lección, una pequeña frivolidad, vamos a combinar la página web de
formulario y el fichero de script php3, en un solo fichero que llamaremos add_reg.php3
(este script no lo comentaré, !algo tendran que hacer ustedes¡).
<?php
if ($enviar) {
// process form
$link = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$sql = "INSERT INTO agenda (nombre, direccion, telefono, email) ".
"VALUES ('$nombre', '$direccion', '$telefono', '$email')";
$result = mysql_query($sql);
echo "¡Gracias! Hemos recibido sus datos.\n";
}else{
?>
<?php
} //end if
?>
</body>
</html>
<?php
if (isset($id)){
// process form
$link = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$sql = "SELECT * FROM agenda WHERE id = $id"
$result = mysql_query($sql);
$sql = "UPDATE agenda SET nombre='$nombre', direccion='$direccion',".
"telefono='$telefono', email='$email'";
$result = mysql_query($sql);
}else{
echo "Debe especificar un 'id'.\n";
}
</body>
</html>
O bien,
<?php
if (isset($id)){
// process form
$link = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$sql = "UPDATE agenda SET nombre='$nombre', direccion='$direccion',".
"telefono='$telefono', email='$email' WHERE id=$id";
$result = mysql_query($sql);
}else{
echo "Debe especificar un 'id'.\n";
}
</body>
</html>
Borrado registros de BD
<html>
<body>
<?php
if (isset($id)){
// process form
$link = mysql_connect("localhost", "root");
mysql_select_db("mydb",$db);
$sql = "DELETE agenda WHERE id=$id")
$result = mysql_query($sql);
}else{
echo "Debe especificar un 'id'.\n";
}
</body>
</html>
<html>
<body>
<?php
<P>
<a href="<?php echo $PHP_SELF?>">Añadir un registro</a>
<P>
<form method="post" action="<?php echo $PHP_SELF?>">
<?php
if ($id) {
// editamos el registro seleccionado
$sql = "SELECT * FROM agenda WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
$id = $myrow["id"];
$nombre = $myrow["nombre"];
$direccion = $myrow["direccion"];
$telefono = $myrow["telefono"];
$email = $myrow["email"];
// enviamos el id para poder editar el registro
echo "<input type=hidden name="id" value=$id>";
}
?>
<?php
} // End If if ($enviar)
?>
</body>
</html>
Cabe destacar el uso de $PHP_SELF, esta es una funcion interna de PHP que nos devuelve
la dirección del script en el que se ejecuta.
Por lo general, todos nuestros script tienen partes de código iguales, las funciones
include( ) y require( ) nos van ahorrar muchas de estas líneas de código. Ambas
funciones hacen una llamada a un determinado fichero pero de dos maneras diferentes, con
include( ), insertamos lo que contenga el fichero que llamemos de manera literal en
nuestro script, mientras que con require( ), que decimos que el script necesitará parte de
código que se encuentra en el fichero que llama require( ).
Como todo esto es un poco lioso, veamos unos ejemplos que nos lo aclara.
<?php
include ("header.inc");
echo "Hola Mundo";
include ("footer.inc");
?>
<html>
<body>
</body>
</html>
<html>
<body>
<?php
echo "Hola Mundo";
?>
</body>
</html>
<?php
require ("config.inc");
include ("header.inc");
echo $cadena;
include ("footer.inc");
?>