Академический Документы
Профессиональный Документы
Культура Документы
www.phpymysql.com
NICANOR YERBA
Pgina 1
PHP Y MYSQL
NICANOR YERBA
Libro de Php 5
Por: Nicanor yerba
www.phpymysql.com
Pgina 2
PHP Y MYSQL
www.phpymysql.com
NICANOR YERBA
Pgina 3
PHP Y MYSQL
NICANOR YERBA
Tabla de contenidos
www.phpymysql.com
Pgina 4
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 5
PHP Y MYSQL
NICANOR YERBA
Que es AppServ?
Es un software que permite la instalacin en nuestro entorno Windows, de los siguientes
paquetes:
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
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.
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
www.phpymysql.com
Pgina 12
PHP Y MYSQL
NICANOR YERBA
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 */
?>
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.
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.
www.phpymysql.com
Pgina 16
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 17
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 18
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 19
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 20
PHP Y MYSQL
NICANOR YERBA
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
}
?>
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);
?>
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
tipos
derecha
lgicos
izquierda
*/%
aritmtica
izquierda
+-.
aritmtica, y cadena
izquierda
<< >>
manejo de bits
comparacin
comparacin
izquierda
&
izquierda
manejo de bits
izquierda
manejo de bits
izquierda
&&
lgicos
izquierda
||
lgicos
izquierda
?:
ternario
derecha
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
?>
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";
?>
www.phpymysql.com
Pgina 26
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 27
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 28
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 29
PHP Y MYSQL
NICANOR YERBA
<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
www.phpymysql.com
Pgina 31
PHP Y MYSQL
NICANOR YERBA
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.
?>
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
$a ===
$b
Idntico
$a != $b
Diferente
$a <> $b Diferente
$a !== $b No idnticos
$a < $b
Menor que
$a > $b
Mayor que
$a <= $b
Menor o igual
que
$a >= $b
Mayor o igual
que
www.phpymysql.com
Pgina 34
PHP Y MYSQL
NICANOR YERBA
Para varios tipos, la comparacin se realiza de acuerdo con la siguient tabla (en orden).
Comparacin con Varios Tipos
Tipo del Operando 1
Resultado
null ostring
string
bool o null
cualquiera
object
object
array
array
array
cualquiera
object
cualquiera
www.phpymysql.com
Pgina 35
PHP Y MYSQL
NICANOR YERBA
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'];
}
?>
www.phpymysql.com
Pgina 37
PHP Y MYSQL
NICANOR YERBA
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>";
?>
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
$a++
--$a
$a--
www.phpymysql.com
Pgina 39
PHP Y MYSQL
NICANOR YERBA
"<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";
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";
}
?>
www.phpymysql.com
Pgina 41
PHP Y MYSQL
NICANOR YERBA
Operadores de Lgica
Operadores de Lgica
Ejemplo
Nombre
Resultado
$a and $b Y
$a or $b
No
TRUE si $a no es TRUE.
$a && $b Y
$a || $b
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
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
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
$a ===
$b
Identidad
$a != $b
Noigualdad
$a <> $b
Noigualdad
$a !== $b
Noidentidad
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);
?>
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
?>
www.phpymysql.com
Pgina 48
PHP Y MYSQL
NICANOR YERBA
<?php
$a= 10;
$b= 5;
if ($a > $b) {
echo "a es mayor que b";
}
?>
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";
}
?>
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";
www.phpymysql.com
Pgina 51
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 52
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 53
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 54
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 55
PHP Y MYSQL
NICANOR YERBA
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) */
}
?>
www.phpymysql.com
Pgina 57
PHP Y MYSQL
NICANOR YERBA
Ejemplo #2:
<?php
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
?>
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);
?>
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);
?>
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
www.phpymysql.com
Pgina 61
PHP Y MYSQL
NICANOR YERBA
Ejemplo #2:
<?php
for ($i = 1;;$i++) {
if ($i > 10) {
break;
}
print $i;
}
?>
Ejemplo #3:
<?php
$i = 1;
for (;;) {
if ($i > 10) {
break;
}
print $i;
$i++;
}
?>
www.phpymysql.com
Pgina 62
PHP Y MYSQL
NICANOR YERBA
Ejemplo #4:
<?php
for ($i = 1; $i <= 10; print $i, $i++) ;
?>
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";
}
?>
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";
}
?>
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();
www.phpymysql.com
Pgina 66
PHP Y MYSQL
NICANOR YERBA
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";
?>
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
?>
www.phpymysql.com
Pgina 70
PHP Y MYSQL
NICANOR YERBA
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
Minutos
Da de la semana
Segundos
Ao con 2 dgitos
Ao con 4 dgitos
Da del ao (1-365)
www.phpymysql.com
Pgina 72
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 73
PHP Y MYSQL
NICANOR YERBA
www.phpymysql.com
Pgina 74
PHP Y MYSQL
NICANOR YERBA
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
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
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);
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);
Pgina 79
PHP Y MYSQL
NICANOR YERBA
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>';
?>
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);
?>
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"));
?>
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");
?>
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);
?>
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";
?>
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');
/* 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');
/* 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
www.phpymysql.com
Pgina 92
PHP Y MYSQL
NICANOR YERBA
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
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
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
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>
www.phpymysql.com
Pgina 100
PHP Y MYSQL
www.phpymysql.com
NICANOR YERBA
Pgina 101
PHP Y MYSQL
NICANOR YERBA
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:
www.phpymysql.com
Pgina 103