Empezar rápido con PHP

Este pequeño tutorial asume que se tienen conocimientos básicos de HTML y una idea general del funcionamiento de un servidor web (HTTP).

Si usas Windows, los siguientes links son instaladores completos que incluyen PHP, MySQL (base de datos) y apache (servidor web) para que hagas pruebas. PHP es un lenguaje de programación de alto nivel interpretado. Esto último quiere decir que no tiene que compilarse, sino que el engine de PHP lo lee e interpreta cada vez que se ejecuta.

Pero PHP es un lenguaje de programación como cualquier otro; simplemente es muy útil para aplicaciones web. A grosso modo, el funcionamiento de una aplicación web es la siguiente:
Ésta es una breve tabla de contenido:
  1. Hola mundo
  2. Variables
  3. If-Then-Else y Switch-case
  4. Require
  5. Funciones
  6. MySQL

Hola Mundo


La siguiente es una página HTML sencilla:
<HTML>
<BODY>
<H1> Hola Mundo </H1>
</BODY>
</HTML>

La siguiente es una página PHP sencilla:
<HTML>
<BODY>
<H1> Hola Mundo </H1>
</BODY>
</HTML>

Efectivamente, cualquier página html puede ser interpretada como un programa PHP válido. Ahora veamos este programa:
<HTML>
<BODY>
<H1>
<?php
echo "Hola Mundo";
?>
</H1>
</BODY>
</HTML>
El código que el engine de PHP va a procesar, es sólo el que se encuentra entre los delimitadores <?php y ?>. Todo el resto es enviado idéntico a la salida. En el ejemplo de arriba, sólo hay una instrucción a ejecutar: echo "Hola Mundo"; la cual escribe el string "Hola Mundo" a la salida.

Como puede verse, el resultado de los 3 anteriores ejemplos es el mismo. Ahora el siguiente ejemplo indica los 3 tipos de comentarios que existen
<HTML>
<BODY>
<H1>
<?php
echo "Hola Mundo";
?>
</H1>
<?php
// Este comentario termina al final de la línea

echo "Esto no es comentario! ";

# Este también termina al final de la línea

echo "Esto no es comentario";

/* Este comentario
puede abarcar
varias líneas */


echo "Esto no es comentario! "; /* Los comentarios pueden empezar a media línea */

?>
</BODY>
</HTML>


Variables


En PHP, las variables se distinguen por empezar con un signo de número ($); por ejemplo:
<HTML>
<BODY>
<H1>
<?php
echo "Prueba de Hola Mundo";
?>
</H1>
<br />

<?php
for($i=0; $i<10; $i++)
{
echo "Hola Mundo <br />";
}
?>
</BODY>
</HTML>
Como se puede deducir, el código de arriba despliega 10 veces el string Hola Mundo <br /> en la página. La variable $i lleva la cuenta desde 0 hasta 9. Nótese que no hubo necesidad de declarar la variable $i.

Ahora veamos otro ejemplo simple:
<HTML>
<BODY>
<H1> Prueba con variables predefinidas </H1>
<?php
echo $HTTP_USER_AGENT;
?>
</BODY>
</HTML>
La variable $HTTP_USER_AGENT es una de muchas variables predefinidas. La instrucción mostrada arriba, desplegaría, por ejemplo, para FireFox:
Mozilla/5.0 (Windows; U; Windows NT 5.0; rv:1.7.3) Gecko/20040913 Firefox/0.10

Y para Internet Explorer:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)


Para algunos ejemplos más complicados, pueden necesitarse Arreglos; y aunque no los vamos a cubrir, basta mencionar que los elementos de un arreglo, pueden estar indexados por una cadena. Por ejemplo, $usuarios["Juan"] podría ser válido.

Otra cosa importante que mencionar de las variables, es cómo se reciben los datos de una forma en HTML. Por ejemplo, tómese la siguiente forma HTML:
<HTML>
<BODY>
<H1> Hola Mundo </H1>
<FORM>
<INPUT type="text" name="nombre" value="">
<INPUT type="submit" value="Enviar">
</FORM>
</BODY>
</HTML>
Este código, nos va a generar una forma simple así:
Hola Mundo
Donde sólo hay una variable a enviar al servidor llamada nombre. Desde nuestro código PHP, leer esa variable es muy sencillo:
<HTML>
<BODY>
<H1> Prueba con variables predefinidas </H1>
<?php
echo "El nombre es: $nombre";
?>
</BODY>
</HTML>
Nótese que la variable se insertó directamente dentro del string. La variable es reemplazada a la hora de evaluar el string.

Dependiendo de las opciones del archivo de configuración php.ini, eso es todo lo que se requiere. Sin embargo, si queremos limitar a las variables que envió la forma con el método POST, podemos escribir:
<HTML>
<BODY>
<H1> Prueba con variables predefinidas </H1>
<?php
$nombre = $_POST['nombre'];
echo "El nombre es:" . $nombre;
?>
</BODY>
</HTML>
En este ejemplo, la variable se concatenó al string usando el operador ".". Es importante notar que cuando la variable se incluye dentro del string, no puede usarse un arreglo; es decir, que no podemos ejecutar echo "El nombre es: $_POST['nombre']"; y debemos concatenar el elemento del arreglo a la cadena.

If-Then-Else y switch-case


La ejecución condicional de código, no es muy distinta de la mayoría de los lenguajes de programación, pero si son mucho más flexibles.
<HTML>
<BODY>
<H1> Condicionales </H1>
<?php
if($edad<18) {
echo "<B>Eres menor de edad</B>";
} else {
echo "<B>Eres mayor de edad</B>";
}
?>
</BODY>
</HTML>
O lo que es equivalente:
<HTML>
<BODY>
<H1> Condicionales </H1>
<?php
if($edad<18) {
?>
<B>Eres menor de edad</B>
<?php
} else {
?>
<B>Eres mayor de edad</B>
<?php
}
?>
</BODY>
</HTML>
En este segundo ejemplo, el texto desplegado es considerado código HTML y no es interpretado por PHP.

Ahora vamos a discutir la sintaxis de switch-case. Para lo cual, tenemos otro ejemplo:
<HTML>
<BODY>
<H1>
<?php
switch($fruta)
{

case "pera":
{
echo "Color verde";
break;
}
case "banana":
case "platano":
{
echo "Color amarillo";
break;
}
default:
{
echo "Fruta desconocida";
break;
}
}
?>
</H1>
</BODY>
</HTML>
Hay 2 cosas importantes que notar en este ejemplo: la sintaxis y el hecho de que se pueden comparar strings en un switch. Pero también se pueden usar constantes como tradicionalmente lo haríamos:
case 53:
{
echo "Cincuenta y tres";
break;
}


Require


Si has programado en C, estarás familiarizado con la directiva #include. En el caso de VHDL, usamos library y use, en Ada usamos with y use. De manera similar, en PHP usamos require. Supóngase que tenemos el siguiente archivo llamado despliegafecha.php:
<?php
// Obtiene la fecha actual..
$ts = date("Y-m-d H:i:s");
echo "<TABLE><TR><TD>$HTTP_USER_AGENT</TD></TR>";
echo "<TR><TD>$ts</TD></TR></TABLE>";
?>
El archivo de arriba, podría mandarse llamar como:
<HTML>
<HEAD>
<TITLE>Prueba con require</TITLE>
</HEAD>
<BODY>
<?php
// Obtiene la fecha actual..
require "despliegafecha.php";

// Luego escribimos el resto del codigo..
?>
</BODY>
</HTML>
Puesto que en el archivo requerido, el código no está declarado como función, se ejecuta en cuanto se manda llamar, y desplegaría una tabla con la información del navegador y la fecha actual. En cierta forma, un require en PHP funciona un poco como el include de ensamblador o los scripts (JavaScript) en HTML; se pueden declarar funciones y mandarlas llamar, o puede ponerse directamente el código a ejecutarse cada vez que se llame el archivo incluido o requerido.

Pero, ¿para que queremos hacer algo así? Se me ocurren varias razones:
Un último ejemplo:
<HTML>
<HEAD>
<TITLE> Página Principal </TITLE>
</HEAD>
<BODY>

<TABLE class="mainstructure">
<TR>
<TD colspan=3>
<!-- Header -->
<?php
require "header.php";
?>
</TD>
</TR>

<TR>
<TD class="mainleftcol">
<!--Left Menu-->
<?php
require "database.php";
displayLeftMenu();
?>
</TD>
<TD class="maincenter">
<?php
require "center.php";
?>
</TD>
<TD class="mainrightcol">
<!--Right column-->
<?php
displayNews();
?>
</TD>
</TR>
</TABLE>

</BODY>
</HTML>
En este ejemplo, se tiene el esqueleto de una página cualquiera. La estructura de la página tiene una estructura simple. Mas o menos:

Aquí iría el código que se ejecute en "header.php"
Aquí se incluye lo necesario para conectarse a la base de datos (requiriendo el archivo "database.php") y se manda llamar la función displayLeftMenu(). Aquí iría el código que se ejecute en "center.php".

El archivo "center.php" se encargaría de mostrar el contenido principal de la página. Puede consultar a bases de datos, incluir funciones predefinidas de PHP o requerir otros archivos y crear sus propias funciones.

En este ejemplo, si hubiera que modificar algo del encabezado, sólo habría que modificar el archivo "header.php" y no todas las páginas que despliegan el encabezado. Lo mismo podría aplicarse en múltiples situaciones.
Aquí se manda llamar la función displayNews().


Funciones


Ya van varias veces que menciono las funciones, pero no he mencionado cómo se escriben y mandan llamar. Como no hay mucho que decir, sólo voy a poner un ejemplo:
<?php
function escribeNota($titulo, $cuerpo, $clase)
{
echo "<TABLE class=\"$clase\">";
echo "<TR><TH>$titulo</TH></TR>";
echo "<TR><TD>$cuerpo</TD></TR>";
echo "</TABLE>";
}
?>
<HTML>
<HEAD>
<TITLE>Prueba con funciones</TITLE>
<STYLE TYPE="text/css">
.recado { float: right; width: 30%; }
</STYLE>
</HEAD>
<BODY>
<?php
// Escribe un par de notas..
$anuncio = "Come frutas y verduras";
escribeNota("Nota 1", "Pasar por Juan", "recado");
escribeNota("Nota 2", $anuncio, "recado");
?>
</BODY>
</HTML>
Para regresar valores de una función, tenemos:
<?php
function square($num)
{
return $num * $num;
}
echo square(5); // despliega un 25.
?>
Para más información acerca de funciones, el manual de php tiene una sección al respecto.

MySQL


Aparte de la facilidad de programación, una de las características mas populares de PHP es la facilidad con la que se integra con las bases de datos. Probablemente la más popular es MySQL. Aquí voy a hacer unos pocos ejemplos con bases de datos.

Para esta sección, voy a suponer que al menos tienen nociones de bases de datos. De todas formas, para este ejemplo, usaremos tablas muy sencillas. Si prefieres, hay un muy buen tutorial de SQL en SQLCourse.
CREATE TABLE `telephone` (
`id` int NOT NULL auto_increment,
`number` varchar(10) default NULL,
`comments` varchar(50),
`id_contact` int default NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE `contact` (
`id` int NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
`comments` varchar(50),
PRIMARY KEY (`id`)
)
Entonces, teniendo estas tablas, vamos a ver el primer ejemplo. Supongamos que tenemos un archivo llamado dbconf.php y que contiene lo siguiente:
<?php

$dbuser="mi_usuario";
$dbpass="mi_contrasena";
$dbname="mi_basededatos";
$tablename="mi_tabla";
?>
Entonces, ese archivo lo podríamos incluir en todos nuestros programas que se conecten a la misma base de datos.
<?php
// Primero nos conectamos a la base de datos..
if(mysql_connect("localhost", $dbuser, $dbpass))
{
// Escribimos la consulta en una variable
$MySQLQuery = "SELECT * FROM contact";
// Ejecutamos la consulta sobre la base de datos
$MySQLResult = mysql_db_query($dbname, $MySQLQuery);
while($row=mysql_fetch_row($MySQLResult))
{
echo "Id:" . $row[0];
echo " Nombre: " . $row[1] "<br />";
}
} else {
echo "No se pudo conectar!";
}
?>
Y hay como hay varias formas de hacer ciertas cosas, aquí hay unas de las mas comunes.

Por ejemplo, abajo se muestran 2 formas de ejecutar una consulta en la base de datos. En la segunda, primero seleccionamos una base de datos y luego la ejecutamos.
<?php
// Ejecutamos la consulta sobre la base de datos
$MySQLResult = mysql_db_query($dbname, $MySQLQuery);

##### Otra forma de hacerlo es: #####

// Primero seleccionamos base de datos
if(!mysql_select_db($dbname))
{
echo "No pudo seleccionar la base de datos";
exit;
}
// Y luego ejecutamos..
$MySQLResult = mysql_query($MySQLQuery);
?>
En la sección de arreglos, mencioné que los arreglos pueden ser indexados por strings. En el ejemplo que sigue, la segunda forma de hacerlo, utiliza esa característica de los arreglos.
<?php
// Obtenemos los resultados
while($row=mysql_fetch_row($MySQLResult))
{
echo "Id:" . $row[0];
echo " Nombre: " . $row[1] "<br />";
}

##### Otra forma de hacerlo es: #####

// Obtenemos los resultados
while($row=mysql_fetch_assoc($MySQLResult))
{
echo "Id:" . $row["id"];
echo " Nombre: " . $row["name"] "<br />";
}
?>
Con esto debes de tener suficiente idea para empezar a hacer tus propios programas. El resto es cosa de buscar, leer y practicar.
Pero si quieres un poco más, puedes leer algo de manejo de imágenes.

Regresar


Creative Commons License
Recursos de PHP por Rodrigo Flores está licenciada bajo la Licencia Creative Commons Atribución/Compartir-Igual 2.5.