Вы находитесь на странице: 1из 103

PHP Y MYSQL

www.phpymysql.com

NICANOR YERBA

Pgina 1

PHP Y MYSQL

NICANOR YERBA

Libro de Php 5
Por: Nicanor yerba

Ninguna seccin de este material puede ser reproducida en forma


electrnica, impreso o cualquier otro tipo de soporte existente incluyendo
fotocopiado o grabacin sin la expresa autorizacin del autor.
La publicacin que aparece en este volumen representa el punto de vista del
autor al momento de su publicacin. El autor se reserva el derecho a
modificar o actualizar la informacin.

www.phpymysql.com

Pgina 2

PHP Y MYSQL

www.phpymysql.com

NICANOR YERBA

Pgina 3

PHP Y MYSQL

NICANOR YERBA

Tabla de contenidos

Introduccin a php 5.5


Instalar AppServ...6
Mi primer Script PHP...13
Separacin de instrucciones.14
Comentario en PHP......14
Variables...16
Variables predefinidas en PHP.17
Variables externas a PHP......29
Operadores.24
Operadores de Aritmtica..26
Operadores de aritmtica con formularios29
Operadores de Asignacin.33
Operadores de Comparacin.34
Operadores de Control de Errores.38
Operadores de ejecucin...39
Operadores de Incremento/Decremento...39
Operadores de Lgica...42
Operadores de Cadena..44
Operadores de Matrices45
Comparacin de matrices.47
Estructuras de Control..48
If.48
Else.50
Elseif...51
While...57
do..while..59
For....61
Break....64
Continue...65
Switch..66
Require()......68
include()..70
Tiempo y fecha....72
Las clases.76
Sessiones.....79
Ejemplos php5......83
Upload de archivos con PHP....92
Mandar mails desde PHP ....96
Enviar un formulario por mail con PHP.......99
Escritura en archivos con PHP......102

www.phpymysql.com

Pgina 4

PHP Y MYSQL

NICANOR YERBA

TRABAJANDO CON PHP


Introduccin a php 5
Con las primeras 2 versiones de PHP, PHP 3 y PHP 4, se haba conseguido una
plataforma potente y estable para la programacin de pginas del lado del servidor.
Estas versiones han servido de mucha ayuda para la comunidad de desarrolladores,
haciendo posible que PHP sea el lenguaje ms utilizado en la web para la realizacin de
pginas avanzadas.
Sin embargo, todava existan puntos negros en el desarrollo PHP que se han tratado de
solucionar con la versin 5, aspectos que se echaron en falta en la versin 4, casi desde
el da de su lanzamiento. Nos referimos principalmente a la programacin orientada a
objetos (POO) que, a pesar de que estaba soportada a partir de PHP3, slo
implementaba una parte muy pequea de las caractersticas de este tipo de
programacin.
El principal objetivo de PHP5 ha sido mejorar los mecanismos de POO para solucionar
las carencias de las anteriores versiones. Un paso necesario para conseguir que PHP sea
un lenguaje apto para todo tipo de aplicaciones y entornos, incluso los ms exigentes.

www.phpymysql.com

Pgina 5

PHP Y MYSQL

NICANOR YERBA

Instalar AppServ: php + mysql + apache sobre Windows

Que es AppServ?
Es un software que permite la instalacin en nuestro entorno Windows, de los siguientes
paquetes:

Apache Web Server (versin 2.2.3)


Lenguaje PHP (versin 5 o 4, en mi caso instale la 5.1.6)
Base de datos MySQL (versin 5.0.24)
Manejador de base de datos phpMyAdmin (versin 2.9.0.2)

Esto es lo que incluye el actual paquete AppServ 2.5.7, es obvio pero vale la pena
recordar que como esta formado por 4 paquetes (apache, php, mysql, phpmyadmin),
cada uno sigue lanzando nuevas versiones, que podemos instalar por separado o esperar
la prxima versin de AppServ. Por lo general no debemos apresurarnos ya que nuestro
PC lo usamos de entorno de desarrollo y testeo de las aplicaciones.
Donde bajamos AppServ, Gratis?
Si, afortunadamente este paquete es gratuito, o sea que no tendremos pretextos para
sumarnos a esto del PHP y MySQL, lo podemos bajar de su Web oficial, que en espaol
esta situada ac:
http://www.appservnetwork.com/index.php?newlang=spanish
Es muy liviano y de ah mismo podemos bajar la ltima versin, siempre.
Como instalar AppServ
Eso es lo mejor, es muy fcil de hacer, basta con un doble click en el instalador que nos
bajamos de la Web y luego damos siguiente, siguiente, varias veces hasta que queda
instalado. Pero bueno este tutorial no tiene sentido si es tan fcil, por tanto para hacer
como que trabajo, vamos a ver paso a paso esas pantallas donde solo basta con dar
"siguiente".
1) Damos doble click en el icono del instalador que nos bajamos. Aparece la imagen
que vemos debajo, recuerda que la versin puede ser ms nueva cuando t intentes ;),
pero tranquilo se usara igual que como comento ahora. Debemos dar, siguiente (next).

www.phpymysql.com

Pgina 6

PHP Y MYSQL

NICANOR YERBA

2) Aparece el acuerdo de licencia, ah debemos dar conformidad (I Agree)

3) En este punto, debemos elegir en cual de nuestros discos duros y en que carpeta
vamos a instalar el AppServ, a mi no me gusta pensar mucho por tanto dejo siempre el
directorio recomendado por defecto, o sea: c:\AppServ, como muestra la imagen, y le
damos siguiente (Next)
www.phpymysql.com

Pgina 7

PHP Y MYSQL

NICANOR YERBA

4) En este punto debemos elegir los componentes que vamos a instalar (recuerda que
todos los pasos basta con dar siguiente siguiente), como ves aparecen marcados los
cuatro elementos disponibles (apache, mysql, php, phpmyadmin) si bien puedes
desmarcar alguno, es mejor instalar todos para tener completo tu equipo de testeo y
desarrollo Web, le damos siguiente (Next)

www.phpymysql.com

Pgina 8

PHP Y MYSQL

NICANOR YERBA

5) En este punto debes indicar el nombre del servidor y el email del administrador del
sistema, en mi caso dejo localhost y email elquique@localhost.com, respectivamente, el
puerto 80. Recuerda que puedes dar siguiente y dejar lo que sugiere sin problemas.

6) Configuracin MySQL, en este punto debemos prestar atencin, ya que debemos


indicar el Password, para el usuario principal de la base de datos, lo escribimos 2 veces
!! Y por favor lo recuerdan (no lo anoten bajo el teclado como mi ta Clotilde). Lo
dems lo dejamos como esta en la imagen.

www.phpymysql.com

Pgina 9

PHP Y MYSQL

NICANOR YERBA

Por tanto el usuario ser root, que es por defecto (tu luego puedes crear mas, todos los
que quieras) y tu Contrasea que acabas de escribir, eso lo usaras para abrir la base
desde tus programas PHP, por eso es importante recordar ;)
Le damos siguiente (Next)
7) Para culminar la instalacin, como indica la imagen, podemos elegir si al finalizar ya
comenzara a funcionar el Server Apache y el servidor de base de datos MySQL, lo
dejamos marcado y le damos finalizar (Finish), listo hemos terminado.

www.phpymysql.com

Pgina 10

PHP Y MYSQL

NICANOR YERBA

En este punto si vas a tu navegador (ojala y sea FireFox jaja), puedes poner,
http://localhost y debe mostrarse tal como muestra la imagen. Salvo las versiones que el
tuyo puede ser mas nuevo.

www.phpymysql.com

Pgina 11

PHP Y MYSQL

NICANOR YERBA

En la configuracin Standard usando c:\AppServ la ubicacin que equivale a


http://localhost es c:\AppServ\www por tanto si creas una carpeta prueba dentro de
www, quedan as: c:\AppServ\www\prueba, y dentro un archivo llamados test.php con
el siguiente contenido:
<?php
echo phpinfo();
?>

Este archivo se ejecutara en tu navegador llamando lo as:


http://localhost/prueba/test.php

www.phpymysql.com

Pgina 12

PHP Y MYSQL

NICANOR YERBA

Mi primer Script PHP


<html>
<body>
<?php
$myvar = "Hola Este es mi primer script en PHP";
//Esto es un comentario
/* Esto es un comentario */
echo $myvar;
?>
</body>
</html>

Una vez escrito salvamos en un fichero con la extensin php, y lo colocamos en nuestro
servidor, http://localhost/prueba/nombre.php . Ahora si ponemos esta URL en nuestro
navegador veremos una lnea con el texto "Hola. Este es mi primer script en PHP" .
Lo primero que apreciamos en el script son sus delimitadores. En la primera lnea 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 lneas que
se encuentre entre estos delimitadores deben acabar en punto y coma , excepto las
sentencias de control (if, swicht, while, etc.).
Como en toda programacin, es importante poner muchos comentarios, para lo cual si
queremos comentar una sola lnea tenemos que poner al principio de la lnea // , si lo
que queremos es comentar varias utilizaremos los delimitadores /* - */ .
Para que el servidor envi texto utilizaremos la instruccin echo , aunque tambin
podemos utilizar printf de uso similar al del C o Perl .
Finalmente, vemos que la palabra myvar comienza con el signo dlar ( $ ) . Este
smbolo le indica a PHP que es una variable. Nosotros le hemos asignado un texto a
esta variable, pero tambin pueden contener nmeros o tablas (arrays). Es importante
recordar que todas las variables comienza con el signo dlar . Tambin habris
observado que el texto que le asignamos a la variable termina con n , esto no se
imprime sirve para indicarle al navegador una nueva lnea.

www.phpymysql.com

Pgina 13

PHP Y MYSQL

NICANOR YERBA

Separacin de instrucciones
La separacin de instrucciones se hace de la misma manera que en C o Perl terminando cada declaracin con un punto y coma.
La etiqueta de fin de bloque (?>) implica el fin de la declaracin, por lo tanto lo
siguiente es equivalente:
<?php
echo " Ejemplo de mensaje 1 <br />";
?>

<?php
echo " Ejemplo de mensaje 2"
?>

Comentario en PHP
Para que en futuras revisiones a tu cdigo por tu parte y sobretodo por parte de otros
programadores este cdigo sea inteligible para la mente humana, es un buen costumbre
comentar lo que se esta haciendo en PHP pero en palabras.
De esta manera el cdigo ser mucho mas sencillo de comprender y a su vez de
modificar, corregir, ampliar...
Los comentarios que soporta PHP sn los de C, C++ y los del shell de Unix, asi
podemos usar // y /* */ para comentarios y comentarios multilinea respectivamente
como haramos en C:
<?
echo "Esto se ve <br />";
// esto no se ve
echo "Esto tambien se ve";
/* esto tampoco
se ve */
?>

O tambien podemos usar # como en los comentarios del shell de Unix:


<?
# esto no se ve
echo "pero esto si";
?>

Tendremos cuidado con no poner un comentario multilnea en el interior del otro:


www.phpymysql.com

Pgina 14

PHP Y MYSQL

NICANOR YERBA

<?
/* /* No hacer nunca esto */ */
?>

Como veis, PHP interpreta como comentario desde el primer /* al primer */ sin tener en
cuenta que hay otro */, esto nos producir un error asi que habr que tener cuidado.

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 15

PHP Y MYSQL

NICANOR YERBA

Variables
Una variable es un contenedor de informacin, en el que podemos meter nmeros
enteros, nmeros decimales, carcteres... el contenido de las variables se puede leer y se
puede cambiar durante la ejecucin de una pgina PHP.
En PHP todas las variables comienzan con el smbolo del dlar $ y no es necesario
definir una variable antes de usarla. Tampoco tienen tipos, es decir que una misma
variable puede contener un nmero y luego puede contener carcteres.
<html>
<body>

<?php
$a =
$b =
$c =
echo
?>

1;
3.34;
"Hola Mundo";
$a,"<br>",$b,"<br>",$c;

</body>
</html>

En este ejemplo hemos definido tres variables, $a, $b y $c y con la instruccin echo
hemos impreso el valor que contenan, insertando un salto de lnea entre ellas.

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 16

PHP Y MYSQL

NICANOR YERBA

Variables predefinidas en PHP


PHP proporciona una gran cantidad de variables predefinidas a cualquier script que se
ejecute. De todas formas, muchas de esas variables no pueden estar completamente
documentadas ya que dependen de sobre qu servidor se est ejecutando, la versin y
configuracin de dicho servidor, y otros factores. Algunas de estas variables no estarn
disponibles cuando se ejecute PHP desde la lnea de comandos. Para obtener una lista
de estas variables podis consultar la seccin Variables predefinidas reservadas.
Warning
A partir de PHP 4.2.0, el valor por defecto de la directiva
PHP register_globals es off (desactivada). Este es un cambio importante en PHP.
Teniendo register_globals off afecta el conjunto de variables predefinidas disponibles en
el sistema. Por ejemplo, para obtener DOCUMENT_ROOT se
usar$_SERVER['DOCUMENT_ROOT'] en vez
de $DOCUMENT_ROOT $_GET['id'] de la
URLhttp://www.example.com/test.php?id=3 en vez de $id $_ENV['HOME'] en vez
de $HOME.
Para ms informacin sobre este cambio, podis consultar el apartado de configuracin
sobreregister_globals, el captulo sobre seguridad Usando "Register Globals" , asi como
los anuncios de lanzamiento de PHP 4.1.0 y 4.2.0
El uso de las variables reservadas predefinidas en PHP, como matrices superglobales es
recomendable.
A partir de PHP 4.1.0, PHP ofrece un conjunto adicional de matrices predefinidas,
conteniendo variables del servidor web, el entorno y entradas del usuario. Estas nuevas
matrices son un poco especiales porque son automticamente globales. Por esta razn,
son conocidas a menudo como "autoglobales" "superglobales". Las superglobales se
mencionan ms abajo; sin embargo para una lista de sus contenidos y ms informacin
sobre variables predefinidas en PHP, consultar la seccin Variables predefinidas
reservadas. Podris ver como las variables predefinidas antiguas ($HTTP_*_VARS)
todava existen. A partir de PHP 5.0.0, las matrices de tipo "long" de variables
predefinidas, se pueden desactivar con la directiva register_long_arrays.
Note: Variables variables Las superglobales no pueden usarse como variables
variables.
Si ciertas variables no son definidas en variables_order, las matrices PHP predefinidas
asociadas a estas, estarn vacias.
PHP superglobales
$GLOBALS

www.phpymysql.com

Pgina 17

PHP Y MYSQL

NICANOR YERBA

Contiene una referencia a cada variable disponible en el espectro de las variables


del script. Las llaves de esta matriz son los nombres de las variables
globales. $GLOBALS existe dese PHP 3.
$_SERVER
Variables definidas por el servidor web directamente relacionadas con el
entorno en don el script se esta ejecutando. Anloga a la antigua
matriz $HTTP_SERVER_VARS (la cual est todava disponible, aunque no se
use).
$_GET
Variables proporcionadas al script por medio de HTTP GET. Anloga a la
antigua matriz$HTTP_GET_VARS (la cual est todava disponible, aunque no se
use).
$_POST
Variables proporcionadas al script por medio de HTTP POST. Anloga a la
antigua matriz$HTTP_POST_VARS (la cual est todava disponible, aunque no
se use).
$_COOKIE
Variables proporcionadas al script por medio de HTTP cookies. Anloga a la
antigua matriz$HTTP_COOKIE_VARS (la cual est todava disponible, aunque
no se use).
$_FILES
Variables proporcionadas al script por medio de la subida de ficheros via HTTP
. Anloga a la antigua matriz $HTTP_POST_FILES (la cual est todava
disponible, aunque no se use). Vea tambin Subiendo ficheros por mtodo
POST para ms informacin.
$_ENV
Variables proporcionadas al script por medio del entorno. Anloga a la antigua
matriz$HTTP_ENV_VARS (la cual est todava disponible, aunque no se use).
$_REQUEST
Variables proporcionadas al script por medio de cuaquier mecanismo de entrada
del usuario y por lo tanto no se puede confiar en ellas. La presencia y el orden en
que aparecen las variables en esta matriz es definido por la directiva de
configuracin variables_order. Esta matriz no tiene un anlogo en versiones
anteriores a PHP 4.1.0. Vea tambin import_request_variables().
Note: Cuando se utiliza la linea de comandos, argv y argc no son incluidas aqu;
estas variables se podrn encontrar en la matriz
$_SESSION
Variables registradas en la sesin del script. Anloga a la antigua
matriz $HTTP_SESSION_VARS (la cual est todava disponible, aunque no se
use). Vea tambin la seccin Funciones para el manejo de sessiones para ms
informacin.

www.phpymysql.com

Pgina 18

PHP Y MYSQL

NICANOR YERBA

Variables externas a PHP


Formularios HTML (GET y POST)
Cuando se enva un formulario a un script PHP, las variables de dicho formulario pasan
a estar automticamente disponibles en el script gracias a PHP. Por ejemplo, consideremos el
siguiente formulario:

Ejemplo #1 Variables de formulario simples


<html>
<body>
<form name="form1" action="1.php" method="get">
Name: <input type="text" name="nombre"><br>
Email: <input type="text" name="email"><br>
<input type="submit" name="submit" value="Submit me!">
</form>
<?php
print $_GET['nombre'];
print $_GET['email'];
?>
</body>
</html>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 19

PHP Y MYSQL

NICANOR YERBA

Dependiendo de tu configuracin y preferencias personales, existen muchas maneras de


acceder a los datos de tus formularios HTML. Algunos ejemplos:
Ejemplo #2 Accediendo datos de un formulario simple HTML POST
<?php
// Available since PHP 4.1.0
print $_POST['username'];
print $_REQUEST['username'];
import_request_variables('p', 'p_');
print $p_username;
// Available since PHP 3. As of PHP 5.0.0, these long
predefined
// variables can be disabled with the register_long_arrays
directive.
print $HTTP_POST_VARS['username'];
// Available if the PHP directive register_globals = on. As of
// PHP 4.2.0 the default value of register_globals = off.
// Using/relying on this method is not preferred.
print $username;
?>

www.phpymysql.com

Pgina 20

PHP Y MYSQL

NICANOR YERBA

Usando un formulario GET es similar excepto en el uso de variables predefinidas, que


en este caso sern del tipo GET. GET tambin se usa con QUERY_STRING (la
informacin despues del smbolo '?' en una URL). Por
ejemplo http://www.example.com/test.php?id=3 contiene datos GET que son accesibles
con$_GET['id'].
Note: Matrices superglobales, como $_POST y$_GET, estn disponibles desde PHP
4.1.0.
Como hemos dicho, antes de PHP 4.2.0, el valor por defecto
de register_globals era on (activado). Y, en PHP 3 estba siempre activado. La
comunidad PHP anima a no confiar en esta directiva ya que es preferible asumir que
tiene el valor off (desactivada) y programar teniendo en cuenta esto.
Note: La directiva de configuracin magic_quotes_gpc afecta a valores Get, Post y
Cookie, Si esta activada (on) el valor (It's "PHP!") sera convertido automaticamente a
(It\'s \"PHP!\"). "Escaping" es necesario en inserciones a bases de datos.
PHP tambien entiende matrices en el contexto de variables de formularios.
Se puede, por ejemplo, agrupar juntas variables relacionadas usar esta caracterstica
para obtener valores de una entrada "select2 mltiple. Por ejemplo, vamos a mandar un
formulario asi mismo y a presentar los datos cuando se reciban:

Ejemplo #3 Variables de formulario ms complejas


<?php
if ($HTTP_POST_VARS['action'] == 'submitted') {
print '<pre>';
print_r($HTTP_POST_VARS);
print '<a HREF="http://www.hackingballz.com/herramientas/man
ual-oficial-dephp/'. $HTTP_SERVER_VARS['PHP_SELF'] .'">Please try again</a>';
print '</pre>';
} else {
?>
<form action="<?php echo $HTTP_SERVER_VARS['PHP_SELF']; ?>" meth
od="POST">
Name: <input type="text" name="personal[name]"><br>
Email: <input type="text" name="personal[email]"><br>
Beer: <br>
<select multiple name="beer[]">
<option value="warthog">Warthog</option>

www.phpymysql.com

Pgina 21

PHP Y MYSQL

NICANOR YERBA

<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbru</op
tion>
</select><br>
<input type="hidden" name="action" value="submitted">
<input type="submit" name="submit" value="submit me!">
</form>
<?php
}
?>

en PHP 3, el uso de matrices de variables de formularios est limitado a matrices


unidimensionales. En PHP 4, no existe esta restriccin.
IMAGE SUBMIT variable names
Cuando mandamos un formulario, es posible usar una imagen en vez del botn estandar
de "mandar":
<input type="image" src="image.gif" name="sub">

Cuando el usuario hace click en cualquier parte de la imagen, el formulario que la


acompaa se transmitir al servidor con dos variables adicionales, sub_x y sub_y. Estas
contienen las coordenadas del click del usuario dentro de la imagen. Los ms
experimentados puede notar que los nombres de variable enviados por el navegador
contienen un guin en vez de un subrayado (guin bajo), pero PHP convierte el guin
en subrayado automticamente.
Cookies HTTP
PHP soporta cookies de HTTP de forma transparente tal y como estn definidas en en
las Netscape's Spec. Las cookies son un mecanismo para almacenar datos en el
navegador y as rastrear o identificar a usuarios que vuelven. Se pueden crear cookies
usando la funcin SetCookie(). Las cookies son parte de la cabecera HTTP, as que se
debe llamar a la funcin SetCookie antes de que se enve cualquier salida al navegador.
Es la misma restriccin que para la funcin header(). Los datos de una cookie estan
disponibles en la matriz con datos de cookies apropiada, tal
como $_COOKIE, $HTTP_COOKIE_VARS y tambin en $_REQUEST.
Si se quieren asignar mltiples valores a una sola cookie, basta con aadir [] al nombre
de la cookie para definirla como una matriz. Por ejemplo:
<?php
setcookie("MyCookie[foo]", "Testing 1", time()+3600);
setcookie("MyCookie[bar]", "Testing 2", time()+3600);
?>

www.phpymysql.com

Pgina 22

PHP Y MYSQL

NICANOR YERBA

Esto creara dos cookies separadas aunque MyCookie ser una matriz simple en el script.
Si se quiere definir una sola cookie con valores multiples, considerar primero el uso de
la funcin serialize() explode() en el valor.
Ntese que una cookie reemplazar a una cookie anterior que tuviese el mismo nombre
en el navegador a menos que el camino (path) o el dominio fuesen diferentes. As, para
una aplicacin de carro de la compra se podra querer mantener un contador e ir
pasndolo. P.ej.
Ejemplo #4 Ejemplo SetCookie
<?php
$count++;
setcookie("count", $count, time()+3600);
setcookie("Cart[$count]", $item, time()+3600);
?>

Puntos en los nombres de variables de entrada


Tpicamente, PHP no altera los nombres de las variables cuando se pasan a un script. De
todas formas, hay que notar que el punto no es un carcter vlido en el nombre de una
variable PHP. Por esta razn:
<?php
$varname.ext;
?>

/* nombre de variable invalido */

Lo que el intrprete ve es el nombre de una variable $varname, seguido por el operador


de concatenacin, y seguido por la prueba (es decir, una cadena sin entrecomillar que no
coincide con ninguna palabra clave o reservada conocida) 'ext'. Obviamente, no se
pretenda que fuese este el resultado.
Por esta razn, es importante hacer notar que PHP reemplazar automticamente
cualquier punto en los nombres de variables de entrada por guiones bajos (subrayados).
Determinando los tipos de variables
Dado que PHP determina los tipos de las variables y los convierte (generalmente) segn
lo necesita, no siempre resulta obvio de qu tipo es una variable dada en un momento
concreto. PHP incluye varias funciones que descubren de qu tipo es una
variable: gettype(), is_array(), is_float(), is_int(),is_object(), y is_string().

www.phpymysql.com

Pgina 23

PHP Y MYSQL

NICANOR YERBA

Operadores
Un operador es algo a lo que usted entrega uno o ms valores (o expresiones, en jerga
de programacin) y produce otro valor (de modo que la construccin misma se
convierte en una expresin). As que puede pensar sobre las funciones o construcciones
que devuelven un valor (como print) como operadores, y en aquellas que no devuelven
nada (como echo) como cualquier otra cosa.
Existen tres tipos de operadores.
En primer lugar se encuentra el operador unario, el cual opera sobre un nico valor,
por ejemplo (el operador de negacin) o ++ (el operador de incremento).
El segundo grupo se conoce como operadores binarios; este grupo contiene la mayora
de operadores que soporta PHP, y una lista se encuentra disponible ms adelante en la
seccin Precedencia de Operadores.
El tercer grupo consiste del operador ternario: ?:. ste debe ser usado para seleccionar
entre dos expresiones, en base a una tercera, en lugar de seleccionar dos sentencias o
rutas de ejecucin. Rodear las expresiones ternarias con parntesis es una muy buena
idea.
Precedencia de Operadores
La precedencia de un operador indica qu tan "cerca" se agrupan dos expresiones. Por
ejemplo, en la expresin 1 + 5 * 3, la respuesta es 16 y no 18, ya que el operador de
multiplicacin ("*") tiene una mayor precedencia que el operador de adicin ("+"). Los
parntesis pueden ser usados para marcar la precedencia, si resulta necesario. Por
ejemplo: (1 + 5) * 3 evala a 18. Si la precedencia de los operadores es la misma, se
utiliza una asociacin de izquierda a derecha.
La siguiente tabla lista la precedencia de los operadores, con aquellos de mayor
precedencia listados al comienzo de la tabla. Los operadores en la misma lnea tienen la
misma precedencia, en cuyo caso su asociatividad decide el orden para evaluarlos.
La asociatividad de izquierda quiere decir que la expresin es evaluada desde la
izquierda a la derecha, la asociatividad de derecha quiere decir lo contrario.

www.phpymysql.com

Pgina 24

PHP Y MYSQL

Asociatividad
no-asociativo new
izquierda

NICANOR YERBA
Precedencia de Operadores
Operadores
Informacin Adicional
new

no-asociativos ++ --

array()
incremento/decremento

no-asociativos ~ - (int) (float) (string) (array) (object) @ tipos


no-asociativos instanceof

tipos

derecha

lgicos

izquierda

*/%

aritmtica

izquierda

+-.

aritmtica, y cadena

izquierda

<< >>

manejo de bits

no-asociativos < <= > >=

comparacin

no-asociativos == != === !==

comparacin

izquierda

&

manejo de bits, y referencias

izquierda

manejo de bits

izquierda

manejo de bits

izquierda

&&

lgicos

izquierda

||

lgicos

izquierda

?:

ternario

derecha

= += -= *= /= .= %= &= |= ^= <<= >>= asignacin

izquierda

and

lgicos

izquierda

xor

lgicos

izquierda

or

lgicos

izquierda

varios usos

Ejemplo #1 Asociatividad
<?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2
$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
?>

Use parntesis para incrementar la legibilidad del cdigo.


Nota: Aunque = tiene una menor precedencia que la mayora de los dems operadores,
PHP aun permite expresiones similares a la siguiente: if (!$a = foo()), en cuyo caso el
valor de retorno de foo() va a dar a $a.

www.phpymysql.com

Pgina 25

PHP Y MYSQL

NICANOR YERBA

Operadores de Aritmtica
Recuerda la aritmtica bsica del colegio? stos operadores funcionan tal como
aqullos.
Operadores de Aritmtica
Ejemplo
$a + $b
$a - $b
$a * $b
$a / $b
$a % $b

Nombre
Adicin
Substraccin
Multiplicacin
Divisin
Mdulo

Resultado
Suma de $a y $b.
Diferencia entre $a y $b.
Producto de $a y $b.
Cociente de $a y $b.
Resto de $a dividido por $b.

El operador de divisin ("/") devuelve un valor flotante a menos que los dos operandos
sean enteros (o cadenas que son convertidas a enteros) y los nmeros sean divisibles sin
residuos, en cuyo caso se devuelve un valor entero.
Ejemplo #1.- Suma
<?php
//suma
$a = 100;
$b = 30;
$c = 20;
$suma = $a + $b + $c;
echo "Total = $suma";
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 26

PHP Y MYSQL

NICANOR YERBA

Ejemplo #2.- Resta


<?php
//resta
$a = 100;
$b = 50;
$resta = $a - $b;
echo "Total = $resta";
?>

Ejemplo #3.- Multiplicacin


<?php
//Multiplicacin
$a = 100;
$b = 10;
$Multiplicacion = $a * $b;
echo "Total = $Multiplicacion";
?>

www.phpymysql.com

Pgina 27

PHP Y MYSQL

NICANOR YERBA

Ejemplo #4.- Divisin


<?php
//Division
$a = 50;
$b = 10;
$Division = $a / $b;
echo "Total = $Division";
?>

Ejemplo #5.- Mdulo Resto


<?php
//Modulo
$a = 100;
$b = 10;
$Modulo = $a % $b;
echo "Total = $Modulo";
?>

www.phpymysql.com

Pgina 28

PHP Y MYSQL

NICANOR YERBA

Operadores de aritmtica con formularios


Para trabajar con los Operadores Aritmticos de una manera mas dinmica le
implementaremos campos de formularios donde ingresaremos los datos y estos sern
procesados por PHP.
Ejemplo de Suma con formulario utilizando mtodo post:
<html>
<body>
<form name="form1" action="suma_formulario.php" method="post">
Variable a: <input type="text" name="variablea"><br />
Variable b: <input type="text" name="variableb"><br />
<input type="submit" name="submit" value="Sumar">
</form>
<br /><br /><br />
<?php
$a =$_POST['variablea'];
$b =$_POST['variableb'];
$suma = $a + $b;
echo "Total $suma";
?>
</body>
</html>

www.phpymysql.com

Pgina 29

PHP Y MYSQL

NICANOR YERBA

Ejemplo de Resta con formulario utilizando mtodo post:

<html>
<body>
<form name="form1" action="resta_formulario.php" method="post">
Variable a: <input type="text" name="variablea"><br />
Variable b: <input type="text" name="variableb"><br />
<input type="submit" name="submit" value="Sumar">
</form>
<br /><br /><br />
<?php
$a =$_POST['variablea'];
$b =$_POST['variableb'];
$resta = $a - $b;
echo "Total: $resta";
?>
</body>
</html>

www.phpymysql.com

Pgina 30

PHP Y MYSQL

NICANOR YERBA

Ejemplo de Multiplicar con formulario utilizando mtodo post:


<html>
<body>
<form name="form1" action="multiplicar_formulario.php" method="post">
Variable a: <input type="text" name="variablea"><br />
Variable b: <input type="text" name="variableb"><br />
<input type="submit" name="submit" value="Sumar">
</form>
<br /><br /><br />
<?php
$a =$_POST['variablea'];
$b =$_POST['variableb'];
$multiplicar = $a * $b;
echo "Total: $multiplicar";
?>
</body>
</html>

www.phpymysql.com

Pgina 31

PHP Y MYSQL

NICANOR YERBA

Ejemplo de Dividir con formulario utilizando mtodo post:


<html>
<body>
<form name="form1" action="dividir_formulario.php" method="post">
Variable a: <input type="text" name="variablea"><br />
Variable b: <input type="text" name="variableb"><br />
<input type="submit" name="submit" value="Sumar">
</form>
<br /><br /><br />
<?php
$a =$_POST['variablea'];
$b =$_POST['variableb'];
$dividir = $a / $b;
echo "Total: $dividir";
?>
</body>
</html>

www.phpymysql.com

Pgina 32

PHP Y MYSQL

NICANOR YERBA

Operadores de Asignacin
El operador bsico de asignacin es "=". A primera vista, usted podra pensar en l
como "es igual a". No lo haga. Lo que quiere decir en realidad es que el operando de la
izquierda recibe el valor de la expresin a la derecha (es decir, "se define a").
El valor de una expresin de asignacin es el valor que se asigna. Es decir, el valor de
"$a = 3" es 3. Esto le permite hacer una que otra cosa curiosa:
<?php
$a = ($b = 4) + 5; // $a es igual a 9 ahora, y $b ha sido defini
do a 4.
?>

En conjunto con el operador bsico de asignacin, existen "operadores combinados"


para todos los operadores de aritmtica binaria, unin de matrices y de cadenas, que le
permiten usar un valor en una expresin y luego definir su valor como el resultado de
esa expresin. Por ejemplo:
<?php
$a = 3;
$a += 5; // define $a como 8, como si hubisemos dicho: $a = $a
+ 5;
$b = "Hola ";
$b .= "a todos!"; // define $b como "Hola a todos!", tal como $
b = $b . "a todos!";
?>

Nota que la asignacin copia la variable original en la nueva (asignacin por valor), de
modo que cualquier cambio a una no afecta a la otra. Esto puede resultar de importancia
si necesita copiar algo como una matriz de gran tamao al interior de un ciclo reducido.
A partir de PHP4, es soportada la asignacin por referencia, usando la sintaxis $var =
&$otra_var;, pero esto no es posible en PHP3. 'Asignacin por referencia' quiere decir
que ambas variables terminan apuntando a los mismos datos y que nada es realmente
copiado. Para aprender ms sobre las referencias, por favor refirase a las Referencias
explicadas. A partir de PHP 5 los objetos son asignados por referencia a menos que
explcitamente se diga lo contrario con la nueva palabra clave clone.

www.phpymysql.com

Pgina 33

PHP Y MYSQL

NICANOR YERBA

Operadores de Comparacin
Los operadores de comparacin, como su nombre indica, le permiten comparar dos
valores. Puede que tambin se encuentre interesado en consultar las tablas de
comparacin de tipos, ya que stas muestran ejemplos de varios tipos de comparaciones
relacionadas con tipos.
Operadores de Comparacin
Ejemplo

Nombre

Resultado

$a == $b Igual

TRUE si $a es igual a $b.

$a ===
$b

Idntico

TRUE si $a es igual a $b, y son del mismo tipo. (A partir


de PHP 4)

$a != $b

Diferente

TRUE si $a no es igual a $b.

$a <> $b Diferente

TRUE si $a no es igual a $b.

$a !== $b No idnticos

TRUE si $a no es igual a $b, o si no son del mismo tipo. (A


partir de PHP 4)

$a < $b

Menor que

TRUE si $a es escrictamente menor que $b.

$a > $b

Mayor que

TRUE si $a es estrictamente mayor que $b.

$a <= $b

Menor o igual
que

TRUE si $a es menor o igual que $b.

$a >= $b

Mayor o igual
que

TRUE si $a es mayor o igual que $b.

Si compara un entero con una cadena, la cadena es convertida a un nmero. Si compara


dos cadenas numricas, ellas son comparadas como enteros. Estas reglas tambin se
aplican a la sentencia switch.
<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("1" == "1e0"); // 1 == 1 -> true
switch ("a") {
case 0:
echo "0";
break;

www.phpymysql.com

Pgina 34

PHP Y MYSQL

NICANOR YERBA

case "a": // nunca se ejecuta ya que "a" ya ha coincidido con 0


echo "a";
break;
}
?>

Para varios tipos, la comparacin se realiza de acuerdo con la siguient tabla (en orden).
Comparacin con Varios Tipos
Tipo del Operando 1

Tipo del Operando 2

Resultado

null ostring

string

Convertir NULL a "", comparacin


numrica o de lxico

bool o null

cualquiera

Convertir a bool, FALSE < TRUE

object

Las clases internas pueden definir su


propia comparacin, clases diferentes
son incomparables, la misma clase comparan propiedades en la misma
forma que las matrices (PHP 4), PHP
5 tiene su propia explicacin

object

string,resourceo number string,resourceo number

Traducir las cadenas y recursos a


nmeros, matemtica usual

array

array

Una matriz con menos elementos es


menor, si una clave del operando 1
no se encuentra en el operando 2
entonces las matrices son
incomparables, de otra forma comparar valor por valor (vea el
siguiente ejemplo)

array

cualquiera

array es siempre mayor

object

cualquiera

object es siempre mayor

www.phpymysql.com

Pgina 35

PHP Y MYSQL

NICANOR YERBA

Example #1 Transcripcin de la comparacin de matrices estndar


<?php
// Las matrices son comparadas de esta forma con los operad
ores de comparacin estndar
function comparacion_matrices_estandar($op1, $op2)
{
if (count($op1) < count($op2)) {
return -1; // $op1 < $op2
} elseif (count($op1) > count($op2)) {
return 1; // $op1 > $op2
}
foreach ($op1 as $clave => $val) {
if (!array_key_exists($clave, $op2)) {
return null; // incomparable
} elseif ($val < $op2[$clave]) {
return -1;
} elseif ($val > $op2[$clave]) {
return 1;
}
}
return 0; // $op1 == $op2
}
?>

www.phpymysql.com

Pgina 36

PHP Y MYSQL

NICANOR YERBA

Operador Ternario
Otro operador condicional es el operador "?:" (o ternario).
Example #2 Asignacin de un valor predeterminado
<?php
// Ejemplo de uso de: el Operador Ternario
$accion = (empty($_POST['accion'])) ? 'predeterminada' : $_POST[
'accion'];
// La lnea anterior es idntica a esta sentencia if/else
if (empty($_POST['accion'])) {
$accion = 'predeterminada';
} else {
$accion = $_POST['accion'];
}
?>

La expresin (expr1) ? (expr2) : (expr3) evala a expr2 si expr1 evala a TRUE,


y expr3 si expr1 evala aFALSE.
Nota: Por favor note que el operador ternario es una sentencia, y que no evala a una
variable, sino al resultado de una sentencia. Es importante saber esto si se desea
devolver una variable por referencia. La sentencia return $var == 42 ? $a : $b; en una
funcin con retorno-por-referencia no funcionar por lo que se ha mencionado y una
advertencia es generada en versiones posteriores de PHP.
Nota: Es recomendable que evite "apilar" las expresiones ternarias. El comportamiente
de PHP cuando se usa ms de un operador ternario al interior de una sentencia no es
obvio:
Ejemplo #3 Comportamiento Ternario No-Obvio
<?php
// a primera vista, lo siguiente parece imprimir 'true'
echo (true?'true':false?'t':'f');
// sin embargo, la salida real de la lnea anterior es 't'
// esto se debe a que las expresiones ternarias son evaluadas de
izquierda a
// derecha
// la siguiente es una versin ms obvia del cdigo presentado a
nteriormente
echo ((true ? 'true' : 'false') ? 't' : 'f');
// aqu puede ver que la primera expresin es evaluada como 'tru
e', la cual
?>

www.phpymysql.com

Pgina 37

PHP Y MYSQL

NICANOR YERBA

Operadores de Control de Errores


PHP ofrece soporte para un operador de control de errores: el signo de arroba (@).
Cuando es colocado al comienzo de una expresin en PHP, cualquier mensaje de error
que pudiera generarse a causa de esa expresin ser ignorado.
Si la caracterstica track_errors est habilitada, cualquier mensaje de error generado por
la expresin ser almacenado en la variable $php_errormsg. La variable ser sobrescrita
en cada instancia de error, as que realice sus chequeos de forma temprana si quiere
usarla.
<?php
/* Error intencional de archivo */
$mi_archivo = @file ('archivo_que_no_existe') or
die ("La apertura de archivo ha fallado: el error fue '$php_
errormsg'");
// esto funciona con cualquier expresin, no solo con funciones:
$valor = @$cache[$llave];
// no producir una anotacin si el ndice $llave no existe.
?>

Como resultado tendremos lo siguiente:

Nota: El operador @ trabaja slo sobre expresiones. Una simple regla de oro es: si
usted puede tomar el valor de algo, entonces puede usar el operador @ sobre ese algo.
Por ejemplo, puede usarlo al inicio de variables, llamadas a funciones y
sencencias include(), constantes, y as sucesivamente. No puede usarlo sobre
definiciones de funcin o clase, ni sobre estructuras condicionales como if y foreach, y
as sucesivamente.

www.phpymysql.com

Pgina 38

PHP Y MYSQL

NICANOR YERBA

Operadores de ejecucin
PHP soporta un operador de ejecucin: las comillas invertidas (``). Note que no se trata
de comillas sencillas! PHP intentar ejecutar el contenido entre las comillas como si se
tratara de un comando del intrprete de comandos; su salida ser devuelta (es decir, no
ser simplemente volcada como salida; puede ser asignada a una variable). El uso del
operador de comillas invertidas es idntico al deshell_exec().
<?php
$salida = `ls -al`;
echo "<pre>$salida</pre>";
?>

Note: El operador de comillas invertidas es deshabilitado cuando se encuentra


activo safe mode o cuando se deshabilita shell_exec().

Operadores de Incremento/Decremento
PHP ofrece soporte de operadores de pre- y post-incremento y decremento, estilo-C.
Nota: Los operadores de incremento/decremento no afectan a los valores booleanos.
Decrementar valores NULL tampoco tiene efecto, aunque incrementarlos resulta en 1.

Ejemplo

Operadores de Incremento/decremento
Nombre
Efecto

++$a

Pre-incremento Incrementa $a en uno, y luego devuelve $a.

$a++

Post-incremento Devuelve $a, y luego incrementa $a en uno.

--$a

Pre-decremento Decrementa $a en uno, luego devuelve $a.

$a--

Post-decremento Devuelve $a, luego decrementa $a en uno.

www.phpymysql.com

Pgina 39

PHP Y MYSQL

NICANOR YERBA

Ejemplo de un script sencillo:


<?php
echo "<h3>Postincremento</h3>";
$a = 5;
echo "Debe ser 5: " . $a++ . "<br />\n";
echo "Debe ser 6: " . $a . "<br />\n";
echo
$a =
echo
echo

"<h3>Preincremento</h3>";
5;
"Debe ser 6: " . ++$a . "<br />\n";
"Debe ser 6: " . $a . "<br />\n";

echo
$a =
echo
echo

"<h3>Postdecremento</h3>";
5;
"Debe ser 5: " . $a-- . "<br />\n";
"Debe ser 4: " . $a . "<br />\n";

echo
$a =
echo
echo
?>

"<h3>Predecremento</h3>";
5;
"Debe ser 4: " . --$a . "<br />\n";
"Debe ser 4: " . $a . "<br />\n";

El resultado del ejemplo seria As:

www.phpymysql.com

Pgina 40

PHP Y MYSQL

NICANOR YERBA

PHP sigue la convencin de Perl cuando trabaja con operaciones aritmticas sobre
variables de carcter, y no la convencin de C. Por ejemplo, en Perl 'Z'+1 se convierte
en 'AA', mientras que en C 'Z'+1 se convierte en '[' ( ord('Z') == 90, ord('[') == 91). Note
que las variables de carcter pueden ser incrementadas pero no decrementadas, y aun as
solo son soportados los caracteres ASCII planos (a-z y A-Z).
Example #1 Operaciones Aritmticas sobre Variables de Carcter
<?php
$i = 'W';
for ($n=0; $n<6; $n++) {
echo ++$i . "\n";
}
?>

El resultado del ejemplo seria As:

www.phpymysql.com

Pgina 41

PHP Y MYSQL

NICANOR YERBA

Operadores de Lgica

Operadores de Lgica
Ejemplo

Nombre

Resultado

$a and $b Y

TRUE si tanto $a como $b son TRUE.

$a or $b

TRUE si cualquiera de $a o $b es TRUE.

$a xor $b O exclusivo (Xor) TRUE si $a o $b es TRUE, pero no ambos.


! $a

No

TRUE si $a no es TRUE.

$a && $b Y

TRUE si tanto $a como $b son TRUE.

$a || $b

TRUE si cualquiera de $a o $b es TRUE.

La razn para tener las dos variaciones diferentes de los operadores "and" y "or" es que
ellos operan con precedencias diferentes. (Vea Precedencia de Operadores.)
Ejemplo #1 Ilustracin de los operadores lgicos
<?php
// foo() nunca ser llamada ya que esos operadores trabajan en m
odo corto-circuito
$a = (false && foo());
$b = (true || foo());
$c = (false and foo());
$d = (true or foo());
// "||" tiene una precedencia mayor que "or"
$e = false || true; // $e ser definido como (false || true) lo
cual es true
$f = false or true; // $f ser definido como false
var_dump($e, $f);
// "&&" tiene una precedencia mayor que "and"
$g = true && false; // $g ser definido como (true && false) lo
que es false
$h = true and false; // $h ser definido como true
var_dump($g, $h);

www.phpymysql.com

Pgina 42

PHP Y MYSQL

NICANOR YERBA

El resultado del ejemplo seria As:

www.phpymysql.com

Pgina 43

PHP Y MYSQL

NICANOR YERBA

Operadores de Cadena
Existen dos operadores para datos tipo string. El primero es el operador de
concatenacin ('.'), el cual devuelve el resultado de concatenar sus argumentas a lado
derecho e izquierdo. El segundo es el operador de asignacin sobre concatenacin ('.='),
el cual adiciona el argumento del lado derecho al argumento en el lado izquierdo. Por
favor consulte Operadores de Asignacin para ms informacin.
<?php
$a = "Hola ";
$b = $a . "Mundo! "; // ahora $b contiene "Hola Mundo!"
echo $b;
$a = "Hola ";
$a .= "Mundo!";
echo $a;
?>

www.phpymysql.com

// ahora $a contiene "Hola Mundo!"

Pgina 44

PHP Y MYSQL

NICANOR YERBA

Operadores de Matrices

Operadores de Matrices
Ejemplo
$a + $b

Nombre
Unin

Resultado
Unin de $a y $b.

$a == $b Igualdad

TRUE si $a y $b tienen las mismas parejas llave/valor.

$a ===
$b

Identidad

TRUE si $a y $b tienen las mismas parejas llave/valor en el


mismo orden y de los mismos tipos.

$a != $b

Noigualdad

TRUE si $a no es igual a $b.

$a <> $b

Noigualdad

TRUE si $a no es igual a $b.

$a !== $b

Noidentidad

TRUE si $a no es idntico a $b.

El operador + adiciona elementos de las claves restantes de la matriz del lado derecho a
aquella al lado izquierdo, al mismo tiempo que cualquier llave duplicada NO es
sobrescrita.

www.phpymysql.com

Pgina 45

PHP Y MYSQL

NICANOR YERBA

<?php
$a = array("a" => "manzana", "b" => "banano");
$b = array("a" => "pera", "b" => "fresa", "c" => "cereza");
$c = $a + $b; // Unin de $a y $b
echo "Unin de \$a y \$b: \n";
var_dump($c);
$c = $b + $a; // Unin de $b y $a
echo "Unin de \$b y \$a: \n";
var_dump($c);
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 46

PHP Y MYSQL

NICANOR YERBA

Comparacin de matrices
<?php
$a = array("manzana", "banano");
$b = array(1 => "banano", "0" => "manzana");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>

www.phpymysql.com

Pgina 47

PHP Y MYSQL

NICANOR YERBA

Estructuras de Control
Todo script PHP se compone de una serie de sentencias. Una sentencia puede ser una
asignacin, una llamada a funcin, un bucle, una sentencia condicional e incluso una
sentencia que no haga nada (una sentencia vaca) Las sentencias normalmente acaban
con punto y coma Adems, las sentencias se pueden agrupar en grupos de sentencias
encapsulando un grupo de sentencias con llaves Un grupo de sentencias es tambin una
sentencia En este captulo se describen los diferentes tipos de sentencias.

if
La construccin if es una de las ms importantes caractersticas de muchos lenguajes,
incluido PHP. Permite la ejecucin condicional de fragmentos de cdigo. PHP
caracteriza una estructura if que es similar a la de C:
<?php
if (expr)
sentencia
?>

Como se describe en la seccin sobre expresiones, expr se evala a su valor condicional


(boolean). Siexpr se evala como TRUE, PHP ejecutar la sentencia, y si se evala
como FALSE - la ignorar. Se puede encontrar ms informacin sobre los valores
evaluados como FALSE en la seccin Convirtiendo a un valor condicional (boolean).
El siguiente ejemplo mostrara a es mayor que b si $a fuera mayor que $b:
<?php
if ($a > $b)
echo "a es mayor que b";
?>

A menudo, se desea tener ms de una sentencia ejecutada de forma condicional. Por


supuesto, no hay necesidad de encerrar cada sentencia con una clusula if. En vez de
eso, se pueden agrupar varias sentencias en un grupo de sentencias. Por ejemplo, este
cdigo mostrara a es mayor que b si $a fuera mayor que $b, entonces que emprima el
variable $a:

www.phpymysql.com

Pgina 48

PHP Y MYSQL

NICANOR YERBA

<?php
$a= 10;
$b= 5;
if ($a > $b) {
echo "a es mayor que b";
}
?>

Como resultado tendremos lo siguiente:

Las sentencias if se pueden anidar indefinidamente dentro de otras sentencias if, lo cual
proporciona una flexibilidad completa para ejecuciones condicionales en las diferentes
partes de tu programa.

www.phpymysql.com

Pgina 49

PHP Y MYSQL

NICANOR YERBA

Else
A menudo queremos ejecutar una sentencia si se cumple una cierta condicion, y una
sentencia distinta si la condicin no se cumple. Esto es para lo que
sirve else. else extiende una sentencia if para ejecutar una sentencia en caso de que la
expresin en la sentencia if se evale como FALSE.
Por ejemplo, el siguiente cdigo mostrara a es mayor que b si $a fuera mayor que $b,
y a NO es mayor que b en cualquier otro caso:
<?php
$a = 20;
$b = 10;
if ($a > $b) {
print "a es mayor que b";
} else {
print "a NO es mayor que b";
}
?>

Como resultado tendremos lo siguiente:

La sentencia else se ejecuta solamente si la expresin if se evala como FALSE, y si


hubiera alguna expresin elseif - slo si se evaluaron tambin a FALSE .

www.phpymysql.com

Pgina 50

PHP Y MYSQL

NICANOR YERBA

Elseif
elseif, como su nombre sugiere, es una combinacin de if y else. Como else, extiende
una sentencia if para ejecutar una sentencia diferente en caso de que la
expresin if original se evala como FALSE. No obstante, a diferencia de else,
ejecutar esa expresin alternativa solamente si la expresin condicionalelseif se evala
como TRUE. Por ejemplo, el siguiente cdigo mostrara a es mayor que b, a es igual a
b o a es menor que b:
<?php
$a = 20;
$b = 10;
if ($a > $b)
print "a
} elseif ($a
print "a
} else {
print "a
}
?>

{
es mayor que b";
== $b) {
es igual que b";
es menor que b";

Puede haber varios elseifs dentro de la misma sentencia if. La primera


expresin elseif (si hay alguna) que se evale como TRUE se ejecutara. En PHP,
tambin se puede escribir 'else if' (con dos palabras) y el comportamiento sera idntico
al de un 'elseif' (una sola palabra). El significado sintctico es ligeramente distinto (si
estas familiarizado con C, es el mismo comportamiento) pero la lnea bsica es que
ambos resultaran tener exactamente el mismo comportamiento.
La sentencia elseif se ejecuta slo si la expresin if precedente y cualquier
expresin elseif precedente se evalan como FALSE, y la expresin elseif actual se
evala como TRUE.

www.phpymysql.com

Pgina 51

PHP Y MYSQL

NICANOR YERBA

Ejemplos con if, else y elseif:


Estas sentencias son muy usadas cuando se programa en php, a continuacin se
explicar ejemplos con estas sentencias y formularios con mtodo POST.
Ejemplo 1: Buscando un nombre.
<html>
<body>
<form name="form1" action="buscando_un_nombre.php"
method="post">
Ingrese su Nombre: <input type="text" name="nombre"><br />
<input type="submit" name="submit" value="Buscar">
</form>
<br /><br /><br />
<?php
$nombre =$_POST['nombre'];
if($nombre == "nicanor")
{
echo "Bienvenido: $nombre";
}
else
{
echo "Usuario no registrado";
}
?>
</body>
</html>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 52

PHP Y MYSQL

NICANOR YERBA

Ejemplo 2: Buscando varios nombres.


<html>
<body>
<form name="form1" action="buscando_varios_nombres.php"
method="post">
Ingrese su Nombre: <input type="text" name="nombre"><br />
<input type="submit" name="submit" value="Buscar">
</form>
<br /><br /><br />
<?php
$nombre =$_POST['nombre'];
if($nombre == "nicanor")
{
echo "Bienvenido: $nombre";
}
elseif($nombre == "raul")
{
echo "Bienvenido: $nombre";
}
elseif($nombre == "mercedes")
{
echo "Bienvenido: $nombre";
}
elseif($nombre == "nancy")
{
echo "Bienvenido: $nombre";
}
else
{
echo "Usuario no registrado";
}
?>
</body>
</html>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 53

PHP Y MYSQL

NICANOR YERBA

Ejemplo 3: Buscando varios nombres utilizando OR.


<html>
<body>
<form name="form1" action="buscando_varios_nombres.php"
method="post">
Ingrese su Nombre: <input type="text" name="nombre"><br />
<input type="submit" name="submit" value="Buscar">
</form>
<br /><br /><br />
<?php
$nombre =$_POST['nombre'];
if($nombre=="nicanor" or $nombre=="raul" or $nombre=="mercedes"
or $nombre=="nancy")
{
echo "Bienvenido $nombre";
}
else
{
echo "Usuario no registrado";
}
?>
</body>
</html>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 54

PHP Y MYSQL

NICANOR YERBA

Ejemplo 4: Comparando usuario y password utilizando AND.


<html>
<body>
<form name="form1" action="usuario_password_and.php"
method="post">
Ingrese su Nombre: <input type="text" name="usuario"><br />
Ingrese su Password: <input type="password"
name="password"><br />
<input type="submit" name="submit" value="Buscar">
</form>
<br /><br /><br />
<?php
$usuario =$_POST['usuario'];
$password =$_POST['password'];
if($usuario == "nicanor" and $password == "0123")
{
echo "Bienvenido: $usuario";
}
else
{
echo "Usuario no Registrado";
}
?>
</body>
</html>

www.phpymysql.com

Pgina 55

PHP Y MYSQL

NICANOR YERBA

Ejemplo 5: if Comparando un nombre y edad.


<html>
<body>
<form name="form1" action="comparacion_nombre_edad.php"
method="post">
Ingrese su Nombre: <input type="text" name="nombre"><br />
Ingrese su edad: <input type="text" name="edad"><br />
<input type="submit" name="submit" value="Buscar">
</form>
<br /><br /><br />
<?php
$nombre =$_POST['nombre'];
$edad =$_POST['edad'];
if($nombre == "nicanor")
{
echo "Bienvenido: $nombre ";
if($edad == "30")
{
echo " Edad correcta";
}
else
{
echo "Edad incorrecta!!";
}
}
else
{
echo " Usuario no Registrado";
}
?>
</body>
</html>

www.phpymysql.com

Pgina 56

PHP Y MYSQL

NICANOR YERBA

While
Los bucles while son los tipos de bucle ms simples en PHP. Se comportan como su
contrapartida en C. La forma bsica de una sentencia while es:
While (expr) sentencia

El significado de una sentencia while es simple. Le dice a PHP que ejecute la(s)
sentencia(s) anidada(s) repetidamente, mientras la expresin while se evale
como TRUE. El valor de la expresin es comprobado cada vez al principio del bucle,
as que incluso si este valor cambia durante la ejecucin de la(s) sentencia(s) anidada(s),
la ejecucin no parar hasta el fin de la iteracin (cada vez que PHP ejecuta las
sentencias en el bucle es una iteracin). A veces, si la expresin while se evala
como FALSE desde el principio de todo, la(s) sentencia(s) anidada(s) no se ejecutarn
ni siquiera una vez.
Como con la sentencia if, se pueden agrupar mltiples sentencias dentro del mismo
bucle while encerrando un grupo de sentencias con llaves, o usando la sintaxis
alternativa:
While (expr) : sentencia endwhile;

Los siguientes ejemplos son idnticos, y ambos imprimen nmeros del 1 al 10:
Ejemplo #1:
<?php
$i = 1;
while ($i <= 10) {
print $i++; /* el valor impreso sera
$i antes del incremento
(post-incremento) */
}
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 57

PHP Y MYSQL

NICANOR YERBA

Ejemplo #2:

<?php
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 58

PHP Y MYSQL

NICANOR YERBA

do..while
Los bucles do..while son muy similares a los bucles while, excepto que las condiciones
se comprueban al final de cada iteracin en vez de al principio. La principal diferencia
frente a los bucles regulares while es que se garantiza la ejecucin de la primera
iteracin de un bucle do..while (la condicin se comprueba slo al final de la iteracin),
mientras que puede no ser necesariamente ejecutada con un bucle while regular (la
condicin se comprueba al principio de cada iteracin, si esta se evala
como FALSE desde el principio la ejecucin del bucle finalizar inmediatamente).
Hay una sola sintaxis para los bucles do..while:
<?php
$i = 0;
do {
print $i;
} while ($i>0);
?>

El bucle de arriba se ejecutara exactamente una sola vez, despus de la primera


iteracin, cuando la condicin se comprueba, se evala como FALSE ($i no es ms
grande que 0) y la ejecucin del bucle finaliza.
Los usuarios avanzados de C pueden estar familiarizados con un uso distinto del
bucle do..while, para permitir parar la ejecucin en medio de los bloques de cdigo,
encapsulndolos con do..while(0), y usando la sentencia break. El siguiente fragmento
de cdigo demuestra esto:

www.phpymysql.com

Pgina 59

PHP Y MYSQL

NICANOR YERBA

<?php
do {
if ($i < 5) {
print "i no es lo suficientemente grande";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
print "i es correcto";
} while(0);
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 60

PHP Y MYSQL

NICANOR YERBA

For
Los bucles for son los bucles ms complejos en PHP. Se comportan como su
contrapartida en C. La sintaxis de un bucle fores:
for (expr1; expr2; expr3) sentencia

La primera expresin (expr1) se evala (ejecuta) incondicionalmente una vez al


principio del bucle.
Al comienzo de cada iteracin, se evala expr2 . Si se evala como TRUE, el bucle
contina y las sentencias anidadas se ejecutan. Si se evala como FALSE, la ejecucin
del bucle finaliza.
Al final de cada iteracin, se evala (ejecuta) expr3.
Cada una de las expresiones puede estar vaca. Que expr2 est vaca significa que el
bucle debera correr indefinidamente (PHP implcitamente lo considera como TRUE, al
igual que C). Esto puede que no sea tan intil como se podra pensar, puesto que a
menudo se quiere salir de un bucle usando una sentencia break condicional en vez de
usar la condicin de for.
Considera los siguientes ejemplos. Todos ellos muestran nmeros del 1 al 10:
Ejemplo #1:
<?php
for ($i = 1; $i <= 10; $i++) {
print $i;
}
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 61

PHP Y MYSQL

NICANOR YERBA

Ejemplo #2:
<?php
for ($i = 1;;$i++) {
if ($i > 10) {
break;
}
print $i;
}
?>

Como resultado tendremos lo siguiente:

Ejemplo #3:
<?php
$i = 1;
for (;;) {
if ($i > 10) {
break;
}
print $i;
$i++;
}
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 62

PHP Y MYSQL

NICANOR YERBA

Ejemplo #4:

<?php
for ($i = 1; $i <= 10; print $i, $i++) ;
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 63

PHP Y MYSQL

NICANOR YERBA

break
break nos sirve para detener el bucle, es decir, en el caso que no queramos seguir
ejecutando el resto de las iteraciones de bucle. Esto es muy til para salir del recorrido
de un array, por ejemplo:
<?php
$count = 0;
$dias = array('Domingo', 'Lunes', 'Martes', 'Miercoles',
'Jueves', 'Viernes', 'Sabado');
foreach ($dias as $elemento) {
if (++$count == 3) {
print "Estos son los dos primeros dias de la semana<br>";
break;
}
print "$elemento<br>\n";
}
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 64

PHP Y MYSQL

NICANOR YERBA

continue
continue se usa dentro de la estructura del bucle para saltar el resto de la iteracin actual
del bucle y continuar la ejecucin al comienzo de la siguiente iteracin.
continue accepta un parmetro opcional, el cual determina cuantos niveles (bluces) hay
que saltar antes de continuar con la ejecucin.
<?php
$count = 0;
$dias = array('Domingo', 'Lunes', 'Martes', 'Miercoles',
'Jueves', 'Viernes', 'Sabado');
foreach ($dias as $elemento) {
if (++$count == 3) {
print "Me estoy saltando el tercer dia de la semana<br>";
continue;
}
print "$elemento<br>\n";
}
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 65

PHP Y MYSQL

NICANOR YERBA

Switch
Tambin existen ocasiones o programas donde se exige evaluar muchas condiciones a la
vez, en estos casos o se usa una condicin compuesta muy grande o se debe intentar
convertir el problema a uno que se pueda resolver usando la instruccin switch();

La instruccin switch() es una instruccin de decisin mltiple, donde el compilador


prueba o busca el valor contenido en una variable contra una lista de constantes ints o
chars, cuando el computador encuentra el valor de igualdad entre variable y constante,
entonces ejecuta el grupo de instrucciones asociados a dicha constante, si no encuentra
el valor de igualdad entre variable y constante, entonces ejecuta un grupo de
instrucciones asociados a un default, aunque este ultimo es opcional.
El formato de esta instruccin es el siguiente;
capturar o asignar variable de condicin;
switch(var int o char)
{
case const1: instruccion(es);
break;
case const2: instruccion(es);
break;
case const3: instruccion(es);
break;
default: instruccion(es);
};

Mejor un ejemplo practico:


<form action="switch.php" method="post" >
DAME UNA LETRA:<input type="text" name="letra" value="<? echo
$letra ?>" /><br />
<input type="submit" name="ok" value="evento1" /><br />
</form>
<?php
if ($ok == "evento1") {
// area de switch()
switch($letra) {
case 'a':
echo "<br>aguila";
break;
case 'b':case'B':
echo "<br>burro";
break;
case 'c':
echo "<br>caballo ";
echo "<br>camello ";
break;

www.phpymysql.com

Pgina 66

PHP Y MYSQL

NICANOR YERBA

default: echo" <br />no hay ";


};
};
?>

Como resultado tendremos lo siguiente:

Notas:
1.- Se pueden usar cualquier tipo de dato como variable de condicin excepto
decimales???.
2.- Las constantes que estamos buscando y comparando son de tipo char, por eso se
deben encerrar entre apostrofes ( ').
3.- Si se quiere resolver el problema de maysculas o minsculas en el teclado, observar
que se usan dos case, pero con un solo break;
6.- Recordar que switch () que cuando se trabaje con constantes y variables de tipo
entero, en los case poner la constante numrica, sin apostrofes, es decir por ejemplo:
case 5: instrucciones; break;
En particular, instrucciones de tipo switch() se usan para construir programas de
seleccin de mens, donde al usuario se le plantean dos o tres problemas distintos y el
propio usuario seleccionaba cual de ellos se ejecuta

www.phpymysql.com

Pgina 67

PHP Y MYSQL

NICANOR YERBA

Require()
La sentencia require() se sustituye a s misma con el archivo especificado, tal y como
funciona la directiva #include de C.
Un punto importante sobre su funcionamiento es que cuando un archivo se incluye
con include() o se requiere con require()), el intrprete sale del modo PHP y entra en
modo HTML al principio del archivo referenciado, y vuelve de nuevo al modo PHP al
final. Por esta razn, cualquier cdigo dentro del archivo referenciado que debiera ser
ejecutado como cdigo PHP debe ser encerrado dentro de etiquetas vlidas de comienzo
y fin de PHP.
require() no es en realidad una funcin de PHP; es ms una construccin del lenguaje.
Est sujeta a algunas reglas distintas de las de funciones. Por ejemplo, require() no esta
sujeto a ninguna estructura de control contenedora. Por otro lado, no devuelve ningn
valor; intentar leer un valor de retorno de una llamada a un require() resulta en un error
del intrprete.
A diferencia de include(), require() siempre leer el archivo referenciado, incluso si la
lnea en que est no se ejecuta nunca. Si se quiere incluir condicionalmente un archivo,
se usa include(). La sentencia conditional no afecta a require(). No obstante, si la lnea
en la cual aparece el require() no se ejecuta, tampoco se ejecutar el cdigo del archivo
referenciado.
De forma similar, las estructuras de bucle no afectan la conducta de require(). Aunque
el cdigo contenido en el archivo referenciado est todava sujeto al bucle, el
propio require() slo ocurre una vez.
Esto significa que no se puede poner una sentencia require() dentro de una estructura
de bucle y esperar que incluya el contenido de un archivo distinto en cada iteracin.
Para hacer esto, usa una sentencia include().
Ejemplo:
Creamos 2 pginas con el siguiente cdigo:
Require_1.php
<?php
$nombre = "Nicanor";
$pais = "Chile";
?>

www.phpymysql.com

Pgina 68

PHP Y MYSQL

NICANOR YERBA

Require.php
<?php
require("Require_1.php");
echo"Hola $nombre. Tu eres de $pais";
?>

Como resultado de Require_1.php y Require.php tendremos lo siguiente:

www.phpymysql.com

Pgina 69

PHP Y MYSQL

NICANOR YERBA

include()
La sentencia include() incluye y evala el archivo especificado.
Esta documentacin tambin se aplica a la funcin require(). require() y include() son
idnticas en todos los aspectos excepto en el modo de actuar ante un
error. include() produce un Warning mientras que require() produce un Error Fatal. En
otras palabras, no dude en utilizar require() si quiere que un fichero no encontrado
cuelgue el procesamiento de la pgina. include() no se comporta de esta manera, el
script seguir funcionando de todas maneras. Asegurarse que include_path este
configurado bien.
Cuando un fichero es incluido, el cdigo que contiene hereda la variable scope de la
linea en donde el include ocurre. Cualquier variable disponible en esa linea en el fichero
desde donde se hace la inclusin estar disponible en el fichero incluido a partir de ese
momento.
Ejemplo #1 Ejemplo bsico de la funcin include()
vars.php

<?php
$color = 'amarillo';
$fruit = 'bueno';
?>
test.php
<?php
echo "A $color $fruit"; // A
include 'vars.php';
echo "A $color $fruit"; // A green apple
?>

Si la inclusin ocurre dentro de una funcin en el fichero donde se incluye, todo el


cdigo contenido en el fichero incluido se comportar como si hubiese sido definido
dentro de esta funcin.
Ejemplo #2 Incluyendo desde funciones
include.php
<?php
function foo()
{
global $color;
include 'vars.php';
echo " A $color $fruit ";
}
/* vars.php is in the scope of foo() so

www.phpymysql.com

Pgina 70

PHP Y MYSQL

NICANOR YERBA

* $fruit is NOT available outside of this *


* scope. $color is because we declared it *
* as global.
*/
foo();
// A green apple
echo " A $color $fruit ";
// A green
?>

Como resultado tendremos lo siguiente:

Cuando un fichero es incluido, el intrprete sale del modo PHP y entra en modo HTML
al principio del archivo referenciado, y vuelve de nuevo al modo PHP al final. Por esta
razn, cualquier cdigo dentro del archivo referenciado que debiera ser ejecutado como
cdigo PHP debe ser encerrado dentro de etiquetas vlidas de comienzo y fin de PHP.
Si "URL fopen wrappers" esta activada en PHP (como est en la configuracin inicial),
se puede especificar el fichero que se va a incluir usando una URL (via HTTP u otro
mecanismo soportado, consultar Lista de Protocolos/Envolturas Soportadas) en vez de
un fichero local. Si el servidor destino interpreta el fichero destino como cdigo PHP,
variables pueden ser mandadas al fichero incluido usando una cadena URL de peticin,
tal como se hace con HTTP GET. Esto no es lo mismo que incluir un fichero y que este
fichero herede las variables del fichero padre; el script es ejecutado en el servidor
remoto y el resultado es incluido en script local.

www.phpymysql.com

Pgina 71

PHP Y MYSQL

NICANOR YERBA

Tiempo y fecha
En esta leccin vamos a ver como algunas funciones relacionadas con el tiempo y la
fecha, as como algunos ejemplos prcticos.
time
Devuelve el nmero de segundos transcurridos desde el 1 de Enero de 1970. A esta
forma de expresar fecha y hora se le denomina timestamp.
date(formato,timestamp)
La funcin date devuelve una cadena formateada segn los cdigos de formato. Si no le
pasamos la variable timestamp nos devuelve la cadena formateada para la fecha y la
hora actual.
Los cdigos de formato para la funcin date son:
Cdigo

Descripcin

am o pm

AM o PM

Da del mes con ceros

Abreviatura del da de la semana (Ingls)

Nombre del mes (Ingls)

Hora en formato 1-12

Hora en formato 0-23

Minutos

Da del mes sin ceros

Da de la semana

Nmero del mes (1-12)

Abreviatura del mes (Ingls)

Segundos

Ao con 2 dgitos

Ao con 4 dgitos

Da del ao (1-365)

www.phpymysql.com

Pgina 72

PHP Y MYSQL

NICANOR YERBA

Para ver algunos ejemplos supongamos que ahora es 5 de diciembre de 2009


<?php
echo date("d-m-Y"); // 05-12-2009
?>
<br />
<?php
echo date("H:i:s"); // 21:1351
?>
<br />
<?php
echo date("Y"); // 2009
?>
<br />
<?php
echo date("YmdHis"); // 20091205213151
?>
<br />
<?php
echo date("d/m/y H:i a"); // 05/12/09 21:31 pm
?>
<br />
<?php
echo date("d-m-Y H:i", time()); // el momento actual
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 73

PHP Y MYSQL

NICANOR YERBA

mktime(hora, min, seg, mes, dia, ao)


La funcin mktime devuelve una variable de tipo timestamp a partir de las coordenadas
dadas. La principal utilidad de esta funcin es la de aadir o quitar una determinada
cantidad de fecha u horas a una dada.
Ejemplo:
<?php
function restar_dias($numdias, $date)
{
if(isset($date))
{
$date = time();
}
list($hora, $min, $seg, $da, $mes, $anno)= explode(" ",
date("H i s d m Y"));
$d = $da - $numdias;
$fecha = date("d-m-Y", mktime($hora, $min, $seg, $mes, $d,
$anno));
return $fecha;
}
echo restar_dias(25, date("d-m-Y"))."<br>";
?>
Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 74

PHP Y MYSQL

NICANOR YERBA

checkdate(mes. Dia, ao)


La funcin checkdate compraba si una fecha es vlida, si es as devuelve True y si no lo
es False. Una fecha se considera vlida si el ao esta entre 1900 y 32767, el mes entre 1
y 12 y el da es menor o igual que el nmero de das total del mes en cuestin.
Ejemplo:
<?php
if(checkdate(31, 2, 2006))
{
echo "la fecha es correcta";
}else{
echo "la fecha es incorrecta";
}
?>

www.phpymysql.com

Pgina 75

PHP Y MYSQL

NICANOR YERBA

Las clases
Las Clases son mximo exponente de la Programacin Orientada a Objetos (POO). PHP
no es un lenguaje orientad a objeto, pero implementa las caractersticas que permiten
definir las clases.
Pero, qu son las Clases y para que sirven?, empecemos por los segundo, sirven
hacer el cdigo ms legible, y lo que es ms importante, reutilizable. Escribir una Clase
es sin duda ms largo que escribir el cdigo directamente, pero a la larga es ms
rentable por su portabilidad a otras aplicaciones y su mantenimiento.
Las Clases no son ms que una serie de variables y funciones que describen y actan
sobre algo. Por ejemplo, vamos a crear la claseautomvil, la cual tendr diversas
variables, $color, $modelo, $marca,$potencia, $matricula y habr una serie de funciones
que actuarn sobre la
clase automvil como Precio(), Acelerar(), Frenar(), Girar()y Reparar().
El siguiente ejemplo muestra como definir una clase en PHP y luego crea algunos
objetos de esa clase.
Circulo.php
<?php
/*
Circulo.php
Ejemplo ilustrativo del uso de clases en PHP.
(c) Carlos Castillo Peralta, 2009
*/
class Circulo
{
// Atributos de la clase
private $radio;
// Mtodos de acceso
public function setRadio($radio)
{
$this->radio = $radio;
}
public function getRadio()
{
return ($this->radio);
}
// Otros mtodos de la clase
public function diametro()
{
return (2 * $this->radio);
}
public function longitud()
{
return (2 * pi() * $this->radio);
}

www.phpymysql.com

Pgina 76

PHP Y MYSQL

NICANOR YERBA

public function area()


{
return (pi() * $this->radio * $this->radio);
}
}
?>
En el cdigo mostrado se define la clase Circulo, que puede ser utilizada dentro de un programa
PHP para crear objetos de esa clase. Un objeto de la clase Circulo tendr el atributo radio y los
mtodos setRadio(), getRadio(), diametro(), longitud() yarea().
La forma de utilizar la clase Circulo es:

Clases.php
<?php
/*
Clases.php
Forma de utilizar la clase Circulo en PHP.
(c) Carlos Castillo Peralta, 2008
*/
// Incluimos el archivo de la clase
include ("Circulo.php");
// Se instancia un objeto de la clase Circulo
$objCirculo = new Circulo();
// Para asignar valores a los atributos del objeto se usa el
mtodo set()
$objCirculo->setRadio(1);
// Para obtener el valor del atributo de un objeto se usa el
mtodo get()
$radio = $objCirculo->getRadio();
// Acceso a otros mtodos pblicos del objeto
$diametro = $objCirculo->diametro();
$longitud = $objCirculo->longitud();
$area = $objCirculo->area();
// Impresin de resultados
echo "Radio: "
. $radio
echo "Dimetro: " . $diametro
echo "Longitud: " . $longitud
echo "rea: "
. $area
?>

www.phpymysql.com

.
.
.
.

"<br
"<br
"<br
"<br

/>";
/>";
/>";
/>";

Pgina 77

PHP Y MYSQL

NICANOR YERBA

Como resultado tendremos de Circulo.php y Clases.php lo siguiente:

Por simplicidad no estamos consustanciando los valores que puede tomar el atributo
radio. Por ejemplo, es posible asignar nmeros negativos al radio lo que producir
resultados errneos. En todo caso se deja esto como tarea para el lector.

www.phpymysql.com

Pgina 78

PHP Y MYSQL

NICANOR YERBA

Sessiones
Las sesiones son las mejores formas de almacenar la informacin de los visitantes. Ya
que con las cookis aparte de tener mala fama por ser inseguras, el usuario puede
desactivarlas de su navegador, mientras que las sesiones no se pueden desactivadas.
Adems las cookies son almacenadas en el PC del visitante, mientras que las sesiones
son guardadas en nuestro servidor, lo que nos permite almacenar mucha mayor
informacin y tener un acceso mas fcil a ellas.
Nota: Para que las sesiones funcionen, todas las paginas por las que queramos que corra
deben tener la extensin.php, si hacemos que corra por otra pagina que no sea php las
sesiones se perdern al abandonar el archivo php.
session_start()
Con esta funcin, lo que aremos es comprobar si existe alguna sesin abierta, y si no
hay ninguna, se abrir una.
Es una buena idea incluir esta lnea en cada script ya que si la sesion ya existe no abrir
otra nueva, sino que se limitar a abrir toda la informacin asociada a dicha sesin.
session_register()
Esta funcin nos servir para registrar una variable de sesin
Ejemplo:
$nombre = Giss;
Sessin_register(nombre);

Nota: No es necesario poner el smbolo $ a la hora de registrar la variable de sesin


Cuando las variables estn registradas, son enviadas a travs de las pginas .php hasta
que se termine la sesin o nosotros programemos manualmente el cierre de la sesin.
Se puede registrar mas de una variable a la vez, separndolo por comas, por ejemplo:
Session_register(nombre,apellido,direccion);
Otra cosa a tener en cuenta es que este tipo de variables no pueden pasarse por el
mtodo POST ni GET.

session_is_register()
Esta funcin nos servir para saber si una variable esta registrada o no.
Su sintaxis es as:

$registro=session_is_register(nombre);

En caso de que sea verdadero devolver true y de lo contrario devolver false.


www.phpymysql.com

Pgina 79

PHP Y MYSQL

NICANOR YERBA

Cmo cerrar las sesiones


Cerrar una sesin equivale a des registrar todas las variables que contiene. Para des
registrar una variable usamos la sentencia session_unregister(), lo malo de esta
sentencia es que solo se puede desregistrar una sola variable por cada vez.
Para des registrar todas las variables de una sola vez podemos utilizar la
funcin session_unset().
Una vez desregistradas las variables solo nos falta terminar la sesin con la
funcin session_destroy().
Vamos a realizar un ejemplo con todo lo visto hasta ahora sobre las sesiones:
Crearemos una sesin, registraremos una variable y la pasaremos a travs de tres
pginas distintas.
sesion1.php
<?
session_start();
$nombre= "Jaime";
session_register("nombre");
echo " Bienvenido a mi web, $nombre ";
echo '<a href="sesion2.php">siguiente pagina</a>';
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 80

PHP Y MYSQL

NICANOR YERBA

sesion2.php
<?
session_start();
echo " Bienvenido a mi web de nuevo, $nombre";
session_unregister("$nombre");
echo '<a href = "sesion3.php"> siguiente pagina </a>';
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 81

PHP Y MYSQL

NICANOR YERBA

sesion3.php
<?
session_start();
echo " Bienvenido a mi web de nuevo otra vez, $nombre";
session_destroy();
?>

Explicacin:
Tenemos 3 archivos con una sesion
En el archivo 1: creamos la sesin y registramos la variable nombre con
session_register() y lo pasamos al archivo 2 mediante un enlace
En el archivo 2: usamos la variable creada en el archivo 1 y despus desregistramos la
variable con session_unregister()
En el archivo 3: vemos que a pesar de que la sesion sigue abierta no le llega la variable
nombre ya que la desregistremos en el archivo2, y finalmente cerramos la sesion con
session_destroy().

www.phpymysql.com

Pgina 82

PHP Y MYSQL

NICANOR YERBA

Ejemplos php5
A continuacin se explicaran algunos ejemplos en PHP5 dado que la mayora de
ejemplos que se han explicado anteriormente pueden ser explicados en PHP4 y PHP3
sin problemas, es recomendable apreciar algunos ejemplos netamente en PHP5 y de esta
manera apreciar su funcionamiento.
array_combine
Crea una nueva matriz, usando una matriz para las claves y otra para sus valores
array_combine ( array claves, array valores )
Devuelve un array usando los valores de la matriz claves como claves, y los valores de
la matriz valores como los valores correspondientes.
Devuelve FALSE si el numero de elementos de cada matriz no es equivalente o si las
matrices estn vacas.
Ejemplo:
<?php
$a = array('verde', 'rojo', 'amarillo');
$b = array('aguacate', 'manzana', 'banano');
$c = array_combine($a, $b);
print_r($c);
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 83

PHP Y MYSQL

NICANOR YERBA

array_uintersect_uassoc
Calcula la interseccin de matrices con chequeo adicional de ndices, compara los datos
y los ndices por una funcin del usuario.
Ejemplo:
<?php
$array1 = array("a" => "avion", "b" => "tren", "c" => "blue",
"red");
$array2 = array("a" => "AVION", "B" => "tren", "yellow", "red");
print_r(array_uintersect_uassoc($array1, $array2, "strcasecmp",
"strcasecmp"));
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 84

PHP Y MYSQL

NICANOR YERBA

iconv_mime_decode()
Decodifica un campo de cabecera MIME.
<?php
echo iconv_mime_decode("Subject: =?UTF8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=", 0, "ISO-8859-1");
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 85

PHP Y MYSQL

NICANOR YERBA

iconv_mime_encode
Compone un campo de cabecera MIME.
<?php
$preferences = array(
"input-charset" => "ISO-8859-1",
"output-charset" => "UTF-8",
"line-length" => 76,
"line-break-chars" => "\n"
);
$preferences["scheme"] = "Q";
// This yields "Subject: =?UTF-8?Q?Pr=C3=BCfung_Pr=C3=BCfung?="
echo iconv_mime_encode("Subject", "Prfung Prfung",
$preferences);
$preferences["scheme"] = "B";
// This yields "Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?="
echo iconv_mime_encode("Subject", "Prfung Prfung",
$preferences);
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 86

PHP Y MYSQL

NICANOR YERBA

stream_copy_to_stream
Copia datos de una secuencia a otra.
<?php
$fuente = fopen('http://www.calichin.com', 'r');
$dest1 = fopen('primer1k.txt', 'w');
$dest2 = fopen('resto.txt', 'w');
echo stream_copy_to_stream($fuente, $dest1, 1024) . " bytes
copiados a primer1k.txt\n";
echo stream_copy_to_stream($fuente, $dest2) . " bytes copiados a
resto.txt\n";
?>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 87

PHP Y MYSQL

NICANOR YERBA

stream_socket_client
El siguiente ejemplo muestra como recuperar la fecha y hora desde el servicio UDP
<<DAYTIME>> (puerto 13) en su maquina local.
Ejemplo:
<?php
$da = stream_socket_client("udp://127.0.0.1:13", $errno,
$errstr);
if (!$da) {
echo "ERROR: $errno - $errstr<br />\n";
} else {
fwrite($da, "\n");
echo fread($da, 26);
fclose($da);
}
?>

www.phpymysql.com

Pgina 88

PHP Y MYSQL

NICANOR YERBA

stream_socket_recvfrom
Recibe datos desde un socket, conectado o no.
<?php
/* Abrir un socket de servidor en el puerto 1234 en localhost */
$servidor = stream_socket_server('tcp://127.0.0.1:1234');

/* Aceptar una conexion */


$socket = stream_socket_accept($servidor);

/* Tomar un paquete (1500 es un tamanyo tipico) de datos OOB */


echo "Recibidos Out-Of-Band: '" .
stream_socket_recvfrom($socket, 1500, STREAM_OOB) . "'\n";

/* Echar un vistazo a los datos en banda normales, pero no


consumirlos. */
echo "Datos: '" . stream_socket_recvfrom($socket, 1500,
STREAM_PEEK) . "'\n";

/* Recibir exactamente el mismo paquete de nuevo, pero


eliminarlo del
* bufer esta vez. */
echo "Datos: '" . stream_socket_recvfrom($socket, 1500) . "'\n";

/* Cerrarlo */
fclose($socket);
fclose($servidor);
?>

www.phpymysql.com

Pgina 89

PHP Y MYSQL

NICANOR YERBA

stream_socket_sendto
Enva un mensaje a un socket, sin importar si esta conectado o no.
<?php
/* Abrir un socket en el puerto 1234 en localhost */
$socket = stream_socket_client('tcp://127.0.0.1:1234');

/* Enviar datos ordinarios mediante los canales ordinarios.


*/
fwrite($socket, "Transmision normal de datos.");

/* Enviar mas datos fuera de banda. */


stream_socket_sendto($socket, "Datos Out of Band.",
STREAM_OOB);

/* Cerrarlo */
fclose($socket);
?>

www.phpymysql.com

Pgina 90

PHP Y MYSQL

NICANOR YERBA

stream_socket_server
Crear un socket de servidor de dominio de internet o Unix.
<?php
$socket = stream_socket_server("tcp://0.0.0.0:8000",
$errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
while ($con = stream_socket_accept($socket)) {
fwrite($con, 'La hora local es ' . date('n/j/Y g:i a')
. "\n");
fclose($con);
}
fclose($socket);
}
?>

www.phpymysql.com

Pgina 91

PHP Y MYSQL

NICANOR YERBA

Upload de archivos con PHP


En PHP tenemos muchas funcionalidades desarrolladas desde el principio y sin
necesidad de instalar ningn aadido en nuestro servidor. Es el caso de subir archivos a
un servidor web por HTTP y a travs de una pgina con un formulario, donde se
permite seleccionar el archivo que queremos cargar de nuestro disco duro.
El ejemplo se encuentra bien documentado en un montn de pginas para
desarrolladores, sin ir ms lejos en la pgina de la propia
tecnologa: http://www.php.net/manual/es/features.file-upload.php. Nosotros en este
caso vamos a intentar ir un poco ms all, realizando un par de comprobaciones al subir
el fichero y combinando en el mismo formulario campos de tipo file y tipo text.
El formulario para subir seleccionar los archivos
Es un formulario cualquiera, pero tiene una serie de particularidades y campos file, que
no solemos utilizar habitualmente.
cargar.html
<form action="subearchivo.php" method="post"
enctype="multipart/form-data">
<b>Campo de tipo texto:</b>
<br>
<input type="text" name="cadenatexto" size="20"
maxlength="100">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<br>
<br>
<b>Enviar un nuevo archivo: </b>
<br>
<input name="userfile" type="file">
<br>
<input type="submit" value="Enviar">
</form>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 92

PHP Y MYSQL

NICANOR YERBA

Para empezar vemos que se ha colocado un nuevo atributo en el formulario:


enctype="multipart/form-data", necesario para subir en un mismo formulario datos y
archivos.
Tambin tenemos el campo hidden MAX_FILE_SIZE, que sirve para indicar el tamao
en bytes de los archivos a subir. Este campo algunos navegadores no tienen porqu
entenderlo o hacerle caso. Adems, es fcil saltarse esa proteccin, por lo que
deberemos en las propias pginas PHP comprobar que el archivo tenga el tamao que
deseamos.
Por ltimo, tenemos el campo tipo file, donde se seleccionar el archivo a subir.
Tambin hemos colocado un campo de tipo text, para subir datos por POST de tipo
texto acompaados a los datos binarios del archivo.
Pgina que sube los archivos
Esta pgina debe hacer las comprobaciones necesarias para saber si las caractersticas
del archivo a subir son las que deseamos y realizar la copia del archivo en un directorio
del servidor.
Para hacer las comprobaciones, PHP nos crea una serie de variables que podemos
acceder con la informacin del archivo enviado.
$HTTP_POST_FILES['userfile']['name']
El nombre original del fichero en la mquina cliente.
$HTTP_POST_FILES['userfile']['type']
El tipo mime del fichero (si el navegador lo proporciona). Un ejemplo podra ser
"image/gif".
$HTTP_POST_FILES['userfile']['size']
El tamao en bytes del fichero recibido.
$HTTP_POST_FILES['userfile']['tmp_name']
El nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo
recibido.
Nota: En este momento (a partir de PHP 5) el array $HTTP_POST_FILES ha sido
sustituido por el array $_FILES. En realidad es exactamente lo mismo, con la
diferencia que $_FILES es ms corto de escribir. Dependiendo de la configuracin de
tu PHP el nombre de variable antigua $HTTP_POST_FILES puede existir o no, pero
en cualquier caso te recomendamos utilizar $_FILES para que tus scripts funcionen en
cualquier servidor, independientemente de la configuracin. Por ejemplo, usa
$_FILES['userfile']['tmp_name'] en lugar de
$HTTP_POST_FILES['userfile']['tmp_name'].

www.phpymysql.com

Pgina 93

PHP Y MYSQL

NICANOR YERBA

upload.php
<?
//tomo el valor de un elemento de tipo texto del formulario
$cadenatexto = $_POST["cadenatexto"];
echo "Escribi en el campo de texto: " . $cadenatexto .
"<br><br>";
//datos del arhivo
$nombre_archivo = $HTTP_POST_FILES['userfile']['name'];
$tipo_archivo = $HTTP_POST_FILES['userfile']['type'];
$tamano_archivo = $HTTP_POST_FILES['userfile']['size'];
//compruebo si las caractersticas del archivo son las que
deseo
if (!((strpos($tipo_archivo, "gif") ||
strpos($tipo_archivo, "jpeg")) && ($tamano_archivo <
100000))) {
echo "La extensin o el tamao de los archivos no es
correcta. <br><br><table><tr><td><li>Se permiten archivos
.gif o .jpg<br><li>se permiten archivos de 100 Kb
mximo.</td></tr></table>";
}else{
if
(move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'
], $nombre_archivo)){
echo "El archivo ha sido cargado
correctamente.";
}else{
echo "Ocurri algn error al subir el fichero.
No pudo guardarse.";
}
}
?>
Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 94

PHP Y MYSQL

NICANOR YERBA

Para empezar, recogemos el campo de texto enviado por POST, de la forma habitual.
Aunque esto no tenga nada que ver con subir archivos, es muy normal que en el mismo
formulario deseemos mezclar varios tipos de informacin.
Luego se recogen los datos necesarios del archivo, como su nombre, extensin y tamao
para, en el siguiente if, comprobar que la extensin sea .gif o .jpg y que el tamao
menor que 100000 bytes.
Si el archivo tena las caractersticas deseadas, se puede subir al servidor. Para ello se
utiliza la funcin move_uploaded_file(), que recibe el nombre del archivo temporal que
se desea subir y el nombre del archivo que se desea dar.
Cuando se sube el archivo, el servidor lo copia en una localizacin temporal para que
seamos nosotros los que elijamos la posicin definitiva donde queremos que se
almacene. Si no lo copiamos a ningn sitio, despus de la ejecucin de la pgina, se
borra de su localizacin temporal.
La funcin move_uploaded_file() se utiliza para mover el archivo a la posicin
definitiva. Recibe por un lado el nombre temporal del fichero y por otro el nombre que
deseamos colocarle definitivamente y, si se desea, la ruta para llegar al directorio donde
queremos guardarlo. En el caso del ejemplo slo se indica el nombre del archivo, por
ello el fichero se subir al mismo directorio donde estn las pginas PHP que hacen el
upload. Esta funcin devuelve un boleano que indica si hubo o no xito al subir el
archivo.

www.phpymysql.com

Pgina 95

PHP Y MYSQL

NICANOR YERBA

Mandar mails desde PHP


Para el envo de correos electrnicos utilizando PHP disponemos de una funcin
bastante potente, incluida en todas las versiones de PHP, sin necesidad de instalar
ningn aadido, en contra de lo que ocurra con ASP.
En concreto, en PHP disponemos de una funcin llamada mail() que permite configurar
y enviar el mensaje de correo. La funcin se llama mail() y recibe tres parmetros de
manera obligada y otros dos parmetros que podemos colocar opcionalmente. Devuelve
true si se envi el mensaje correctamente y false en caso contrario.
Parmetros necesarios en todos los casos
Destinatario: la direccin de correo o direcciones de correo que han de recibir el
mensaje. Si incluimos varias direcciones debemos separarlas por una coma.
Asunto: para indicar una cadena de caracteres que queremos que sea el asunto del
correo electrnico a enviar.
Cuerpo: el cuerpo del mensaje, lo que queremos que tenga escrito el correo.
Ejemplo de envo de un mail sencillo
<?
mail("pepito@desarrolloweb.com,maria@guiartemultimedia.com","asu
ntillo","Este es el cuerpo del mensaje")
?>

Parmetros opcionales del envo de correo


Headers: Cabeceras del correo. Datos como la direccin de respuesta, las posibles
direcciones que recibirn copia del mensaje, las direcciones que recibirn copia oculta,
si el correo est en formato HTML, etc.
Additional_parameters: esta opcin no suele utilizarse y, adems, slo est disponible
a partir de la versin PHP 4.0.5 y desde PHP 4.2.3 est deshabilitado en modo seguro.
Puede usarse para pasar parmetros adicionales al programa configurado para enviar el
correo, cuando se manda el mail usando la opcin de configuracin sendmail_path.
Podemos obtener ms informacin en la documentacin de PHP para la funcin mail().
Ejemplo complejo de envo de correo
Vamos a enviar un correo con formato HTML a pepito@calichin.com, con copia a
mariano@calichin.com y con copia oculta para pepe@pepe.com y juan@juan.com. La
direccin de respuesta la configuraremos a maria@calichin.com.

www.phpymysql.com

Pgina 96

PHP Y MYSQL

NICANOR YERBA

<?
$destinatario = "nicanor_88@hotmail.com";
$asunto = "Este mensaje es de prueba";
$cuerpo = '
<html>
<head>
<title>Prueba de correo</title>
</head>
<body>
<h1>Hola amigos!</h1>
<p>
<b>Bienvenidos a mi correo electrnico de prueba</b>. Estoy
encantado de tener tantos lectores. Este cuerpo del mensaje es
del artculo de envo de mails por PHP. Habra que cambiarlo
para poner tu propio cuerpo. Por cierto, cambia tambin las
cabeceras del mensaje.
<br>
<h1>www.calichin.com</h1>
</p>
</body>
</html>
';
//para el envo en formato HTML
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
//direccin del remitente
$headers .= "From: Nicanor Yerba <pepito@calichin.com>\r\n";
//direccin de respuesta, si queremos que sea distinta que la
del remitente
$headers .= "Reply-To: mariano@desarrolloweb.com\r\n";
//ruta del mensaje desde origen a destino
$headers .= "Return-path: holahola@calichin.com\r\n";
//direcciones que recibin copia
$headers .= "Cc: maria@calichin.com\r\n";
//direcciones que recibirn copia oculta
$headers .= "Bcc: pepe@pepe.com,juan@juan.com\r\n";
mail($destinatario,$asunto,$cuerpo,$headers)
?>

www.phpymysql.com

Pgina 97

PHP Y MYSQL

NICANOR YERBA

Como resultado tendremos lo siguiente despus de subir y actualizar, se enviara


automticamente:

Nota: Para el envo de correo mediante PHP es necesario que este disponga de una
correcta configuracin.
Si nuestro web est en un servidor de un proveedor de hosting seguramente ya hayan
configurado PHP para el envo de mails. Si estamos trabajando en un servidor propio,
s tendremos que configurar PHP.
PHP se configura en el archivo php.ini, donde debemos especificar datos como el
servidor de correo saliente que debe de utilizar PHP para transferir los mensajes.
Dentro del php.ini, debemos buscar el epgrafe [mail function]. Dependiendo de
nuestro sistema deberemos configurar de una manera u otra.
En sistemas Windows encontraremos el php.ini en el directorio windows o dentro de
este, en el subdirectorio system32 o similar. En este sistema deberemos indicar el
dominio del servidor de smtp, algo como smtp.midominio.com. Si es el ordenador local
el que hace de servidor, podremos poner "localhost" como mquina que enviar el
correo. Tambin podemos especificar la direccin desde donde queremos que parezca
que se enva el mensaje en caso de que no se indique otra durante el envo.

www.phpymysql.com

Pgina 98

PHP Y MYSQL

NICANOR YERBA

Enviar un formulario por mail con PHP


El mtodo para enviar un formulario con PHP resulta muy similar al utilizado en ASP.
Vara tan slo la sintaxis utilizada y las lneas de cdigo que realizan el envo del correo
electrnico.
Esquema de funcionamiento
En este caso nos vamos a apoyar en la variable $HTTP_POST_VARS, que debera
contener el formulario, para saber si hemos recibido o no datos desde un formulario.
Dicha variable la utilizamos en un enunciado if (! $HTTP_POST_VARS), que si pasa
por el caso positivo -no haba nada en $HTTP_POST_VARS- significa que no se ha
recibido nada desde un formulario. En ese caso, muestro el formulario de contacto.
En caso contrario -s que haba algo en $HTTP_POST_VARS- quiere decir que estamos
recibiendo datos por un formulario y en ese caso, recogemos los datos y componemos el
cuerpo del mensaje.
Veamos el cdigo de la pgina para crear el formulario, recibirlo y componer el cuerpo
del mensaje que se va a enviar. En el mismo cdigo podremos encontrar tambin la
llamada a la funcin que enva el correo.
Ejemplo:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Mndanos tus comentarios</title>
</head>
<body bgcolor="#cccc66" text="#003300" link="#006060"
vlink="#006060">
<?
if (!$HTTP_POST_VARS){
?>
<form action="mail_formulario.php" method=post>
Nombre: <input type=text name="nombre" size=16>
<br>
Email: <input type=text name=email size=16>
<br>
Comentarios: <textarea name=coment cols=32 rows=6></textarea>
<br>
<input type=submit value="Enviar">
</form>
<?
}else{
//Estoy recibiendo el formulario, compongo el cuerpo
$cuerpo = "Formulario enviado\n";
$cuerpo .= "Nombre: " . $HTTP_POST_VARS["nombre"] . "\n";
$cuerpo .= "Email: " . $HTTP_POST_VARS["email"] . "\n";
$cuerpo .= "Comentarios: " . $HTTP_POST_VARS["coment"] .
"\n";

www.phpymysql.com

Pgina 99

PHP Y MYSQL

NICANOR YERBA

//mando el correo...
mail("ana@calichin.com","Formulario recibido",$cuerpo);
//doy las gracias por el envo
echo "Gracias por rellenar el formulario. Se ha enviado
correctamente.";
}
?>
</body>
</html>

Como resultado tendremos lo siguiente:

www.phpymysql.com

Pgina 100

PHP Y MYSQL

www.phpymysql.com

NICANOR YERBA

Pgina 101

PHP Y MYSQL

NICANOR YERBA

Escritura en archivos con PHP


Siguiendo con la gestin de archivos por medio de PHP, en este artculo veremos los
pasos elementales para la creacin y escritura de un archivo texto por medio de esta
tecnologa de lado servidor. Tras haber visto como funciona la lectura secuencial de un
archivo, podemos imaginar que escribir sobre ste no debe de resultar mucho ms
complicado.
Por otra parte, las posibilidades que estas dos operaciones nos pueden ofrecer
conjuntamente son realmente sorprendentes. Sin ir ms lejos, y guardando las
distancias, escribir y leer archivos puede en cierta manera sustituir muy primariamente a
una base de datos. En efecto, si por diversas razones (hosting, presupuesto,
conocimientos...) nos resulta difcil la puesta en marcha de una base de datos elemental,
siempre podremos solventar el inconveniente almacenando nuestros datos en archivos
que luego podrn ser ledos. Por supuesto, este mtodo no tiene nada de seguro ni de
verstil y slo es valido para un sitio sin informacin confidencial y con poca cantidad
de datos.
Podemos pensar tambin en crear documentos dinmicos a partir de datos introducidos
en un formulario: cartas, pginas HTML y otros.
Otro ejemplo particularmente prctico es la creacin dinmica de archivos que nos
ahorren recursos de servidor. Imaginemos que tenemos una pgina, o archivo, en
nuestro sitio que carga muy frecuentemente y que realiza constantemente llamadas a
bases de datos o ejecuta scripts medianamente largos. Si el contenido que estamos
mostrando es el mismo para todos los usuarios y no tiene necesidad de ser actualizado
constantemente, podemos contentarnos con crear un script accesorio que ejecute una
nica vez el script principal y que almacene su resultado en forma de archivo HTML
que ser en realidad el que mostraremos a nuestros visitantes. De esta forma, evitamos
por una parte la ejecucin masiva de un mismo script con el consiguiente ahorro de
recursos y por otra automatizamos la actualizacin de una determinada pgina o seccin
ejecutando peridicamente el script accesorio.
La escritura de archivos pasa, como es de esperar, por la previa apertura de archivo en
un modo apropiado. Una vez abierto, el paso siguiente ser introducir por medio de la
funcin fwrite, o su alias fputs, la cadena que deseamos incluir en nuestro archivo.
Para ejemplificar esta nueva funcin de escritura y combinarla con la de lectura, fgets,
os proponemos este contador inspirado en una nota de la pgina oficial de PHP:
Ejemplo:
<?
function incremento_contador($archivo)
{
// $archivo contiene el numero que actualizamos
$contador = 0;
//Abrimos el archivo y leemos su contenido
$fp = fopen($archivo,"r");
$contador = fgets($fp, 26);
fclose($fp);

www.phpymysql.com

Pgina 102

PHP Y MYSQL

NICANOR YERBA

//Incrementamos el contador
++$contador;
//Actualizamos el archivo con el nuevo valor
$fp = fopen($archivo,"w+");
fwrite($fp, $contador, 26);
fclose($fp);
echo "Este script ha sido ejecutado $contador veces";
}
?>

Como en otros ejemplos, el script es expresado en forma de funcin para que sea ms
sencilla su reutilizacin. Las etapas que llevamos a cabo son verdaderamente cortas y
comprensibles:

Iniciamos nuestra variable contador.


Abrimos el archivo en modo lectura y extraemos el valor actual del contador
leyendo la primera y nica lnea. Cerramos el archivo.
Aumentamos de una unidad el valor de contador.
Abrimos el archivo y lo sobrescribimos (modo +w) con el valor contador
modificado.

www.phpymysql.com

Pgina 103

Вам также может понравиться