Sie sind auf Seite 1von 109

PRIMERA PRACTICA DE PHP

PRIMERAS PAGINAS EN PHP

1. Mostrar el siguiente mensaje:


Apache-PHP-MySQL
Una gran alternativa

<?php
echo "Apache PHP MySQL<br>";
echo "Una gran alternativa";
?>

2. Mostrar el siguiente mensaje:


PHP
Una gran herramienta

<script language="PHP">
echo "Zend Studio<br>";
echo "Una gran herramienta";
</script>

3. Ejemplo que muestra la combinacin de PHP y HTML


<table width="200" border="1">
<tr>
<th align="center">Nmero</th>
<th align="center">Cuadrado</th>
</tr>
<?php for($k=1;$k<=5;$k++){ ?>
<tr>
<td align="center"><?php echo $k ?></td>
<td align="center"><?php echo $k * $k ?></td>
</tr>
<?php } ?>
</table>

4. Ejemplo que muestra el uso de comentarios


<?php
/*
* Este ejemplo ilustra el uso de Comentarios
* Como podemos observar son tres lo tipos
*/
echo "Ejemplos de Comentarios<br>";
echo "Alianza Campen<br>"; // Mensaje Ganador
echo "Per Campen"; # Esperanza de todos los peruanos
?>

5. Ejemplo que muestra el uso de variables


<?php
$nombre = "Stephany Espinoza Sanchez";
echo "Mi nombre es: ", $nombre;
?>

6. Ejemplo que muestra el uso de variables


<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$dia = 24; //Se declara una variable de tipo integer.
$sueldo = 758.43; //Se declara una variable de tipo double.
$nombre = "juan"; //Se declara una variable de tipo string.
echo "Variable entera:";
echo $dia;
echo "<br>";
echo "Variable double:";
echo $sueldo;
echo "<br>";
echo "Variable string:";
echo $nombre;
?>
</body>
</html>

7. Ejemplo que muestra el tipo de datos entero


<font face="Verdana">
<?php
$a1 = 4546; # nmero decimal
$a2 = -467; # un nmero negativo
$a3 = 0352; # nmero octal (equivalente a 234 decimal)
$a4 = 0xA5; # nmero hexadecimal (equivalente a 65 decimal)
echo "a1 -> ", $a1, "<br>";
echo "a2 -> ", $a2, "<br>";
echo "a3 -> ", $a3, "<br>";
echo "a4 -> ", $a4, "<br>";
?>
</font>

8. Ejemplo que muestra el tipo de dato punto flotante


<font face="Verdana">
<?php
$a1 = 15.234;
echo "a1 -> ", $a1;
?>
</font>
9. Ejemplo que muestra el uso de cadenas
<font face="Helvetica">
<?php
$cad = "Esto es una cadena";
echo $cad;
?>
</font>
10. Ejemplo que muestra el uso de cadenas
<font face="Helvetica">
<?php
echo "Nombre: Hugo Valencia<br>";
echo "Cargo: Jefe de Sistemas<br>";
echo "Salario: \$5800.00";
?>
</font>

11. Ejemplo que muestra que las variables que estan dentro de la cadena son reemplazadas
por su valor
<font face="Verdana">
<?php
$a = 5;
$b = 9;
$c = $a * $b;
echo "Variables dentro de una cadena se expanden<br>";
echo "\$a = $a<br>";
echo "\$b = $b<br>";
echo "\$c = $c<br>";
?>
</font>

12. Ejemplo que muestra que se puede insertar codigo HTML dentro de una cadena
<?php
echo "<font face=\"Verdana\">";
echo "<H2>Software Libre</H2>";
echo "<H3>Es la Alternativa</H3>";
echo "</font>";
?>

13. Ejemplo que muestra que para concatenar dos cadenas se utiliza punto.
<font face="Helvetica">
<?php
$s1 = "<b>Software Libre</b><br>";
$s2 = "Es una muy buena alternativa<br>";
$s3 = "para Desarrollar Soluciones<br>";
$s4 = "Empresariales Seguras y Confiables";
echo $s1 . $s2 . $s3 . $s4;
?>
</font>

14. Ejemplo que muestra el uso de variables tipo string


<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$cadena1="diego";
$cadena2="juan";
$cadena3="ana";
$todo=$cadena1.$cadena2.$cadena3."<br>";
echo $todo;
$edad1=24;
echo $cadena1." tiene $edad1 de edad";
?>
</body>
</html>

15. Ejemplo que muestra el tipo de variable


<font face="Helvetica">
<?php
$nombre = "Claudia";
$edad = 20;
echo "El tipo de \$nombre es: ", gettype($nombre), "<br>";
echo "El tipo de \$edad es: ", gettype($edad);
?>
</font>

16. Ejemplo que muestra el uso de la funcin echo


<?php
$saludo = "hola";
echo ("$saludo = "); //se imprime la variable saludo
echo "$saludo";
?>

17. Ejemplo que muestra el uso de la funcin printf


<font face="Helvetica">
<?php
$A = 10; $B = 15.5; $C = "MySQL la BD ms rpida";
printf("El valor de A es: %d<br>", $A);
printf("Ahora relleno con ceros: %03d<br>", $A);
printf("El valor de B es: %f<br>", $B);
printf("Ahora con un decimal: %.1f<br>", $B);
printf("El valor de C es: %s<br>", $C);
?>
</font>

18. Ejemplo de printf


<?php
// M_PI es una variable predefinida
// con el valor de Pi
printf ("Pi es: %d", M_PI ); // 3
printf ("Pi es: %.2f", M_PI); // 3.14
printf ("Pi es: %.3f", M_PI); // 3.142
printf ("Pi es: %.4f", M_PI); // 3.1416
?>
19. Ejemplo del uso de una constante
<font face="Helvetica">
<?php
define("PI",3.141516);
$radio = 5;
$area = PI*$radio*$radio;
echo "PI: " . PI . "<br>";
echo "Radio: $radio<br>";
echo "Area: $area";
?>
</font>

20. Ejemplo que muestra la suma de dos numeros


Total:
<?php
$a=80;
$b=30;
$c=30;
$suma=$a + $b + $c;
echo $suma;
?>
SEGUNDA PRACTICA DE PHP

ESTRUCTURAS DE CONTROL

ESTRUCTURA DE CONTROL IF
Ejemplo1:
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$valor=rand(1,10);
echo "El valor sorteado es $valor<br>";
if ($valor<=5)
{
echo "Es menor o igual a 5";
}
else
{
echo "Es mayor a 5";
}
?>
</body>
</html>

Ejemplo2:
<?php
$a=10;
$b=5;
if ($a > $b)
print "a es mayor que b";
?>

Ejemplo3:
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$valor=rand(1,100);
echo "El valor sorteado es $valor<br>";
if ($valor<=9)
{
echo "Tiene un dgito";
}
else
{
if ($valor<100)
{
echo "Tiene 2 dgitos";
}
else
{
echo "Tiene 3 dgitos";
}
}
?>
</body>
</html>

Ejemplo4:
<?php
$a=5;
$b=10;
if ($a > $b) {
print "a es mayor que b";
}
else {
print "a no es mayor que b";
}
?>

Ejemplo5:
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$valor=100;//rand(1,100);
echo "El valor sorteado es $valor<br>";
if ($valor<=9)
{
echo "Tiene un dgito";
}
elseif ($valor<100)
{
echo "Tiene 2 dgitos";
}
else
{
echo "Tiene 3 dgitos";
}
?>
</body>
</html>

Ejemplo6:
<?php
$a=5;
$b=5;
if ($a > $b) {
print "a es mayor que b";
}
elseif ($a == $b) {
print "a es igual que b";
}
else {
print "a no es mayor que b";
}
?>

ESTRUCTURA DE CONTROL FOR


Ejemplo7:
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
for($f=1;$f<=100;$f++)
{
echo $f;
echo "<br>";
}
?>
</body>
</html>

Ejemplo8:
<?php
for($i = 2; $i <= 10; $i += 2)
{
echo "......................\n";
//contando nmeros pares
echo "i vale: " . $i . "\n";
//sus cuadrados
echo "i^2: " . $i*$i . "\n";
//y sus inversos
echo "1/i: " . 1/$i . "\n";
}
?>

ESTRUCTURA DE CONTROL SWITCH


Ejemplo9:
<?php
$mes = "Marzo";
switch ($mes) {
case "Enero":
echo "Estamos en el mes de Enero";
break;
case "Febrero":
echo "Estamos en el mes de Febrero";
break;
case "Marzo":
echo "Estamos en el mes de Marzo";
break;
case "Abril":
echo "Estamos en el mes de Abril";
break;
case "Mayo":
echo "Estamos en el mes de Mayo ";
break;
case "Junio":
echo "Estamos en el mes de Junio";
break;
case "Julio":
echo "Estamos en el mes de Julio";
break;
case "Agosto":
echo "Estamos en el mes de Agosto";
break;
case "Septiembre":
echo "Estamos en el mes de Septiembre";
break;
case "Octubre":
echo "Estamos en el mes de Octubre";
break;
case "Noviembre":
echo "Estamos en el mes de Noviembre";
break;
case "Diciembre":
echo "Estamos en el mes de Diciembre, El ultimo mes del ao!";
break;
default:
echo "Se ha ingresado un mes invlido";
}
?>

ESTRUCTURA DE CONTROL WHILE


Ejemplo10:
<?php
$num = 1;
while ($num < 5) {
echo " $num ";
$num++;
}
?>

Ejemplo11:
<?php
$num = 1;
while ($num < 5) {
echo " $num ";
if ($num == 3) {
echo "Aqu paramos";
break;
}
$num++;
}
?>

Ejemplo12:
<?
$a = 3;
while ($a <= 7){
echo $a++;
} // el contenido de While entre llaves
?>

Ejemplo13:
<?php
$i = 1;
while($i <= 5):
echo "\$i = $i" . "\n";
$i += 1;
endwhile;
?>

Ejemplo14:
<?php
$valor=rand(1,100);
$inicio=1;
while($inicio<=$valor)
{
echo $inicio;
echo "<br>";
$inicio++;
}
?>
</body>
</html>

Ejemplo15:
<html>
<head>
<title>Problema</title>
</head>
<body>
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
//Mostramos los nmeros de los das del 1 a la fecha actual;
$dia=date("d");
$inicio=1;
while($inicio<=$dia)
{
echo $inicio."<br>";
$inicio++;
}
?>
</body>
</html>

Ejemplo16:
<?php
$n = 1;
$i = 1;
while(true){
$i = $i + 1;
$n = $n * $i;
if ($n > 100) break;
}
echo "i = " . $i;
echo "<nowiki><br/></nowiki>n = " . $n;
?>

Ejemplo17:
<?php
$n = 1;
$i = 50;
$mensaje = "No hay mltiplos de 11 entre " "50 y 100. (no hay?)";
while($i < 100){
if ($i % 11 == 0)
{
$mensaje = "El primer mltiplo de 11 " .
"entre 50 y 100 es: " . $i;
break;
}
$i += 1;
}
echo $mensaje;
?>

ESTRUCTURA BREAK Y CONTINUE

Ejemplo18:
<body bgcolor="#D2EBF7">
<?php
echo "<h4>Ejemplo de BREAK</h4>";
$k = 1;
while ($k <= 10) {
echo "\$k = $k <br>";
if( $k == 5) { break; }
$k++;
}
?>
</body>

Ejemplo19:
<?php
$x=0;
while($x<300){
$x=$x+1;
if($x==2)
continue;
echo "X vale $x <br>";
if($x==4)
break;
}
?>

ESTRUCTURA DO WHILE
Ejemplo20:
<?php
$i=0;
do
{
$i++;
echo "$i<br>";
}
while ($i<5);
?>

Ejemplo21:
<?php
$i = 5;
$n = 1;
do {
$n = $n * $i;
$i -= 1;
}while($i > 1);
echo "5! es igual a: " . $n
?>

ESTRUCTURA FOREACH
Ejemplo22:
<?
$moneda=array("Espaa"=> "Peseta","Francia" => "Franco","USA" => "Dolar");
Foreach ($moneda as $clave=>$valor)
{
echo "Pais: $clave Moneda: $valor<br>";
}
?>

Ejemplo23:
<body bgcolor="#D2EBF7">
<?php
echo "<h4>Recorrido de un Array Asociativo</h4>";
$a = array(
"Chiclayo" => "Amistad",
"Trujillo" => "Primavera",
"Cuzco" => "Machu Picchu",
"Arequipa" => "Ciudad Blanca"
);

echo "<b>Elementos:</b> <br>";


foreach ($a as $clave => $valor) {
echo "$clave => $valor <br>";
}
?>
</body>
EJERCICIOS

Realizar un programa que calcule el salario de un trabajador con impuesto

Sueldo del trabajador sin impuesto: 3500


Con el impuesto: 2800

<html>
<body>
<?php
$SalarioTrabajador = 3500;
$Impuesto = 20; // Porcentaje
$SueldoReal = $SalarioTrabajador - (($SalarioTrabajador /
100) * $Impuesto);
echo "Sueldo del trabajador sin impuesto: $SalarioTrabajador<BR>";
echo "Con el impuesto :$SueldoReal";
?>
</body >
</html>

Programa en PHP que calcula el rea de un triangulo cuya formula es a=(b*h)/2


El area del triangulo es: 90

<?php
$Base=15;
$Altura=12;
$Area = ($Base * $Altura)/2;
printf ("El area del triangulo es: $Area");
?>

Programa que dados 2 nmeros calcule la suma, resta, multiplicacin, divisin, y modulo
usando printf

La suma de 8 y 5 es: 13
La resta de 8 y 5 es: 3
La multiplicacin de 8 y 5 : 40
La division de 8 y 5: 1.60
El modulo de 8 y 5 es 3.0

<?php
$Num1=8;
$Num2=5;
printf("La suma de $Num1 y $Num2 es: <b>%d</b><br>", $Num1 + $Num2 );
printf("La resta de $Num1 y $Num2 es: <b>%d</b><br>", $Num1 - $Num2 );
printf("La multiplicacin de $Num1 y $Num2 : <b>%d</b><br>", $Num1 * $Num2 );
printf("La division de $Num1 y $Num2: <b>%0.2f</b><br>", $Num1 / $Num2 );
printf("El modulo de $Num1 y $Num2 es <b>%0.1f</b><br>", $Num1 % $Num2 );
?>

Dado un nmero entero positivo determine si es par o impar


El numero 8 es par
<html>
<title> Numero Par o impar </title>
<body>
<?php
$numero=8;
if($numero>0){
if($numero%2==0)
printf("El numero %d es par",$numero);
else
printf("El numero %d es impar",$numero);
}
else
printf("El Numero no es entero positivo");
?>
</body>
</html>

Obtener el mayor de dos numeros enteros positivos


Numero 1= 15
Numero 2= 30
El mayor es 30

<HTML>
<HEAD>
<TITLE> Mi Pagina </TITLE>
</HEAD>
<BODY>
<CENTER>
PROGRAMACION PHP <BR>
</CENTER>
<?
$numero1=15; $numero2=30;
$mayor=0;
if ($numero1 > $numero2)
$mayor=$numero1;
else
$mayor=$numero2;

echo "Numero 1= $numero1 <BR>";


echo "Numero 2= $numero2 <BR>";

echo "El mayor es $mayor";


?>
</BODY>
</HTML>

Dado un nmero del 1 al 7 indique a que da de la semana corresponde


<html>
<title> Dia de la Semana </title>
<body>
<?php
$numero=3;
if($numero>=1 && $numero<=7){
switch($numero){
case 1: $dia="Domingo"; break;
case 2: $dia="Lunes"; break;
case 3: $dia="Martes"; break;
case 4: $dia="Miercoles"; break;
case 5: $dia="Jueves"; break;
case 6: $dia="Viernes"; break;
case 7: $dia="Sbado"; break;
}
echo "El dia de la semana que le corresponde es $dia";
}
else
printf("El Numero no est en el rango de 1 a 7");
?>
</body>
</html>

Presentar una tabla de multiplicar

PROGRAMACION PHP
TABLA DE MULTIPLICAR
5 X 1 =5
5 X 2 =10
5 X 3 =15
5 X 4 =20
5 X 5 =25
5 X 6 =30
5 X 7 =35
5 X 8 =40
5 X 9 =45
5 X 10 =50
<HTML>
<HEAD><TITLE> Tabla de multiplicar </TITLE> </HEAD>
<BODY>
<CENTER> <H2> INSTITUTO SUPERIOR TECNOLOGICO
METROPOLITANO</H2>
PROGRAMACION PHP <BR>
TABLA DE MULTIPLICAR <BR>
</CENTER>
<?
$tabla=5;
for($x=1;$x<=10;$x++)
echo "$tabla X $x =". $tabla * $x."<BR>";
?>
</BODY>
</HTML>
TERCERA PRACTICA DE PHP

ENVIO DE DATOS DE UN FORMULARIO

El proceso para el manejo de FORMULARIOS requiere generalmente dos pginas, una que
implementa el formulario y otra que procesa los datos cargados en el formulario.
La estructura mnima de un formulario es la siguiente: para la entrada de un nombre de persona, un
objeto text y un botn para el envo del dato al servidor:

<html>
<head>
<title>Formulario de entrada del dato</title>
</head>
<body>
<form method="post" action="pagina2.php">
Ingrese su nombre:
<input type="text" name="nombre">
<br>
<input type="submit" value="confirmar">
</form>
</body>
</html>

Esta pgina est completamente codificada en HTML, es decir un formulario contiene marcas
HTML puras.
La marca <form> y </form> nos permite definir un formulario en la pgina. La marca FORM tiene
dos propiedades que debemos inicializar obligatoriamente: action y method. La propiedad action
indica el nombre del archivo que recibir los datos ingresados por el operador en el formulario y
que sern enviados al servidor cuando se presione el botn (submit). La propiedad method indica
como se organizan esos datos para enviarlos al servidor, pudiendo ser mediante los mtodos post o
get (normalmente los datos de un formulario se envian mediante el mtodo post).
Para crear un cuadro de texto para el ingreso del nombre debemos definir un objeto de tipo "text" y
darle un nombre:
<input type="text" name="nombre">
La propiedad type nos permite definir el tipo de control y con la propiedad name indicamos el
nombre del control.
Por ltimo todo formulario tiene un botn de tipo submit:
<input type="submit" value="confirmar">
Tambin utilizamos la marca input pero en la propiedad type indicamos que se trata de un botn de
envio de datos. En la propiedad value indicamos el texto que queremos que aparezca en el botn.
Ahora necesitamos una pgina con un pequeo programa en PHP que procese los datos ingresados
en el formulario:

<html>
<head>
<title>Captura de datos del form</title>
</head>
<body>
<?php
echo "El nombre ingresado es:";
echo $_REQUEST['nombre'];
?>
</body>
</html>
Para acceder al dato en PHP se cuenta con un vector llamado $_REQUEST indicando como
subndice el nombre del cuadro de texto que definimos en el formulario (dicho nombre es sensible a
maysculas y minsculas)
En nuestro problema slo mostramos por pantalla el valor ingresado en la pgina anterior:
echo $_REQUEST['nombre'];

Ejemplo1:
Pagina1.php
<html>
<head>
<title>Formulario de entrada del dato</title>
</head>
<body>
<form method="post" action="pagina2.php">
Ingrese su nombre:
<input type="text" name="nombre">
<br>
<input type="submit" value="confirmar">
</form>
</body>
</html>

Pgina2.php
<html>
<head>
<title>Captura de datos del form</title>
</head>
<body>
<?php
echo "El nombre ingresado es:";
echo $_REQUEST['nombre'];
?>
</body>
</html>

Ejemplo2:
Pgina3.php
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php" method="post">
Ingrese primer valor:
<input type="text" name="valor1">
<br>
Ingrese segundo valor:
<input type="text" name="valor2">
<br>
<input type="radio" name="radio1" value="suma">sumar
<br>
<input type="radio" name="radio1" value="resta">restar
<br>
<input type="submit" name="operar">
</form>
</body>
</html>

Pagina4.php
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
if ($_REQUEST['radio1']=="suma")
{
$suma=$_REQUEST['valor1'] + $_REQUEST['valor2'];
echo "La suma es:".$suma;
}
else
{
if ($_REQUEST['radio1']=="resta")
{
$resta=$_REQUEST['valor1'] - $_REQUEST['valor2'];
echo "La resta es:".$resta;
}
}
?>
</body>
</html>

Ejemplo3:
Pagina5.php
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina6.php" method="post">
Ingrese primer valor:
<input type="text" name="valor1">
<br>
Ingrese segundo valor:
<input type="text" name="valor2">
<br>
<input type="checkbox" name="check1">sumar
<br>
<input type="checkbox" name="check2">restar
<br>
<input type="submit" name="operar">
</form>
</body>
</html>

Pagina6.php
<html>
<head>
<title>Problema</title>
</head>
<body>

<?php
if (isset($_REQUEST['check1']))
{
$suma=$_REQUEST['valor1'] + $_REQUEST['valor2'];
echo "La suma es:".$suma."<br>";
}
if (isset($_REQUEST['check2']))
{
$resta=$_REQUEST['valor1'] - $_REQUEST['valor2'];
echo "La resta es:".$resta;
}
?>
</body>
</html>

Ejemplo4:
Pagina7.php
<html>
<head>
<title>Problema</title>
</head>
<body>

<form action="pagina8.php" method="post">


Ingrese primer valor:
<input type="text" name="valor1">
<br>
Ingrese segundo valor:
<input type="text" name="valor2">
<br>
<select name="operacion">
<option value="suma">sumar</option>
<option value="resta">restar</option>
</select>
<br>
<input type="submit" name="operar">
</form>

</body>
</html>
Pagina8.php
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
if ($_REQUEST['operacion']==suma)
{
$suma=$_REQUEST['valor1'] + $_REQUEST['valor2'];
echo "La suma es:".$suma;
}
else
{
if ($_REQUEST['operacion']==resta)
{
$resta=$_REQUEST['valor1'] - $_REQUEST['valor2'];
echo "La resta es:".$resta;
}
}
?>
</body>
</html>

Ejemplo5
Pagina9.php
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina10.php" method="post">
Ingrese nombre:<input type="text" name="nombre"><br>
Ingrese su curriculum:<br>
<textarea name="curriculum"></textarea>
<br>
<input type="submit" value="Confirmar">
</form>
</body>
</html>

Pagina10.php
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
echo "El nombre ingresado:".$_REQUEST['nombre'];
echo "<br>";
echo "El curriculum:".$_REQUEST['curriculum'];
?>
</body>
</html>

Ejemplo6:
Pagina11.php
<body bgcolor="#D2EBF7">
<h1>Clculo de Sueldo</h1>
<form method="post" action="pagina12.php">
<b>Dias Trabajados:</b><input type="text" name="dt"><br>
<b>Horas por Da:</b><input type="text" name="hd"><br>
<b>Costo por Hora:</b><input type="text" name="ch"><br>
<input type="submit" value="Enviar">
<input type="reset" value="Limpiar">
</form>
</body>

Pagina12.php
<body bgcolor="#D2EBF7">
<?php
$total = $_POST["dt"] * $_POST["hd"] * $_POST["ch"];
$ir = $total * 0.10; # Impuesto a la renta
$is = $total * 0.017; # Impuesto de solidaridad
$neto = $total - $ir - $is;
?>
<h1>Clculo de Sueldo</h1>
<table border=1 width=400>
<tr>
<th align=center colspan=2 border=0>Datos</th>
</tr>
<tr>
<td width=70%><b>Das trabajados</b></td>
<td><?php echo $_POST["dt"] ?></td>
</tr>
<tr>
<td><b>Horas por da</b></td>
<td><?php echo $_POST["hd"] ?></td>
</tr>
<tr>
<td><b>Costo por hora</b></td>
<td><?php echo $_POST["ch"] ?></td>
</tr>
<tr>
<th align=center colspan=2 border=0>
Resultado
</th>
</tr>
<tr>
<td><b>Total</b></td>
<td><?php echo $total ?></td>
</tr>
<tr>
<td><b>Impuesto Renta</b></td>
<td><?php echo $ir ?></td>
</tr>
<tr>
<td><b>Impuesto Solidaridad</b></td>
<td><?php echo $is ?></td>
</tr>
<tr>
<td><b>Neto</b></td>
<td><?php echo $neto ?></td>
</tr>
</table>
<input type="button" value="Back" onClick="history.back()">
</body>

Ejemplo7:
Pagina13.php
<body bgcolor="#D2EBF7">
<form method=post action="pagina14.php">
<b>Nombre:</b>
<input type="text" name="nombre" size="20" maxlength="20" ><br>
<b>Email:</b>
<input type="text" name="email" size="20" maxsize="20"><br>
<input type="submit" value="Enviar">
<input type="reset" value="Limpiar">
</form>
</body>

Pagina14.php
<body bgcolor="#D2EBF7">
<?php
echo "<b>Su nombre es:</b> $nombre<br>";
echo "<b>Su Email:</b> $email<br>";
?>
<input type="button" value="Back" onClick="history.back()">
</body>

Ejemplo8:
Pagina15.php
<html>
<title> Suma de dos numeros </title>
<body>
<form action="pagina16.php" method="post">
<center>
<h1> Suma de dos numeros </h1>
<p> Numero 1 <input type="text" align="LEFT" name="numero1" />
<p> Numero 2 <input type="text" align="LEFT" name="numero2" />
<br> <br>
<input type="submit" src="obtenersuma.php" name="enviar" value="Enviar" />
</center>
</form>
</body>
</html>
Ejemplo9
Pagina16.php
<html>
<body>
<?php
if($enviar){
$resultado=$numero1 + $numero2;
echo "Resultado= $resultado";
}
?>
</body>
</html>

Ejemplo10:
Pagina17.php
<html>
<title> Probar script </title>
<body>
<center>
<p> Numero 1 <input type="text" align="LEFT" name="numero1" />
<p> Numero 2 <input type="text" align="LEFT" name="numero2" />
<p> Total Suma <input type="text" value="0" align="LEFT"
name="total" readonly="readonly"/>
<br> <br>
<input type="button" value="Sumar"
name="suma" onclick="sumar_datos(numero1.value,numero2.value,total)"/>
<input type="button" value="Limpiar"
name="borrar" onclick="limpiar(numero1,numero2,total)"/>
</center>
</body>
<script languaje="javascript">
function sumar_datos(n1,n2,inputtext){
var numero1=parseInt(n1);
var numero2=parseInt(n2);
inputtext.value= numero1 + numero2;
}
function limpiar(num1,num2,tot){
num1.value="";
num2.value="";
tot.value="";
tot.focus;
}

</script>
</html>

Ejemplo11:
Pagina18.php

<body bgcolor="#D2EBF7">
<?php
if(!isset($_POST["control"])){
?>
<h3>Calculo del Area de de Triangulo</h3>
<form method="post" action="pagina18.php">
<input type="hidden" name="control" value="12345">
Base:<input type="text" name="base"><br>
Altura:<input type="text" name="altura"><br>
<input type="submit" value="Enviar">
</form>
<?php
}
else {
$base = $_POST["base"];
$altura = $_POST["altura"];
$area = $base * $altura / 2;
echo "<h3>Resultado</h3>";
echo "\$base = $base <br>";
echo "\$altura = $altura <br>";
echo "\$area = $area <br>";
echo "<a href='pagina18.php'>Nuevo Calculo</a>";
}
?>
</body>

Ejemplo12
Pagina19.php
<body bgcolor="#D2EBF7">
<?php
if(!isset($_POST["seguro"])){
?>
<h3>Ingrese un Nmero Entero</h3>
<form method = "post" action = "pagina19.php">
<b>Nmero:</b>
<input type="text" name="n" size="3" maxlength="3"><br>
<input type="hidden" name="seguro" value="alianza">
<input type="submit" value="Enviar">
</form>
<?php
}
else{
$n = $_POST["n"];
if(!is_numeric($n)){
$msg = "El dato ingresado no es un nmero";
}
else{
if((float)$n != (int)$n){
$msg = "El nmero ingresado no es un entero";
}
else{
$n = (int)$n;
$r = $n % 2;
if($r==0){
$msg = "Es un nmero PAR";
}
else{
$msg = "Es un nmero IMPAR";
}
$msg = "\$n = $n<br>" . $msg;
}
}
echo $msg . "<br>";
echo "<a href=pagina19.php>Nueva Prueba</a>";
}
?>
</body>

Ejemplo13
Pagina20.php
<body bgcolor="#D2EBF7">
<?php
if(!isset($_POST["seguro"])){
?>
<h3>Calculo de Promedio</h3>
<form method = "post" action = "pagina20.php">
<b>Nota 1:</b>
<input type="text" name="n1" size="2" maxlength="2"><br>
<b>Nota 2:</b>
<input type="text" name="n2" size="2" maxlength="2"><br>
<input type="hidden" name="seguro" value="alianza">
<input type="submit" value="Enviar">
</form>
<?php
}
else{
// Datos
$n1 = (float)$_POST["n1"];
$n2 = (float)$_POST["n2"];
// Proceso
$pr = ($n1 + $n2) / 2;
if($pr >= 18){ $cond = "Excelente"; }
elseif($pr >= 15){ $cond = "Bueno"; }
elseif($pr >= 11){ $cond = "Regular"; }
elseif($pr >= 6){ $cond = "Malo"; }
else{$cond = "Psimo"; }
// Reporte
echo "Nota 1: $n1<br>";
echo "Nota 2: $n2<br>";
echo "Promedio: $pr<br>";
echo "Condicin: $cond<br>";
echo "<a href='pagina20.php'>Otros Datos</a>";
}
Ejemplo14
Pagina21.php

<body bgcolor="#D2EBF7">
<?php
if(!isset($_POST["ciudad"])){
?>
<h3>Conoce el Per</h3>
<form method = "post" action = "pagina21.php">
<b>Ciudad a visitar:</b>
<select size="1" name="ciudad">
<option value="1">Chiclayo</option>
<option value="2">Trujillo</option>
<option value="3">Cajamarca</option>
<option value="4">Iquitos</option>
<option value="5">Huaraz</option>
<option value="6">Huancayo</option>
<option value="7">Arequipa</option>
<option value="8">Cuzco</option>
</select>
<br><input type="submit" value="Enviar">
</form>
<?php
}
else{
$ciudad = $_POST["ciudad"];
echo "Ciudad seleccionada: $ciudad<br>";
switch($ciudad){
case 1:
echo "Chiclayo, ciudad de la amistad.";
break;
case 2:
echo "Trujillo, ciudad de la eterna primavera.";
break;
case 3:
echo "Cajamarca, simplemente una ciudad espectacular.";
break;
case 4:
echo "Iquitos, no te podras olvidar de sus encantos";
break;
case 5:
echo "Huaraz, sus nevados son impresionantes.";
break;
case 6:
echo "Huancayo, ciudad INCONTRASTABLE.";
break;
case 7:
echo "Arequipa, lo mejor es su gente.";
break;
case 8:
echo "Cuzco, quedaras encantado.";
break;
}
echo "<br><a href='pagina21.php'>Nueva Seleccin</a>";
}
?></body>
Ejemplo15
Pagina22.php
<body bgcolor="#D2EBF7">
<?php
if(!isset($_POST["seguro"])){
?>
<h3>Dos Nmeros Enteros</h3>
<form method = "post" action = "pagina22.php">
N1: <input type="text" name="n1" size="3"> <br>
N2: <input type="text" name="n2" size="3"> <br>
<input type="hidden" name="seguro" value="12345">
<input type="submit" value="Enviar">
</form>
<?php
}
else{
$n1 = $_POST["n1"];
$n2 = $_POST["n2"];
echo "<table border='1' width='200'>";
echo "<tr>";
echo "<th>Nmero</th>";
echo "<th>Mltiplo de 3</th>";
echo "</tr>";
while ($n1 <= $n2){
echo "<tr>";
echo "<td>$n1</td>";
if($n1%3 == 0){ echo "<td>Si</td>"; }
else{ echo "<td>No</td>"; }
echo "</tr>";
$n1++;
}
echo "</table>";
echo "<br><a href='pagina22.php'>Nueva Prueba</a>";
}
?>
</body>

Ejemplo16
Pagina23.php
<body bgcolor="#D2EBF7">
<?php
if(!isset($_POST["seguro"])){
?>
<h2>Tabla de Multiplicar</h2>
<form method = "post" action = "pagina23.php">
Nmero <input type="text" name="n" size="2">
<input type="hidden" name="seguro" value="12345">
<input type="submit" value="Enviar">
</form>
<?php
}
else{
$n = $_POST["n"];
$k = 1;
echo "<table>";
do{
$r = $n * $k;
echo "<tr>";
echo "<td>$n<td>";
echo "<td>*<td>";
echo "<td>$k<td>";
echo "<td>=<td>";
echo "<td>$r<td>";
echo "<tr>";
} while ($k++ < 12);
echo "</table>";
echo "<a href='pagina23.php'>Nueva Prueba</a>";
}
?>
</body>

Ejemplo17
Pagina24.php
<body bgcolor="#D2EBF7">
<?php
if(!isset($_POST["seguro"])){
?>
<h2>Calculo de Factorial</h2>
<form method = "post" action = "pagina24.php">
Nmero <input type="text" name="n" size="2" maxlength="2">
<input type="hidden" name="seguro" value="12345">
<input type="submit" value="Enviar">
</form>
<?php
}
else{
$n = $_POST["n"];
for ($i = 2, $f = 1; $i <= $n; $i++ ) {
$f *= $i;
};
echo "Nmero: $n <br>";
echo "Factorial: $f <br>";;
echo "<a href='pagina24.php'>Nueva Prueba</a>";
}
?>
</body>
Ejemplo18
Pagina25.php
<body bgcolor="#D2EBF7">
<?php
if(!isset($_POST["seguro"])){
?>
<h2>Nmero Primo</h2>
<form method = "post" action = "pagina25.php">
Nmero <input type="text" name="n" size="2" maxlength="2">
<input type="hidden" name="seguro" value="12345">
<input type="submit" value="Enviar">
</form>
<?php
}
else{
$n = (int)$_POST["n"];
$esPrimo = 1;
$k = 2;
while ($k < $n And $esPrimo == 1) {
if (($n % $k) == 0) { $esPrimo = 0; }
$k ++;
}
if ($esPrimo == 1){ $msg = "Primo"; }
else { $msg = "No es Primo"; }
echo "Nmero: $n <br>";
echo "Condicin: $msg <br>";
echo "<a href='pagina25.php'>Nueva Prueba</a>";
}
?>
</body>

Ejemplo19
Pagina26.php
<body bgcolor="#D2EBF7">
<h2>Serie de Fibonacci</h2>
<table>
<tr>
<td valign="top" width = "100">
<form method = "post" action = "pagina26.php">
N <input type="text" name="n" size="2" maxlength="2"><br>
<input type="submit" value="Enviar">
</form>
</td>
<td valign="top" width="250">
<?php
if( isset($_POST["n"]) ) {
$n = $_POST["n"];
if ($n <= 2){ echo "Debe ingresar un nmero mayor que 2."; }
else {
$cad = "0 1"; $a = 0; $b = 1;
for( $k = 3; $k <= $n; $k++ ) {
$c = $a + $b;
$cad .= " $c";
$a = $b;
$b = $c;
}
echo "N: $n <br>";
echo "Serie: <br>";
echo "<textarea name='resultado' rows='4' cols='20' readonly='true'>";
echo $cad;
echo "</textarea>";
}
}
?>
</td>
</tr>
</table>
</body>

Ejemplo20
Pagina27.php
<body bgcolor="#D2EBF7">
<?php
if( isset($_POST["saldo"]) ){
$saldo = (double)$_POST["saldo"];
$tipo = $_POST["tipo"];
$importe = (integer)$_POST["importe"];
$msg = "Saldo Actual: $saldo <br>";
$msg .= "Tipo: $tipo <br>";
$msg .= "Importe: $importe <br>";
if( $tipo == "D"){
$saldo += $importe;
$msg .= "Nuevo Saldo: $saldo<br>";
}
else{
if( ($saldo - $importe) < 0 ){
$msg = "Operacin no es posible. <br>";
$msg .= "No tiene fondos suficientes. <br>";
}
else{
$saldo -= $importe;
$msg .= "Nuevo Saldo: $saldo<br>";
}
}
}
else{ $saldo = 5000.0; }
?>
<h3>Movimiento Bancario</h3>
Saldo: <?php echo $saldo; ?><br>
<form method = "post" action = "pagina30.php">
Tipo:
<select name="tipo" size="1">
<option value="D">Depsito</option>
<option value="R">Retiro</option>
</select><br>
Importe <input type="text" name="importe" size="4" maxlength="4"><br>
<input type="hidden" name="saldo" value="<?php echo $saldo; ?>">
<input type="submit" value="Enviar">
<input type="reset" value="limpiar">
</form>
<hr size="2">
<?php
if( isset($msg) ) {
echo $msg;
echo "<hr size='2'>";
}
?>

Ejemplo21
Pagina28.php
<body bgcolor="#D2EBF7">
<h3>Divisores de un Nmero</h3>
<table>
<tr>
<td valign="top" width = "100">
<form method = "post" action = "pagina28.php">
N <input type="text" name="n" size="3" maxlength="3"><br>
<input type="submit" value="Enviar">
</form>
</td>
<td valign="top" width="250">
<?php
if( isset($_POST["n"]) ) {
$n = $_POST["n"];
$msg = "";
for( $j = 2; $j < $n; $j++ ) {
if( ($n % $j) == 0 ) { $msg .= "$j "; }
}
if( $msg == "") { $msg = "Es un nmero primo."; }
echo "N: $n <br>";
echo "Divisores: <br>";
echo "<textarea name='resultado' rows='4' cols='20' readonly='true'>";
echo $msg;
echo "</textarea>";
}
?>
</td>
</tr>
</table>
</body>

Ejemplo22
Pagina29.php
<body bgcolor="#D2EBF7">
<h3>Palndromos</h3>
<table>
<tr>
<td valign="top" width = "250">
<form method = "post" action = "pagina33.php">
Cadena <br>
<input type="text" name="cad" size="30" maxlength="30"><br>
<input type="submit" value="Enviar">
</form>
</td>
</tr>
<tr>
<td valign="top" width="250">
<?php
if( isset($_POST["cad"]) ) {
$cad = $_POST["cad"];
$cadinv = ""; // Cadena invertida
for( $j = 0; $j < strlen($cad); $j++ ) {
$cadinv = substr( $cad, $j, 1) . $cadinv;
}
if( $cad == $cadinv) { $msg = "Se trata de un palndromo."; }
else{ $msg = "No es un palndromo"; }
echo "Cadena: $cad <br>";
echo "Resultado: $msg";
}
?>
</td>
</tr>
</table>
</body>
CONTROLES EN FORMULARIOS

Para que un control enve informacin es necesario:

que el control est incluido en un formulario (<form>).


que el formulario tenga establecido el atributo action, con la direccin absoluta o relativa del
fichero php que procesar la informacin
que el control tenga establecido el atributo name
Nota: el atributo name puede contener cualquier carcter (nmeros, acentos, guiones, etc),
pero si contiene espacios, PHP sustituye los espacios por guiones bajos (_) al procesar los
datos enviados.
que el formulario contenga un botn de tipo submit

El siguiente ejemplo muestra un formulario vlido (ejemplo.htm):


<form action="ejemplo.php">
<p>Nombre: <input type="text" name="nombre" /></p>
<p><input type="submit" value="Enviar" /></p>
</form>

El programa que recibe los datos los guarda automticamente en la matriz $_REQUEST. Mediante
la orden print_r($_REQUEST) se puede mostrar el contenido de la matriz $_REQUEST.
El siguiente ejemplo muestra lo que escribira el programa PHP (ejemplo.php) si recibiera la
informacin del formulario anterior (ejemplo.html).
Print_r : Funcin que muestra informacin sobre una variable en el modo que es ledo por las
personas.
<?php
print_r($_REQUEST);
?>
CAJA DE TEXTO, CAJA DE CONTRASEA Y AREA DE TEXTO

Cdigo fuente Control $_REQUEST


<input type="text" name="cajatexto1" />
Array ( [cajatexto1]
=> )
<input type="text" name="cajatexto2" Array ( [cajatexto2]
value="Cualquier cosa" /> => Cualquier cosa )
<input type="password" Array (
name="cajapassword1" /> [cajapassword1] => )
<input type="password" Array (
name="cajapassword2" value="pezespada" [cajapassword2] =>
/> pezespada )

<textarea rows="4" cols="20" Array (


name="areadetexto1"></textarea> [areadetexto1] => )
<textarea rows="4" cols="20" Array (
name="areadetexto2">Cualquier [areadetexto2] =>
cosa</textarea> Cualquier cosa )

CASILLA DE VERIFICACION
Este control se enva solamente si se marca la casilla. El valor enviado es "on" si la casilla no tiene
definido el atributo value o el valor del atributo value si ste est definido.
Cdigo fuente Control $_REQUEST

<input type="checkbox" name="casilla1" /> (sin Array ( )


marcar)

<input type="checkbox" name="casilla2" />


Array ( [casilla2] =>
(marcada) on )
<input type="checkbox" name="casilla3" Array ( [casilla3] =>
value="Tres" /> (marcada) Tres )

BOTON RADIO
Este control se enva solamente si se marca alguno de los botones radio que forman el control. El
valor enviado es "on" si el botn marcado no tiene definido el atributo value o el valor del atributo
value si ste est definido.

Cdigo fuente Control $_REQUEST


<input type="radio" name="radio1" />
<input type="radio" name="radio1" /> (sin marcar) Array ( )

<input type="radio" name="radio2" /> (marcado Array ( [radio2] => on


<input type="radio" name="radio2" /> )
uno)
<input type="radio" name="radio3" /> (marcado Array ( [radio3] => on
<input type="radio" name="radio3" /> )
otro)
<input type="radio" name="radio4"
value="Uno" /> (marcado Array ( [radio4] =>
<input type="radio" name="radio4" Uno )
value="Dos" />
uno)
<input type="radio" name="radio5"
value="Uno" /> (marcado Array ( [radio5] =>
<input type="radio" name="radio5" Dos )
otro)
value="Dos" />

MENU
Este control enva siempre la opcin elegida. El valor enviado es el contenido de la etiqueta option
elegida si la opcin elegida no tiene definido el atributo value o el valor del atributo value si ste
est definido.
Si el men admite seleccin mltiple, entonces el nombre del men debe acabar con corchetes ([]) y
se enva como una matriz, de tantos elementos como opciones se hayan elegido.
Cdigo fuente Control $_REQUEST
<select name="menu1">
<option
selected="selected"></option> Array ( [menu1] => )
<option></option>
</select>
<select name="menu2">
<option selected="selected">Opcin
1</option>
Array ( [menu2] =>
<option>Opcin 2</option> Opcin 1 )
</select>
<select name="menu3">
<option selected="selected"
value="Uno">Opcin 1</option>
<option value="Dos">Opcin Array ( [menu3] => Uno )
2</option>
</select>
<select name="menu4[]" size="3"
multiple="multiple">
<option selected="selected">Opcin Array ( [menu4] => Array
1</option> ( [0] => Opcin 1 [1] =>
<option>Opcin 2</option> Opcin 3 ) )
<option>Opcin 3</option>
(Marcados 1 y 3)
</select>

CONTROL OCULTO
Este control se enva siempre y el valor enviado es el valor del atributo value.
Cdigo fuente Control $_REQUEST
<input type="hidden" name="oculto1" /> Array ( [oculto1] => )
<input type="hidden" name="oculto2" Array ( [oculto2] =>
value="Cualquier cosa" /> Cualquier cosa

IMAGEN
El control de tipo imagen inserta una imagen que funciona como un botn. Al hacer clic en un
punto de la imagen es como si se hubiera pulsado a un botn submit y se envan las coordenadas del
punto en el que se ha hecho clic
Cdigo fuente Control $_REQUEST

<input type="image" name="GNU" Array ( [GNU_x] => 89


alt="GNU" src="gnu.jpg" /> [GNU_y] => 111 )

RECOGIDA DE DATOS
Matriz $_REQUEST

Cuando se enva un formulario, PHP almacena la informacin recibida en una matriz llamada
$_REQUEST. El nmero de valores recibidos y los valores recibidos dependen tanto del
formulario como de la accin del usuario.
Cualquier control se enva solamente si est establecido su atributo name. El atributo name del
control puede contener cualquier carcter (nmeros, acentos, guiones, etc), pero si contiene
espacios, los espacios se sustituyen por guiones bajos (_). Cada control crea un elemento de la
matriz $_REQUEST, que se identifica como $_REQUEST[valor_del_atributo_name] y que
contiene el valor entregado por el formulario (en su caso).
El siguiente ejemplo muestra un ejemplo de formulario:
<form action="ejemplo.php">
<p>Nombre: <input type="text" name="nombre" /></p>
<p><input type="submit" value="Enviar" /></p>
</form>

Mientras se est programando, para comprobar que el fichero php est recibiendo la informacin
enviada por el control, lo ms fcil es utilizar la funcin print_r($matriz) para mostrar el contenido
de la matriz $_REQUEST. Una vez se ha comprobado que la informacin llega correctamente, la
lnea se debe comentar o eliminar.
Ejemplo de print_r($matriz)
<pre>
<?php
$a = array ('a' => 'manzana', 'b' => 'banano', 'c' => array ('x', 'y', 'z'));
print_r ($a);
?>
</pre>

El resultado del ejemplo sera:


Array
(
[a] => manzana
[b] => banano
[c] => Array
(
[0] => x
[1] => y
[2] => z
)
)

El siguiente ejemplo muestra lo que escribira el programa PHP si recibiera la informacin del
formulario anterior.

<?php Array
Nombre: print "<pre>"; (
print_r($_REQUEST); [nombre] => Pepito
print "</pre>\n"; Conejo
print "<p>Tu nombre es )
$_REQUEST[nombre]</p>";
?>
Tu nombre es Pepito Conejo

Conviene colocar etiquetas <pre> alrededor del print_r($_REQUEST) para facilitar la lectura de
los valores.

REFERENCIA A $_REQUEST DENTRO DE CADENAS

Al hacer referencia a los elementos de la matriz $_REQUEST, hay que tener en cuenta si la
referencia se encuentra dentro de una cadena o fuera de ella.

Si se hace referencia dentro de una cadena al control de nombre "nombre", se debe escribir
$_REQUEST[nombre] (sin comillas). Si se escribe $_REQUEST['nombre'] (con comillas)
se produce un error.

<?php Parse error: parse error, expecting T_STRING or


print "<p>Tu nombre es
$_REQUEST['nombre']</p>"; T_VARIABLE or T_NUM_STRING in ejemplo.php
?> on line 2

<?php
print "<p>Tu nombre es $_REQUEST[nombre]</p>"; Tu nombre es Pepito Conejo
?>

COMPROBACION DE EXISTENCIA
La mayora de controles aparecen en la matriz $_REQUEST aunque el usuario no escriba nada en el
formulario. El valor almacenado es una cadena vaca, pero est definida. Si el programa supone que
se ha introducido algn valor, el resultado puede confundir al usuario .

<?php Array (
Nombre: print "<pre>"; [nombre] =>
print_r($_REQUEST); print )
"</pre>\n";
Tu nombre es
print "<p>Tu nombre es
$_REQUEST[nombre]</p>";
?>

Por lo que conviene incluir una estructura if ... else que considere la posibilidad de que no se haya
escrito nada en el formulario:

<?php Array (
Nombre: print "<pre>"; [nombre] =>
print_r($_REQUEST); print )
"</pre>\n";
No has escrito ningn nombre
if
($_REQUEST['nombre']=="")
{
print "<p>No has
escrito ningn
nombre</p>";
} else {
print "<p>Tu nombre
es
$_REQUEST[nombre]</p>";
}
?>

Sin embargo, las casillas de verificacin y los botones radio solamente estn definidos en la matriz
$_REQUEST si se han marcado en el formulario. Por ejemplo, si en el siguiente formulario:
<form action="ej.php"> Deseo recibir
<p>Deseo recibir informacin: <input type="checkbox"
name="acepto" /></p> informacin:
<p><input type="submit" value="Enviar" /></p>
</form>

El usuario no marca la casilla, la matriz $_REQUEST no contiene ningn dato:


<?php Array (
Deseo recibir informacin: print "<pre>"; )
print_r($_REQUEST); print
"</pre>\n";
?>

Y al pretender utilizar el valor, no aparece nada


Deseo recibir informacin: <?php
print
"<p>$_REQUEST[acepto]</p>\n";
?>

Este problema se resuelve comprobando que el ndice est definido antes de hacer referencia a l,
utilizando la funcin isset($variable), que admite como argumento una variable y devuelve 1
(Verdadero) si existe y 0 (Falso) si no existe.
Deseo recibir informacin: <?php No deseas recibir informacin
if
(isset($_REQUEST['acepto']))
{
print "<p>Deseas recibir
informacin</p>";
} else {
print "<p>No deseas
recibir informacin</p>";
}
?>

Deseo recibir informacin: <?php Deseas recibir informacin


if
(isset($_REQUEST['acepto']))
{
print "<p>Deseas recibir
informacin</p>";
} else {
print "<p>No deseas
recibir informacin</p>";
}
?>

En realidad es conveniente efectuar siempre la verificacin de existencia, para prevenir los casos en
que un usuario intente acceder a la pgina php sin pasar por el formulario.

SEGURIDAD EN LAS ENTRADAS


Un usuario puede insertar cdigo html en la entrada de un formulario, lo que puede acarrear
comportamientos inesperados y riesgos de seguridad. El siguiente ejemplo solamente perjudicara al
aspecto de la pgina:
<?php Array (
Nombre: print "<pre>"; [nombre] => Pepito
print_r($_REQUEST); print Conejo
"</pre>\n"; )

print "<p>Tu nombre es


Tu nombre es Pepito Conejo
$_REQUEST[nombre]</p>";
?>

Para evitarlo, se puede utilizar la funcin strip_tags($cadena), que elimina todas las etiquetas html,
como en el siguiente ejemplo.
Nombre: <?php Array (
print "<pre>"; print_r($_REQUEST); print [nombre] =>
"</pre>\n"; Pepito Conejo
print "<p>Tu nombre )
es".strip_tags($_REQUEST['nombre'])."</p>";
?>
Tu nombre es Pepito
Conejo

Otra funcin que conviene aplicar a cualquier entrada de formulario es la funcin trim($cadena),
que elimina los espacios en blanco iniciales y finales y devuelve la cadena sin esos espacios.
Por ejemplo, si en el ejemplo siguiente, el usuario introduce varios espacios en blanco en vez de su
nombre, la comprobacin no servira para nada ya que la cadena con espacios en blanco no es una
cadena vaca
<?php Array (
Nombre: print "<pre>"; [nombre] =>
print_r($_REQUEST); print )
"</pre>\n";
if ($_REQUEST['nombre']
Tu nombre es
== "") {
print "<p>No has
escrito ningn
nombre</p>";
} else {
print "<p>Tu nombre
es
$_REQUEST[nombre]</p>";
}
?>

Sin embargo, si se aplica la funcin trim(), la cadena introducida queda reducida a la cadena vaca y
la comprobacin la detecta:
<?php Array (
Nombre: print "<pre>"; print_r($_REQUEST); [nombre] =>
print "</pre>\n"; )
if (trim($_REQUEST['nombre']) ==
"") {
No has escrito ningn
print "<p>No has escrito ningn nombre
nombre</p>";
} else {
print "<p>Tu nombre es
".trim($_REQUEST['nombre'])."</p>";
}
?>

COMILLAS MGICAS (MAGIC QUOTES)

Aunque actualmente se desaconseja su uso, muchos servidores (por ejemplo, XAMPP) tienen
activada la extensin magic_quotes_gpc. Cuando esta extensin est activada, PHP aade
automticamente caracteres de escape (\) delante de las comillas que se escriban en un campo de
formulario. Para eliminar esos caracteres de escape en los programas, es necesario comprobar si
estn activadas las comillas mgicas y eliminar los caracteres de escape aadidos.
El ejemplo siguiente muestra lo que ocurrira si estn activadas las comillas mgicas
(magic_quotes_gpc = On)
<?php Has escrito: Me llamo
Nombre: if ($_REQUEST['nombre'] == \"Pepe\"
"") {
print "<p>No has escrito
ningn nombre</p>";
} else {
print "<p>Has escrito:
".$_REQUEST['nombre']."</p>";
}
?>

Para eliminar los caracteres de escape, se puede utilizar la funcin get_magic_quotes_gpc() para
detectar si la extensin est activada y la funcin stripslashes() para eliminarlas.
<?php
Nombre: if ($_REQUEST['nombre'] == "") {
print "<p>No has escrito ningn
nombre</p>";
} else {
print "<p>Has escrito: ";
if (get_magic_quotes_gpc()) {
print
stripslashes($_REQUEST['nombre']);
} else {
print $_REQUEST['nombre'];
}
print "</p>";
}
?>

UTILIZACION DE VARIABLES
Si aplicamos las medidas mnimas de seguridad comentadas en el punto anterior, cualquier
referencia a $_REQUEST[control] debera sustituirse por trim(strip_tags($_REQUEST[control])).
Si adems queremos comprobar si el control est definido, el cdigo se complica.
Una solucin es guardar los valores de la matriz $_REQUEST en variables y realizar todas las
comprobaciones al definir esas variables. En el resto del cdigo basta con utilizar la variable en vez
del elemento de la matriz $_REQUEST.
<?php Array (
Nombre: print "<pre>"; print_r($_REQUEST); [nombre] =>
print "</pre>\n"; )

if (isset($_REQUEST['nombre'])) {
No has escrito ningn
$nombre = nombre
trim(strip_tags($_REQUEST['nombre']));
} else {
$nombre = "";
}
if ($nombre == "") {
print "<p>No has escrito ningn
nombre</p>";
} else {
print "<p>Tu nombre es
$nombre</p>";
}
?>
Nombre: <?php Array (
print "<pre>"; print_r($_REQUEST); [nombre] =>
print "</pre>\n"; Pepito Conejo
)
if (isset($_REQUEST['nombre'])) {
$nombre =
Tu nombre es Pepito
trim(strip_tags($_REQUEST['nombre'])); Conejo
} else {
$nombre = "";
}
if ($nombre == "") {
print "<p>No has escrito ningn
nombre</p>";
} else {
print "<p>Tu nombre es
$nombre</p>";
}
?>

La asignacin de la variable se puede realizar en una sola lnea, utilizando la notacin abreviada:
(condicin) ? verdadero : falso;:
<?php
Nombre: print "<pre>"; print_r($_REQUEST);
print "</pre>\n";
$nombre = (isset($_REQUEST['nombre']))
? trim(strip_tags($_REQUEST['nombre']))
: "";
if ($nombre == "") {
print "<p>No has escrito ningn
nombre</p>";
} else {
print "<p>Tu nombre es
$nombre</p>";
}
?>
SALIDA DE DATOS
Si los datos recogidos se escriben luego en una pgina web, hay que tener cuidado en algunos casos
especiales.

El carcter & (ampersand)

Si el usuario escribe en una entrada el carcter & (ampersand, entidad de carcter &amp;), si esa
cadena se escribe en una pgina, la pgina se ver correctamente en el navegador, pero la pgina no
ser vlida (el xhtml ser invalido).

Nombre: <?php Tu nombre es Pepito &


$nombre = Company
(isset($_REQUEST['nombre'])) ?
trim(strip_tags($_REQUEST['nombre']))
: "";

if ($nombre == "") {
print "<p>No has escrito ningn
nombre</p>";
} else {
print "<p>Tu nombre es
$nombre</p>";
}
?>

El motivo por el que la pgina es invlida es que el carcter & indica el comienzo de una entidad de
carcter. Como en nuestro caso no hay una entidad de carcter, la pgina no es vlida.

La solucin es sustituir el carcter & por su entidad de carcter correspondiente (&amp;). Eso se
puede hacer con la funcin str_replace()

Nombre: <?php Tu nombre es Pepito &


$nombre = Company
(isset($_REQUEST['nombre'])) ?
trim(strip_tags($_REQUEST['nombre']))
: "";
$nombre = str_replace('&', '&amp;',
$nombre);

if ($nombre == "") {
print "<p>No has escrito ningn
nombre</p>";
} else {
print "<p>Tu nombre es
$nombre</p>";
}
?>

El carcter " (comillas)

Si el usuario escribe en una entrada el carcter " (comillas, entidad de carcter &quot;), si esa
cadena se escribe dentro de otras comillas (por ejemplo, en el atributo value de una etiqueta input),
la pgina no se ver correctamente y adems no ser vlida.

<?php Corrige:
Nombre: $nombre =
(isset($_REQUEST['nombre'])) ?
trim(strip_tags($_REQUEST['nombre']))
: "";

if ($nombre == "") {
print "<p>No has escrito ningn
nombre</p>";
} else {
print "<p>Corrige: <input
type=\"text\" value=\"$nombre\"
/></p>";
}
?>

El problema es que el cdigo fuente contiene comillas dentro de comillas:

<p>Corrige: <input type="text" value="Me llamo "Pepe"" /></p>

Como en el caso anterior, la solucin es sustituir el carcter " por su entidad de carcter
correspondiente (&quot;). Eso se puede hacer con la funcin str_replace()

<?php
Nombre: $nombre = Corrige:
(isset($_REQUEST['nombre'])) ?
trim(strip_tags($_REQUEST['nombre']))
: "";
$nombre = str_replace('"', '&quot;',
$nombre);

if ($nombre == "") {
print "<p>No has escrito ningn
nombre</p>";
} else {
print "<p>Corrige: <input
type=\"text\" value=\"$nombre\"
/></p>";
}
?>

FUNCIONES DE RECOGIDA DE DATOS

Para tener en cuenta todos los aspectos comentados en los puntos anteriores, es conveniente definir
funciones para la recogida de datos:

La funcion recoge() del ejemplo siguiente tiene como argumento el nombre del control que
se quiere recibir y devuelve el valor recibido o una cadena vaca si el control no se ha
recibido.
Al comienzo del programa el dato recibido se almacena en una variable.
En el resto del programa se trabaja con la variable.

<?php
function recoge($var)
{
$tmp = (isset($_REQUEST[$var])) ? trim(strip_tags($_REQUEST[$var])) : '';
if (get_magic_quotes_gpc()) {
$tmp = stripslashes($tmp);
}
$tmp = str_replace('&', '&amp;', $tmp);
$tmp = str_replace('"', '&quot;', $tmp);
return $tmp;
}

$nombre = recoge('nombre');
if ($nombre == "") {
print "<p>No has escrito ningn nombre</p>";
} else {
print "<p>Tu nombre es $nombre</p>";
}
?>

Recogida de un dato con valor predeterminado

La funcin recoge() del apartado anterior se puede modificar para definir un valor predeterminado
(es decir, que si el dato no existe, la funcin devuelve el valor predeterminado enviado como
segundo argumento).

En el ejemplo siguiente, si no se recibe el nombre, se le asigna el nombre "hablador".

<?php
function recoge($var, $var2='')
{
$tmp = (isset($_REQUEST[$var])&&($_REQUEST[$var]!='')) ?
trim(strip_tags($_REQUEST[$var])) : trim(strip_tags($var2));
if (get_magic_quotes_gpc()) {
$tmp = stripslashes($tmp);
}
$tmp = str_replace('&', '&amp;', $tmp);
$tmp = str_replace('"', '&quot;', $tmp);
return $tmp;
}

$nombre = recoge('nombre', 'hablador');


print "<p>Tu nombre es $nombre</p>";
?>

Recogida de una matriz de una dimensin

Si un formulario enva los datos en forma de matriz, como en el ejemplo siguiente, la funcin
recoge() del punto anterior no servira.
<form action="ejemplo.php"> Nombre:
<p>Nombre: <input type="text" name="nombre[1]" /></p>
<p>Apellido: <input type="text" name="nombre[2]" /></p> Apellido:
<p><input type="submit" value="Enviar" /></p>
</form>

Hay que hacer otra funcin que recoja y trate los datos en forma de matriz.

La funcion recogeMatriz() del ejemplo siguiente tiene como argumento el nombre del
control que se quiere recibir (que debe ser una matriz de una dimensin, no sirve para
matrices de dos o ms dimensiones) y devuelve una matriz con los valores recibidos o una
matriz vaca si el control no se ha recibido.
Al comienzo del programa los datos recibidos se almacenan en una matriz.
En el resto del programa se trabaja con la matriz.

<?php
function recogeMatriz($var)
{
$tmpMatriz = array();
if (isset($_REQUEST[$var]) && is_array($_REQUEST[$var])) {
foreach ($_REQUEST[$var] as $indice => $valor) {
$tmp = trim(strip_tags($indice));
if (get_magic_quotes_gpc()) {
$tmp = stripslashes($tmp);
}
$tmp = str_replace('&', '&amp;', $tmp);
$tmp = str_replace('"', '&quot;', $tmp);
$indiceLimpio = $tmp;
$tmp = trim(strip_tags($valor));
if (get_magic_quotes_gpc()) {
$tmp = stripslashes($tmp);
}
$tmp = str_replace('&', '&amp;', $tmp);
$tmp = str_replace('"', '&quot;', $tmp);
$valorLimpio = $tmp;
$tmpMatriz[$indiceLimpio] = $valorLimpio;
}
}
return $tmpMatriz;
}
$nombre = recogeMatriz('nombre');
if ($nombre[1]=="") {
print "<p style=\"color:red\">No has escrito tu nombre.</p>\n";
} else {
print "<p>Tu nombre es <strong>$nombre[1]</strong>.</p>\n";
}
if ($nombre[2]=="") {
print "<p style=\"color:red\">No has escrito tu apellido.</p>\n";
} else {
print "<p>Tu apellido es <strong>$nombre[2]</strong>.</p>\n";
}
?>
COMPROBACION DE DATOS

Una vez recibido un dato normalmente es necesario comprobar si el dato es del tipo esperado
(nmero, texto, etc.) para procesarlo sin error. PHP ofrece varios conjuntos de funciones para
realizar estas comprobaciones. A continuacin se explican algunas de estas funciones:

Funciones is_
Funciones ctype_

Funciones is_

Las funciones is_ son un conjunto de funciones booleanas que devuelven si el argumento es o no de
un tipo de datos determinado
alias (funciones
Funcin Tipo de datos
equivalentes)
isset($valor) definida
is_null($valor) NULL
is_bool($valor) booleano
nmero (puede tener signo,
parte decimal y estar
is_numeric($valor) expresado en notacin
decimal, exponencial o
hexadecimal).
is_integer($valor),
is_int($valor) entero
is_long($valor)
is_double($valor),
is_float($valor) float
is_real($valor)
is_string($valor) cadena
is_binary($valor) cadena binaria
is_buffer($valor) cadena unicode o binaria
is_unicode($valor) cadena unicode
escalar (entero, float,
is_scalar($valor)
cadena o booleano)
is_array($valor) matriz
is_callable($valor) funcin
is_object($valor) object
is_resource($valor) recurso

El ejemplo siguiente muestra el uso de la funcin is_int().


<form action="edad.php">
<p>Edad: <input type="text" name="edad" /></p>
<p><input type="submit" value="Enviar" /></p>
</form>
<?php Array (
Edad: print "<pre>"; [edad] => 2.5
print_r($_REQUEST); print )
"</pre>\n";
NO has escrito un nmero
$edad = entero en tu edad.
$_REQUEST['edad'];

if (is_int($edad)) {
print "<p>Tu edad es
$edad</p>";
} else {
print "<p>NO has
escrito un nmero entero
en tu edad.</p>";
}

?>
Funciones ctype_
Las funciones ctype_ son un conjunto de funciones booleanas que devuelven si todos los caracteres
de una cadena son de un tipo determinado, de acuerdo con el juego de caracteres local. Estas
funciones son las mismas que las que proporciona la biblioteca estndar de C ctype.h.
Funcin Tipo de datos
ctype_alnum($valor) Alfanumricos
ctype_alpha($valor) alfabticos (maysculas o minsculas, con acentos, , , etc)
ctype_cntrl($valor) caracteres de control (salto de lnea, tabulador, etc)
ctype_digit($valor) Digitos
ctype_graph($valor) caracteres imprimibles (excepto espacios)
ctype_lower($valor) Minsculas
ctype_print($valor) caracteres imprimibles
signos de puntuacin (caracteres imprimibles que no son
ctype_punct($valor)
alfanumricos ni espacios en blanco)
ctype_space($valor) espacios en blanco (espacios, tabuladores, saltos de lnea, etc)
ctype_upper($valor) Maysculas
ctype_xdigit($cvalor) dgitos hexadecimales
El ejemplo siguiente muestra el uso de la funcin ctype_digit().
<?php Array (
Edad: print "<pre>"; [edad] => 2.5
print_r($_REQUEST); print )
"</pre>\n";
$edad =
NO has escrito un nmero
$_REQUEST['edad']; entero en tu edad
if (ctype_digit($edad)) {
print "<p>Tu edad es
$edad</p>";
} else {
print "<p>NO has
escrito un nmero entero
en tu edad.</p>";
}

?>
EJERCICIOS CONTROLES EN FORMULARIOS

Escribe un formulario de recogida de datos personales que conste de dos pginas.

En la primera pgina se solicitan los datos.


En la segunda pgina se muestra toda la informacin introducida por el usuario (indicando
los campos no rellenados, salvo las casillas de verificacin).

Archivo: controles_formularios_1.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"


"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
<link href="mclibre_php_soluciones.css" rel="stylesheet" type="text/css"
title="Color" />
</head>
<body>
<form action="controles_formularios_1.php" method="get">
<h1>Datos personales</h1>
<fieldset>
<legend>Formulario</legend>
<p>Escribe los datos siguientes:</p>

<table cellspacing="5">
<tbody>
<tr>
<td><strong>Nombre:</strong><br />
<input type="text" name="nombre" size="20" maxlength="20" /></td>
<td><strong>Apellidos:</strong><br />
<input type="text" name="apellidos" size="20" maxlength="20" /></td>
<td><strong>Edad:</strong><br />

<select name="edad">
<option selected="selected"></option>
<option value="1">Menos de 20 aos</option>
<option value="2">Entre 20 y 39 aos</option>
<option value="3">Entre 40 y 59 aos</option>
<option value="4">60 aos o ms</option>
</select>
</td>
</tr>
<tr>
<td><strong>Peso:<br />
</strong><input type="text" name="peso" size="3" maxlength="3" />
kg</td>
<td><strong>Sexo:</strong><br />
<input type="radio" name="sexo" value="hombre" />Hombre <input
type="radio" name="sexo" value="mujer" />Mujer</td>
<td><strong>Estado Civil:</strong><br />
<input type="radio" name="estadoCivil" value="soltero" /> Soltero
<input type="radio" name="estadoCivil" value="casado" /> Casado
<input type="radio" name="estadoCivil" value="otro" /> Otro</td>
</tr>
</tbody>
</table>

<table cellspacing="5">
<tbody>
<tr>
<td rowspan="2" class="borde"><strong>Aficiones:</strong></td>
<td><input type="checkbox" name="cine" /> Cine</td>
<td><input type="checkbox" name="literatura" /> Literatura</td>
<td><input type="checkbox" name="tebeos" /> Tebeos</td>
</tr>
<tr>
<td><input type="checkbox" name="deporte" /> Deporte</td>
<td><input type="checkbox" name="musica" /> Msica</td>
<td><input type="checkbox" name="television" /> Televisin</td>
</tr>
</tbody>
</table>

<p class="der">
<input type="submit" value="Enviar" />
<input type="reset" value="Borrar" name="Reset" /></p>
</fieldset>
</form>
</body>
</html>
Archivo: controles_formularios_1.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"


"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
<link href="mclibre_php_soluciones.css" rel="stylesheet" type="text/css"
title="Color" />
</head>

<body>
<h1>Datos personales (Resultado)</h1>
<?php
function recoge($var)
{
$tmp = (isset($_REQUEST[$var])) ? trim(strip_tags($_REQUEST[$var])) : '';
if (get_magic_quotes_gpc()) {
$tmp = stripslashes($tmp);
}
$tmp = str_replace('&', '&amp;', $tmp);
$tmp = str_replace('"', '&quot;', $tmp);
return $tmp;
}

$nombre = recoge('nombre');
$apellidos = recoge('apellidos');
$edad = recoge('edad');
$peso = recoge('peso');
$sexo = recoge('sexo');
$estadoCivil = recoge('estadoCivil');
$cine = recoge('cine');
$deporte = recoge('deporte');
$literatura = recoge('literatura');
$musica = recoge('musica');
$tebeos = recoge('tebeos');
$television = recoge('television');

if ($nombre=="") {
print "<p style=\"color:red\">No has escrito tu nombre.</p>\n";
} else {
print "<p>Tu nombre es <strong>$nombre</strong>.</p>\n";
}

if ($apellidos=="") {
print "<p style=\"color:red\">No has escrito tus apellidos.</p>\n";
} else {
print "<p>Tus apellidos son <strong>$apellidos</strong>.</p>\n";
}

if ($edad=="1") {
print "<p>Tienes <strong>menos de 20 aos</strong>.</p>\n";
} elseif ($edad=="2") {
print "<p>Tienes <strong>entre 20 y 39 aos</strong>.</p>\n";
} elseif ($edad=="3") {
print "<p>Tienes <strong>entre 40 y 59 aos</strong>.</p>\n";
} elseif ($edad=="4") {
print "<p>Tienes <strong>60 o ms aos</strong>.</p>\n";
} else {
print "<p style=\"color:red\">No has indicado tu edad.</p>\n";
}

if ($peso=="") {
print "<p style=\"color:red\">No has escrito tu peso.</p>\n";
} elseif (!is_numeric($peso)) {
print "<p style=\"color:red\">No has escrito tu peso como nmero.</p>\n";
} elseif ($peso<0) {
print "<p style=\"color:red\">Has ecrito un peso negativo.</p>\n";
} else {
print "<p>Tu peso es de <strong>$peso</strong> Kg.</p>\n";
}

if ($sexo=="hombre") {
print "<p>Eres un <strong>hombre</strong>.</p>\n";
} elseif ($sexo=="mujer") {
print "<p>Eres una <strong>mujer</strong>.</p>\n";
} else {
print "<p style=\"color:red\">No has marcado tu sexo.</p>\n";
}

if ($estadoCivil=="soltero") {
print "<p>Tu estado civil es <strong>soltero</strong>.</p>\n";
} elseif ($estadoCivil=="casado") {
print "<p>Tu estado civil es <strong>casado</strong>.</p>\n";
} elseif ($estadoCivil=="otro") {
print "<p>Tu estado civil no es <strong>ni soltero ni casado</strong>.</p>\n";
} else {
print "<p style=\"color:red\">No has marcado tu estado civil.</p>\n";
}

if (($cine=="on") || ($deporte=="on") || ($literatura=="on") ||


($musica=="on") || ($tebeos=="on") || ($television=="on")) {
print "<p>Te gusta: \n";
if ($cine=="on") {
print " <strong>el cine</strong>, \n";
}
if ($deporte=="on") {
print " <strong>el deporte</strong>, \n";
}
if ($literatura=="on") {
print " <strong>la literatura</strong>, \n";
}
if ($musica=="on") {
print " <strong>la msica</strong>, \n";
}
if ($tebeos=="on") {
print " <strong>los tebeos</strong>, \n";
}
if ($television=="on") {
print " <strong>la televisin</strong> \n";
}
print "</p>\n";
} else {
print "<p style=\"color:red\">No has marcado ninguna aficin.</p>\n";
}

print "<p><a href=\"controles_formularios_1.htm\">Volver al formulario.</a></p>\n";


?>
</body>
</html>

Archivo: mclibre_php_soluciones.css

body {
background-color: #F6F6FF;
font-family: sans-serif;
padding: 0 20px;
}

h1 {
margin: 10px;
font-size: 140%;
text-align: center;
text-transform: uppercase;
}
fieldset {
background-color: #E6E6FF;
border: #8686FF 3px solid;
padding: 10px 20px 20px;
}
legend {
background-color: white;
border: #8686FF 3px solid;
font-size: 120%;
padding: 0px 10px;
}
input {
font-family: monospace;
}
.der {
text-align: right;
margin: 10px 0px;
}
VALIDACION DE FORMULARIO

1. Escribe un programa que valide un nombre, un nmero de telfono y una direccin de correo y
que conste de una nica pgina.

La pgina solicita los datos y los valida (por ejemplo, que el nombre slo tenga letras, que el
nmero sean 9 nmeros, que la direccin de correo contenga la @, un punto y letras
inglesas, etc).
Si los datos no son vlidos, se solicitan de nuevo indicando los datos no vlidos.
Si los datos son vlidos, los datos se muestran.

Para que el atributo action del formulario o el enlace a la pgina apunte a s mismo,
independientemente de la ubicacin del archivo o de su nombre, se puede utilizar la variable
predefinida $_SERVER[PHP_SELF].
Para no repetir la cabecera tres veces, se puede crear una funcin cabecera($titulo), cuyo
argumento se utilice en <title> y <h1>.

Solucin

Archivo: validacion1_php

<?php
function cabecera($texto)
{ print "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?".">
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />
<title>$texto. Validacin. Ejercicios. PHP. Bartolom Sintes Marco</title>
<link href=\"mclibre_php_soluciones.css\" rel=\"stylesheet\" type=\"text/css\"
title=\"Color\" />
</head>\n\n<body>\n<h1>$texto</h1>\n";
}
function recoge($var)
{
$tmp = (isset($_REQUEST[$var])) ? trim(strip_tags($_REQUEST[$var])) : '';
if (get_magic_quotes_gpc()) {
$tmp = stripslashes($tmp);
}
$tmp = str_replace('&', '&amp;', $tmp);
$tmp = str_replace('"', '&quot;', $tmp);
return $tmp;
}

define('FORM_METHOD', 'get');
define('TAM_NOMBRE', 40);
define('TAM_TELEFONO', 9);
define('TAM_CORREO', 40);

$nombre = recoge('nombre');
$telefono = recoge('telefono');
$correo = recoge('correo');
$nombrePatron = '/^[[:alpha:]]+$/';
$telefonoPatron = '/^[0-9]{9}$/';
$correoPatron = '/^[[:alnum:]._-]+@[a-z]+(\.[a-z]+){1,2}$/';
$nombreOk = preg_match($nombrePatron, $nombre);
$telefonoOk = preg_match($telefonoPatron, $telefono);
$correoOk = preg_match($correoPatron, $correo);

if (isset($_REQUEST['Enviar']) && $nombreOk && $telefonoOk && $correoOk) {


cabecera("Validacin de formulario (Resultado vlido)");
print" <p>Los datos introducidos son correctos.</p>
<p>Nombre:<strong>$nombre</strong></p>
<p>Telfono:<strong>$telefono</strong></p>
<p>Correo:<strong>$correo</strong></p>
<p><a href=\"$_SERVER[PHP_SELF]\">Volver al principio</a></p>\n";
} else {
if (isset($_REQUEST['Enviar'])) {
cabecera("Validacin de formulario (Resultado invlido)");
print"<p>Por favor, corrija los datos incorrectos:</p>\n";
} else {
cabecera("Validacin de formulario (Formulario)");
print"<p>Escriba los datos siguientes:</p>\n";
}
print "<form action=\"$_SERVER[PHP_SELF]\" method=\"".FORM_METHOD."\">
<table>\n <tbody>\n <tr>\n <td>Nombre:</td>
<td><input type=\"text\" name=\"nombre\" size=\"".TAM_NOMBRE."\"
maxlength=\"".TAM_NOMBRE."\" value=\"$nombre\" />";
if (isset($_REQUEST['nombre']) && !$nombreOk) {
print " <span style=\"color: red;\">El nombre no es correcto</span>";
}
print "</td>\n </tr>\n <tr>\n <td>Telfono:</td>
<td><input type=\"text\" name=\"telefono\" size=\"".TAM_TELEFONO."\"
maxlength=\"".TAM_TELEFONO."\" value=\"$telefono\" />";
if (isset($_REQUEST['telefono']) && !$telefonoOk) {
print " <span style=\"color: red;\">El telfono no es correcto</span>";
}
print "</td>\n </tr>\n <tr>\n <td>Correo:</td>
<td><input type=\"text\" name=\"correo\" size=\"".TAM_CORREO."\"
maxlength=\"".TAM_CORREO."\" value=\"$correo\" />";
if (isset($_REQUEST['correo']) && !$correoOk) {
print " <span style=\"color: red;\">El correo no es correcto</span>";
}
print "</td>\n </tr>\n </tbody>\n </table>
<p class=\"der\"><input type=\"submit\" value=\"Enviar\" name=\"Enviar\" /></p>
</form>\n";
}

?>

Archivo: mclibre_php_soluciones

body {
background-color: #F6F6FF;
font-family: sans-serif;
padding: 0 20px;
}

h1 {
margin: 10px;
font-size: 140%;
text-align: center;
text-transform: uppercase;
}

fieldset {
background-color: #E6E6FF;
border: #8686FF 3px solid;
padding: 10px 20px 20px;
}

legend {
background-color: white;
border: #8686FF 3px solid;
font-size: 120%;
padding: 0px 10px;
}

input {
font-family: monospace;
}

.der {
text-align: right;
margin: 10px 0px;
}
EJERCICIO

Clculos estadsticos

Escriba una calculadora de datos estadsticos que conste de tres pginas.

En la primera pgina se solicita el nmero de nmeros a introducir.


En la segunda pgina se solicitan esos nmeros y las operaciones correspondientes (suma,
media, mayor, menor).
En la tercera pgina se muestran los resultados.

Archivo: repaso.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"


"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>

<body>
<h1>Calculos estadsticos (Formulario)</h1>

<form action="repaso_3a.php" method="get">


<fieldset>
<legend>Formulario</legend>
<p>Escriba cuntos valores quiere introducir (0&lt;valores&le;20).</p>

<table cellspacing="5" class="borde">


<tbody>
<tr>
<td><strong>Cantidad:</strong></td>
<td><input type="text" name="numero" size="2" maxlength="2" /></td>
</tr>
</tbody>
</table>

<p class="der">
<input type="submit" value="Enviar" />
<input type="reset" value="Borrar" name="Reset" /></p>
</fieldset>
</form>
</body>
</html>

Archivo: repaso_3a.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>

<body>
<h1>Clculos estadsticos (Resultado 1)</h1>
<?php
function recoge($var)
{
$tmp = (isset($_REQUEST[$var])) ? trim(strip_tags($_REQUEST[$var])) : '';
if (get_magic_quotes_gpc()) {
$tmp = stripslashes($tmp);
}
$tmp = str_replace('&', '&amp;', $tmp);
$tmp = str_replace('"', '&quot;', $tmp);
return $tmp;
}
define('FORM_METHOD', 'get');
define('NUM_MINIMO', 1);
define('NUM_MAXIMO', 20);

$numero = recoge('numero');
$numeroOk = FALSE;

if ($numero=="") {
print "<p style=\"color: red\">No ha escrito el nmero de valores.</p>\n";
} elseif (!is_numeric($numero)) {
print "<p style=\"color: red\">No ha escrito el nmero de valores.</p>\n";
} elseif (!ctype_digit($numero)) {
print "<p style=\"color: red\">No ha escrito el nmero de valores "
."como nmero entero positivo.</p>\n";
} elseif (($numero<NUM_MINIMO)||($numero>NUM_MAXIMO)) {
print "<p style=\"color: red\">El nmero de valores debe estar entre "
.NUM_MINIMO." y ".NUM_MAXIMO.".</p>\n";
} else {
$numeroOk = TRUE;
}
if ($numeroOk) {
print "<p>Escriba todos los valores y marque las casillas correspondientes "
."a los clculos que quiere.</p>\n";
print "<form action=\"repaso_3b.php\" method=\"".FORM_METHOD."\">\n";
print " <table>\n <tbody>\n";
for ($i=1; $i<=$numero; $i++) {
print " <tr>\n <td><strong>Nmero $i</strong>:</td>
<td><input type=\"text\" name=\"n[$i]\" size=\"6\" maxlength=\"4\" /></td>\n";
print " </tr>\n";
}
print " </tbody>\n </table>
<p><input type=\"checkbox\" name=\"suma\" />Suma - <input type=\"checkbox\"
name=\"media\" />Media - <input type=\"checkbox\" name=\"maximo\" />Mximo
- <input type=\"checkbox\" name=\"minimo\" />Mnimo</p>
<p class=\"der\">
<input type=\"submit\" value=\"Contar\" />
<input type=\"reset\" value=\"Borrar\" />\n</form>\n";
}
print "<p><a href=\"repaso.htm\">Volver al formulario.</a></p>\n";
?>
</body>
</html>

Archivo: repaso_3b.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"


"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>

<body>
<h1>Clculos estadsticos (Resultado 2)</h1>
<?php
function recoge($var)
{
$tmp = (isset($_REQUEST[$var])) ? trim(strip_tags($_REQUEST[$var])) : '';
if (get_magic_quotes_gpc()) {
$tmp = stripslashes($tmp);
}
$tmp = str_replace('&', '&amp;', $tmp);
$tmp = str_replace('"', '&quot;', $tmp);
return $tmp;
}

function recogeMatriz($var)
{
$tmpMatriz = array();
if (isset($_REQUEST[$var]) && is_array($_REQUEST[$var])) {
foreach ($_REQUEST[$var] as $indice => $valor) {
$tmp = trim(strip_tags($indice));
if (get_magic_quotes_gpc()) {
$tmp = stripslashes($tmp);
}
$tmp = str_replace('&', '&amp;', $tmp);
$tmp = str_replace('"', '&quot;', $tmp);
$indiceLimpio = $tmp;

$tmp = trim(strip_tags($valor));
if (get_magic_quotes_gpc()) {
$tmp = stripslashes($tmp);
}
$tmp = str_replace('&', '&amp;', $tmp);
$tmp = str_replace('"', '&quot;', $tmp);
$valorLimpio = $tmp;

$tmpMatriz[$indiceLimpio] = $valorLimpio;
}
}
return $tmpMatriz;
}

define('FORM_METHOD', 'get');
define('NUM_MINIMO', 1);
define('NUM_MAXIMO', 20);

$numeros = recogeMatriz('n');
$numerosOk = FALSE;
$suma = (recoge('suma')=='on');
$media = (recoge('media')=='on');
$maximo = (recoge('maximo')=='on');
$minimo = (recoge('minimo')=='on');
$numerosRecibidos = count($numeros);

$numerosOk = TRUE;
foreach ($numeros as $valor) {
if (!is_numeric($valor)) {
$numerosOk = FALSE;
}
}

if (!$numerosOk) {
print "<p style=\"color:red\">Los datos recibidos no son correctos.</p>\n";
} elseif ($numerosRecibidos==0) {
print "<p>No ha indicado ningn valor.</p>";
} elseif ($numerosRecibidos>NUM_MAXIMO) {
print "<p style=\"color:red\">El nmero de valores debe estar entre "
.NUM_MINIMO." y ".NUM_MAXIMO.".</p>\n";
} else {
$sumaTotal = 0;
print "<p>Ha introducido $numerosRecibidos valores: <strong>";
foreach ($numeros as $valor) {
print "$valor ";
$sumaTotal += $valor;
}
print "</strong></p>\n";
if ($suma) {
print "<p>La suma de los valores es <strong>$sumaTotal</strong>.</p>\n";
}
if ($media) {
print "<p>La media de los valores es <strong>"
.round($sumaTotal/$numerosRecibidos, 2)."</strong>.</p>\n";
}
if ($maximo) {
print "<p>El valor ms grande es <strong>".max($numeros)."</strong>.</p>\n";
}
if ($minimo) {
print "<p>El valor ms pequeo es <strong>".min($numeros)."</strong>.</p>\n";
}
}

print "<p><a href=\"repaso.htm\">Volver al formulario inicial.</a></p>\n";


?>
</body>
</html>
CUARTA PRACTICA DE PHP

FUNCIONES EN PHP

1. Realiza una funcin en php que retorne el promedio de dos nmeros


<body>
<?php
function retornarpromedio($valor1,$valor2)
{
$pro=($valor1+$valor2)/2;
return $pro;
}

$v1=16;
$v2=18;
$p=retornarpromedio($v1,$v2);
echo $p;
?>

2. Implementar una funcin que muestre un mensaje centrado en la pantalla


<body>
<?php
function mensajecentrado($men)
{
echo "<table width=\"100%\" border=\"1\">";
echo "<tr><td align=\"center\">";
echo $men;
echo "</tr></td>";
echo "</table>";
}

mensajecentrado("Primer recuadro");
echo "<br>";
mensajecentrado("Segundo recuadro");
?>
</body>

3. Realizar una funcin en php que retorne el factorial del numero 1 al numero 5

<body bgcolor="#D2EBF7" style="font-family: Tahoma;">


<?php
function say( $cad ) {
echo $cad . "\n" ;
}
function fn_factorial( $n ) {
for( $f = 1, $j = 1; $j <= $n; $f *= $j++ );
return $f;
}
say( "<table border='1' width='250'>" );
say( "<tr>" );
say( "<td align='center' valign='middle' bgcolor='#FDF5E6'>" );
say( "Nmero" );
say( "</td>" );
say( "<td align='center' valign='middle' bgcolor='#FDF5E6'>" );
say( "Factorial" );
say( "</td>" );
say( "</tr>" );
for( $i = 1; $i <= 5; $i++ ) {
say( "<tr>" );
say( "<td align='center' valign='middle' bgcolor='#FDF5E6'>" );
say( "$i" );
say( "</td>" );
say( "<td align='center' valign='middle' bgcolor='#FDF5E6'>" );
say( fn_factorial($i) );
say( "</td>" );
say( "</tr>" );
}
say( "</table>" );
?>
</body>

RECURSIVIDAD EN PHP

1. Implementar una funcin recursiva que compruebe si un nmero es entero

<?php

function comprobarEntero($numero){

if ($numero > 1 ){

return comprobarEntero($numero-1);

} elseif ($numero < 0){

return comprobarEntero((-1)*$numero-1);

} else {

if ($numero > 0 && $numero < 1) return "No";

else return "Si";

}
echo "Es 0 un entero?".comprobarEntero(0)."<br>";
echo "Es 7 un entero?".comprobarEntero(7)."<br>";
echo "Es 2.7 un entero?".comprobarEntero(2.7)."<br>";
echo "Es -7 un entero?".comprobarEntero(-7)."<br>";
?>
PARAMETROS DE LAS FUNCIONES

Parmetros por valor


Se crea la funcin fn_promedio() para calcular el promedio de dos nmeros
<body bgcolor="#D2EBF7" style="font-family: Tahoma;">
<?php
function say( $cad ) {
echo $cad . "\n" ;
}
function fn_promedio( $n1, $n2 ) {
$pr = ( $n1 + $n2 ) / 2;
return $pr;
}

$nota1 = rand(0, 20);


$nota2 = rand(0,20);
$prom = fn_promedio( $nota1, $nota2 );

say( "<table border='1' width='250'>" );


say( "<tr>" );
say( "<td align='center' valign='middle' bgcolor='#FDF5E6'>" );
say( "Calculo de Promedio" );
say( "</td>" );
say( "</tr>" );
say( "</table><br>" );

say( "Nota 1: $nota1 <br>" );


say( "Nota 2: $nota2 <br>" );
say( "Promedio: $prom <br>" );

$pagina = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];


say( "<a href=\"$pagina\">Nueva Prueba</a>" );
?>
</body>

Parmetros por Referencia


En este ejemplo se ilustra el uso de un parmetro por referencia en la funcin fn_add llamada $n

<body bgcolor="#D2EBF7" style="font-family: Tahoma;">


<?php
function say( $cad ) {
echo $cad . "\n" ;
}
function fn_add( &$n, $inc ) {
$n += $inc;
}

$num = rand( 20, 50 );


$delta = rand( 20, 50 );
$cad = "Nmero: $num <br>" ;
$cad .= "Incremento: $delta <br>";
fn_add( $num, $delta );
$cad .= "Nuevo Num.: $num <br>";

say( "<table border='1' width='250'>" );


say( "<tr>" );
say( "<td align='center' valign='middle' bgcolor='#FDF5E6'>" );
say( "<b>Parmetro por Referencia</b>" );
say( "</td>" );
say( "</tr>" );
say( "</table><br>" );

say( $cad );

$pagina = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];


say( "<a href=\"$pagina\">Nueva Prueba</a>" );
?>
</body>

Parmetros por defecto


En este ejemplo se ha modificado el parmetro $inc en la funcin fn_add() para que tenga como
valor por defecto uno (1).

<body bgcolor="#D2EBF7" style="font-family: Tahoma;">


<?php
function say( $cad ) {
echo $cad . "\n" ;
}
function fn_add( &$n, $inc = 1 ) {
$n += $inc;
}

say( "<table border='1' width='250'>" );


say( "<tr>" );
say( "<td align='center' valign='middle' bgcolor='#FDF5E6'>" );
say( "<b>Parmetro por Defecto</b>" );
say( "</td>" );
say( "</tr>" );
say( "</table><br>" );

$num = rand( 20, 50 );


$delta = rand( 20, 50 );

$cad = "Nmero: $num <br>" ;


$cad .= "Incremento: $delta <br>";
fn_add( $num, $delta ); // $num = $num + $delta
$cad .= "Nuevo Num.: $num <br>";
fn_add( $num ); // $num = $num + 1
$cad .= "Nuevo Num.: $num <br>";
say( $cad );
$pagina = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];
say( "<a href=\"$pagina\">Nueva Prueba</a>" );
?>
</body>
NUMERO VARIABLE DE PARAMETROS

La funcin fn_suma() puede recibir varios parmetros luego internamente realiza la suma de todos
ellos y retorna el resultado.

<body bgcolor="#D2EBF7" style="font-family: Tahoma;">


<?php
function say( $cad ) {
echo $cad . "\n" ;
}
function fn_suma( ) {
$nums = func_get_args();
$suma = 0;
foreach( $nums as $valor ) {
$suma += (double)$valor;
}
return $suma;
}

say( "<table border='1' width='250'>" );


say( "<tr>" );
say( "<td align='center' valign='middle' bgcolor='#FDF5E6'>" );
say( "<b>Parmetros Variables</b>" );
say( "</td>" );
say( "</tr>" );
say( "</table><br>" );

$n = array( rand(20,50), rand(20,50), rand(20,50) );


$s = fn_suma( $n[0], $n[1], $n[2] );

$cad = "Nmeros: ";


foreach( $n as $valor ) {
$cad .= "$valor ";
}
$cad .= "<br>Suma: $s <br>";
say( $cad );

$pagina = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];


say( "<a href=\"$pagina\">Nueva Prueba</a>" );
?>
</body>

Hacer una funcin que calcula el IGV y que recibe dos parmetros. Uno el valor sobre el que se
calcula y el otro el porcentaje a aplicar. Si no se indica el porcentaje de IGV se entiende que es el
19%.

<body>
<?
function igv($base,$porcentaje=19){
return $base * $porcentaje /100;
}
echo igv(1000) . "<br>";
echo igv(1000,16) . "<br>";
echo igv(10,0) . "<br>";
?>
</body>

Devolviendo valores
Funcin fn_mayor que recibe tres nmeros enteros y devuelve el mayor de ellos

<body bgcolor="#D2EBF7" style="font-family: Tahoma;">


<?php

function say( $cad ) {


echo $cad . "\n" ;
}

function fn_mayor( $n1, $n2, $n3 ) {


$mayor = $n1;
if( $n2 > $mayor ) { $mayor = $n2; }
if( $n3 > $mayor ) { $mayor = $n3; }
return $mayor;
}

$a = rand(1,100);
$b = rand(1,100);
$c = rand(1,100);
$m = fn_mayor( $a, $b, $c );

say( "<table border='1' width='250'>" );


say( "<tr>" );
say( "<td align='center' valign='middle' bgcolor='#FDF5E6'>" );
say( "<b>Nmero Mayor</b>" );
say( "</td>" );
say( "</tr>" );
say( "</table><br>" );

say( "n1 = $a <br>" );


say( "n2 = $b <br>" );
say( "n3 = $c <br>" );
say( "Mayor = $m <br>" );

$pagina = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];


say( "<br><a href=\"$pagina\">Nueva Prueba</a>" );
?>
</body>
QUINTA PRACTICA DE PHP

ARREGLOS EN PHP

1. Almacenar los nombres de los das de la semana en un vector y luego imprimirlos uno
debajo de otro.
<html>
<title> Ejmeplo 1 </title>
<body>
<?PHP
// Inicializacion del Vector

$dia[0] = "Domingo";
$dia[1] = "Lunes";
$dia[2] = "Martes";
$dia[3] = "Mircoles";
$dia[4] = "Jueves";
$dia[5] = "Viernes";
$dia[6] = "Sbado";

// Impresion del vector


for($i=0; $i<7; $i++)
{
echo ($dia[$i] . "<Br>") ;
}
?>
</body>
</html>

2. Almacenar en un vector los datos personales de un empleado y luego mostrarlos en pantalla.


<html>
<title> Ejemplo 2 </title>
<body>
<?PHP
// Inicializacion del Vector
$Empleado[0] = 4371;
$Empleado[1] = "Martinez Leandro";
$Empleado[2] = "27.643.742";
$Empleado[3] = 1429.54;
$Empleado[4] = "Arquitecto";
// Impresion del vector
echo ("Legajo: " . $Empleado[0] . "<Br>");
echo ("Nombre: " . $Empleado[1] . "<Br>");
echo ("DNI : " . $Empleado[2] . "<Br>");
echo ("Sueldo: " . $Empleado[3] . "<Br>");
echo ("Profesion: " . $Empleado[4] . "<Br>");
?>
</body>
</html>
3. Cargar en un vector artculos de librera y luego imprimir la cantidad de ellos.
<html>
<title> Ejemplo 3 </title>
<body>
<?PHP
// Inicializacion del Vector
$Articulos =array("Lpis","Goma","Hoja","Tinta");
// Impresion del vector
$Cantidad = count($Articulos);
echo ("La cantidad de Artculos son: " . $Cantidad);
?>
</body>
</html>

4. Cargar los nombres de personas en cualquier posicin.


<html>
<title> Ejemplo 4 </title>
<Body>
<?PHP
// Inicializacion del Vector
$Nombre[10] = "Marcelo";
$Nombre[20] = "Alicia";
$Nombre[15] = "Alejandra";
$Nombre[35] = "Mario";
$Nombre[12] = "Alberto";
// Impresion del vector
reset($Nombre);
echo ("<H2>" . "Vector de Nombres");
echo ("<H3>" . "<Hr>");
do
{
// Buscar Posicion especificada
$i = key($Nombre);
// Buscar Contenido en esa posicion
$Valor = current($Nombre);
echo ("Posicin: " . $i . " - ");
echo ("Contenido: " . $Valor);
echo ("<Br>");
}
while (next($Nombre));
?>
</body>
</html>

Nota: Aqu se observa que los nombres fueron cargados en posiciones aleatorias. Con la funcin
reset(), se logra llevar el puntero al principio del vector y para poder encontrar la posicin de un
elemento se utiliza la funcin key(), la cual acepta como parmetro el vector y devuelve la
posicin. Luego para poder obtener el contenido en esa posicin se utiliza la funcin current(),
que acepta el vector y devuelve el valor almacenado. La funcin next() avanza el puntero a la
posicin siguiente, si se ha llegado al final del vector, esta funcin devuelve false.
5. Cargar Legajos de personas con sus respectivos Nombres
<html>
<title> Ejemplo5.php </title>
<body>
<?Php
// Inicializacion del Vector
$Nombre[100] = "Javier";
$Nombre[200] = "Cintia";
$Nombre[150] = "Ricardo";
$Nombre[350] = "Ral";
$Nombre[120] = "Guillermo";
// Impresion del vector
reset($Nombre);
echo "<H2>"."Vector de Nombres";
echo "<H3>"."<Hr>";
while (list($i,$Valor)=each($Nombre))
{
echo "Legajo: " . $i . " - ";
echo "Nombre: " . $Valor;
echo "<Br>";
}
?>
</body>
</html>

Nota: La funcin list(), almacena en los parmetros ($i, $Valor), el ndice y el valor devuelto
por la funcin each(), que tiene como parmetro el vector puesto en juego. Adems, la funcin
list(), avanza automticamente el puntero al siguiente elemento del vector, y en caso de que el
vector haya llegado al final, la funcin devuelve false.

6. Cargar en un vector algunas ciudades del mundo, de manera que el ndice del vector
contenga los tres primeros caracteres de la ciudad almacenada.
<html>
<title> Ejemplo 6.php </title>
<body>
<?Php
// Inicializacion del Vector
$Ciudad = array("Par" => "Paris",
"Lon" => "Londres",
"Ate" => "Atenas",
"Ber" => "Berlin",
"Lim" => "Lima");

echo "<H2>"."Vector de Ciudades";


echo "<H3>"."<Hr>";
while (list($i,$Valor)=each($Ciudad))
{
echo "Posicin: " . $i . " - ";
echo "Contenido: " . $Valor;
echo "<Br>";
}
?>
</body>
</html>

Funcin sort()
Esta funcin permite ordenar los elementos de un arreglo (vector) de menor a mayor, en orden
numrico o alfabtico, con el siguiente orden:
Primero se ordenarn los nmeros, luego los signos de puntuacin y por ltimo las letras.

7. Cargar en un arreglo nombre de personas y luego mostrarlos ordenados de menor a mayor.


<html>
<title> Ejemplo1-Sort.php </title>
<body>
<?Php
// Inicializacion del Vector
$Nombres = array("Maria", "Luis", "Alberto", "Cesar", "Adriana");

// Ordenamiento del vector


sort($Nombres);

echo "<H2>"."Vector de Nombres ordenados";


echo "<H3>"."<Hr>";
while (list($i,$Valor)=each($Nombres))
{
echo "Posicin: " . $i . " - ";
echo "Contenido: " . $Valor;
echo "<Br>";
}
?>
</body>
</html>

Nota:
Si se utiliza la funcin sort() con ndices de texto, se observa que, una vez ordenado, ha
cambiado los ndices de texto por nmeros, comenzando de cero en adelante. Para salvar este
inconveniente se utiliza la funcin asort().

Funcin asort()
Esta funcin permite ordenar arreglos con ndices de texto, manteniendo el valor de sus ndices.
Tiene como parmetro el vector, y el ordenamiento es de menor a mayor.

8. Ordenar alfabticamente de menor a mayor el vector de ciudades del mundo del ejemplo
Nro. 6.
<html>
<title> Ejemplo2-Asort..php </title>
<body>
<?Php
// Inicializacion del Vector
$Ciudad = array("Par" => "Paris",
"Lon" => "Londres",
"Ate" => "Atenas",
"Ber" => "Berlin",
"Lim" => "Lima");
asort($Ciudad);

echo "<H2>"."Vector de Ciudades ordenado";


echo "<H3>"."<Hr>";
while (list($i,$Valor)=each($Ciudad))
{
echo "Posicin: " . $i . " - ";
echo "Contenido: " . $Valor;
echo "<Br>";
}
?>
</body>
</html>

Funcin rsort()
Es la inversa de la funcin sort(). Permite ordenar un vector pasado como parmetro en forma
descendente, es decir de mayor a menor.

9. Modificar el ejemplo anterior para mostrar el vector de nombres de personas en forma


descendente.
<html>
<title> Ejemplo3-Rsort.php </title>
<body>
<?Php
// Inicializacion del Vector
$Nombres = array("Maria", "Luis", "Alberto", "Cesar", "Adriana");

// Ordenamiento del vector descendente


rsort($Nombres);

echo "<H2>"."Vector de Nombres ordenados en forma descendente ";


echo "<H3>"."<Hr>";

while (list($i,$Valor)=each($Nombres))
{
echo "Posicin: " . $i . " - ";
echo "Contenido: " . $Valor;
echo "<Br>";
}
?>
</body>
</html>

10. Modificar el ejemplo 2 para mostrar el vector de ciudades en forma descendente.


<html>
<title> Ejemplo4-Arsort.php </title>
<body>
<?Php
// Inicializacion del Vector
$Ciudad = array("Par" => "Paris",
"Lon" => "Londres",
"Ate" => "Atenas",
"Ber" => "Berlin",
"Lim" => "Lima");
arsort($Ciudad);
echo "<H2>"."Vector de Ciudades ordenado en forma descendente";
echo "<H3>"."<Hr>";
while (list($i,$Valor)=each($Ciudad))
{
echo "Posicin: " . $i . " - ";
echo "Contenido: " . $Valor;
echo "<Br>";
}
?>
</body>
</html>
SEXTA PRACTICA DE PHP

SESIONES EN PHP

Archivo: inicio.html
<html>
<head>
<title>Inicio de Sesin</title>
</head>
<body bgcolor="#D2EBF7" style="font-family: Tahoma;">
<h1>Inicio de Sesin</h1>
<form method="post" action="inicio.php" >
<table width="200">
<caption><strong>Ingrese sus Datos</strong></caption>
<tr>
<td>Nombre:</td>
<td><input type="text" name="nombre" size="15" maxlength="15"></td>
</tr>
<tr>
<td>Apellido:</td>
<td><input type="text" name="apellido" size="15" maxlength="15"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input name="submit" type="submit" value="Enviar">
</td>
</tr>
</table>
</form>
</body>
</html>

Archivo: inicio.php
<?php
session_start();
if( !isset( $_POST["nombre"] ) or !isset( $_POST["apellido"] ) ) {
header( "location: inicio.html" );
}
else {
$_SESSION["nombre"] = $_POST["nombre"];
$_SESSION["apellido"] = $_POST["apellido"];
$_SESSION["carrito"] = array();
header( "location: carrito.php" );
}
?>

Archivo: carrito.php
<?php
session_start();
?>
<body bgcolor="#D2EBF7" style="font-family: Tahoma;">
<?php
echo "<h2>Usuario: " . $_SESSION["nombre"] . " " . $_SESSION["apellido"] . "</h2>";
if (count($_SESSION["carrito"]) == 0) {
echo "<h3>Carrito Vacio</h3>";
}
else {
echo "<table width='400' border='1'>";
foreach( $_SESSION["carrito"] as $articulo => $cantidad ) {
echo "<tr>";
echo "<td>$articulo</td>";
echo "<td>$cantidad</td>";
echo "</tr>";
}
echo "</table>";
}
?>
<a href="agregararticulo.php">Agregar Artculo</a>
<a href="cerrarsesion.php">Cerrar Sesin</a>
</body>

Archivo: agregararticulo.php
<?php
session_start();
if( !isset( $_POST["clave"] ) ) {
?>
<body bgcolor="#D2EBF7" style="font-family: Tahoma;">
<?php echo "<h2>Usuario: " . $_SESSION["nombre"] . " " . $_SESSION["apellido"] . "</h2>"; ?>
<form name="form1" method="post" action="agregararticulo.php">
<input type="hidden" name="clave" value="123456">
<table width="200">
<tr>
<td>Artculo</td>
<td><input type="text" name="articulo" size="30" maxlength="30"></td>
</tr>
<tr>
<td>Cantidad</td>
<td><input type="text" name="cantidad" size="3" maxlength="3"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="Submit" value="Enviar">
</td>
</tr>
</table>
</form>
</body>
<?php
}
else {
$articulo = $_POST["articulo"];
$cantidad = $_POST["cantidad"];
$_SESSION["carrito"][$articulo] = $cantidad;
header( "location: carrito.php" );
}
?>

Archivo: cerrarsesion.php
<?php
session_start();
session_unset();
session_destroy();
header( "location: inicio.html" );
?>
SEPTIMA PRACTICA DE PHP

CONEXIN PHP MY SQL

Crear la base de datos editorial que contiene los siguientes campos:


CREATE TABLE autor (
autorID int(11) NOT NULL auto_increment,
nombre char(50) NOT NULL,
PRIMARY KEY (autorID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;

INSERT INTO autor VALUES (1, 'Eddy Blaider Aburto Correa');


INSERT INTO autor VALUES (2, 'Jaime P. S. Eddy B. Aburto');
INSERT INTO autor VALUES (3, 'Gesvin Romero Moreno');
INSERT INTO autor VALUES (4, 'Christian Crovetto Huerta');
INSERT INTO autor VALUES (5, 'Erika A. H. Christian C. H.');
INSERT INTO autor VALUES (6, 'Gean Carlo Apolinario Garci-a');
INSERT INTO autor VALUES (7, 'Gesvin Romero Moreno');
INSERT INTO autor VALUES (8, 'Henry Pantigoso Loza');
INSERT INTO autor VALUES (9, 'Ivan Dextre Angeles');
INSERT INTO autor VALUES (10, 'Jaime Pantigoso Silva');
INSERT INTO autor VALUES (11, 'Joel de la Cruz Villar');
INSERT INTO autor VALUES (12, 'Jorge Arturo Cruz Huaman');
INSERT INTO autor VALUES (13, 'Juan Jose Castaeda Leon');
INSERT INTO autor VALUES (14, 'Julio Marquez Lozada');
INSERT INTO autor VALUES (15, 'Orlando Loyola Giraldo');
INSERT INTO autor VALUES (16, 'Raymundo Casas Navarro');

CREATE TABLE ciudad (


ciudadID int(11) NOT NULL auto_increment,
nombre char(30) NOT NULL,
PRIMARY KEY (ciudadID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

INSERT INTO ciudad VALUES (1, 'Puno');


INSERT INTO ciudad VALUES (2, 'Piura');
INSERT INTO ciudad VALUES (3, 'Cajamarca');
INSERT INTO ciudad VALUES (4, 'Lima');
INSERT INTO ciudad VALUES (5, 'Arequipa');
INSERT INTO ciudad VALUES (6, 'Ica');
INSERT INTO ciudad VALUES (7, 'Tacna');
INSERT INTO ciudad VALUES (8, 'Tumbes');
INSERT INTO ciudad VALUES (9, 'Cusco');
INSERT INTO ciudad VALUES (10, 'Loreto');
INSERT INTO ciudad VALUES (11, 'Chimbote');
INSERT INTO ciudad VALUES (12, 'Ayacucho');

CREATE TABLE clientes (


clienteID int(11) NOT NULL auto_increment,
nombres char(40) NOT NULL,
direccion char(80) NOT NULL,
ciudadID int(11) NOT NULL,
PRIMARY KEY (clienteID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;

INSERT INTO clientes VALUES (1, 'Jose Martin Valdes', 'Av. Lima 452', 5);
INSERT INTO clientes VALUES (2, 'Mely Urtado', 'Jr. Cercado 500', 6);
INSERT INTO clientes VALUES (3, 'Michael Accher', 'Av. Marina 458', 6);
INSERT INTO clientes VALUES (4, 'Alan Wong', 'Calle ica 452', 3);
INSERT INTO clientes VALUES (5, 'Elmer Paz', 'Jr. Puno 859', 2);
INSERT INTO clientes VALUES (6, 'Daniel Villar', 'Av. Pardo 890', 5);
INSERT INTO clientes VALUES (7, 'Marcos Aguilar', 'Av. Mariscal 480', 4);
INSERT INTO clientes VALUES (9, 'Ruben Antonio', 'Av. Lima NA 458 int 89', 9);
INSERT INTO clientes VALUES (10, 'Jhon Michael', 'Av. Julio 459', 12);
INSERT INTO clientes VALUES (11, 'Juan Jose Alvares', 'Jr. Ayacucho 4589', 7);
INSERT INTO clientes VALUES (12, 'Juan Jose Alvares', 'Jr. Ayacucho 4589', 7);
INSERT INTO clientes VALUES (13, 'Andres Alvarado', 'Jr. Tacna 478', 3);

CREATE TABLE descripcion (


libroID int(11) NOT NULL,
descripcion text,
PRIMARY KEY (libroID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO descripcion VALUES (32, 'Con este libro usted aprendera a trabajar con paginas
HTML, PHP, MySQL');
INSERT INTO descripcion VALUES (59, 'Demostracion 100');

CREATE TABLE libros (


libroID int(11) NOT NULL auto_increment,
titulo char(60) NOT NULL,
precio float NOT NULL,
autorID int(11) NOT NULL,
PRIMARY KEY (libroID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=59 ;

INSERT INTO libros VALUES (1, 'Aplique Programacion en Visual Basic 6.0', 16.104, 1);
INSERT INTO libros VALUES (2, 'Aplique Programacion con Visual C++ 6.0', 40.26, 2);
INSERT INTO libros VALUES (4, 'Base de Datos con SQL Server 2000', 16.104, 1);
INSERT INTO libros VALUES (5, 'Modelamiento de Base de Datos con Erwin 3.5', 16.1051, 7);
INSERT INTO libros VALUES (6, 'Excel 2002 XP Paso a Paso', 48.3153, 10);
INSERT INTO libros VALUES (7, 'Dreamweaver 4.0', 40.2628, 11);
INSERT INTO libros VALUES (8, 'Active Server Pages 3.0', 39.6, 1);
INSERT INTO libros VALUES (9, 'Programacion en Java 2', 16.1051, 1);
INSERT INTO libros VALUES (10, 'Ingrese al mundo de Internet', 48.3153, 10);
INSERT INTO libros VALUES (11, 'Office XP 2002', 48.3153, 1);
INSERT INTO libros VALUES (12, 'Ensamble y Repare Pentium I II III IV', 48.3153, 1);
INSERT INTO libros VALUES (13, 'HTML Para todo el Mundo', 48.3153, 1);
INSERT INTO libros VALUES (14, 'Power Point XP 2002 Paso a Paso', 48.3153, 11);
INSERT INTO libros VALUES (15, 'Visual Basic 6.0 Como debe ser', 48.3153, 13);
INSERT INTO libros VALUES (16, 'Corel Draw 10', 48.312, 9);
INSERT INTO libros VALUES (17, 'Power Builder 8.0 Como debe ser', 48.3153, 13);
INSERT INTO libros VALUES (18, 'Flash MX', 48.3153, 11);
INSERT INTO libros VALUES (19, 'Visio 2002 XP', 48.3153, 15);
INSERT INTO libros VALUES (20, 'Programacion con C++ Builder 5', 48.3153, 1);
INSERT INTO libros VALUES (21, 'Desarrollo de aplicaciones con Delphi 6', 48.312, 10);
INSERT INTO libros VALUES (22, 'La cara oculta del Linux', 48.3153, 11);
INSERT INTO libros VALUES (23, 'El mundo de Autocad 2002', 32.2102, 8);
INSERT INTO libros VALUES (24, 'Pascal 7.0', 32.2102, 10);
INSERT INTO libros VALUES (25, 'Front Page XP 2002', 32.2102, 11);
INSERT INTO libros VALUES (26, 'Gui-a Visual de Excel XP 2002', 32.2102, 6);
INSERT INTO libros VALUES (27, 'Gui-a Visual de Access XP 2002', 32.2102, 6);
INSERT INTO libros VALUES (28, 'Gui-a Visual de Power Ponit XP 2002', 32.2102, 11);
INSERT INTO libros VALUES (29, 'Guia Visual de Windows XP 2002', 32.2102, 6);
INSERT INTO libros VALUES (30, 'Razonamiento Verbal', 32.2102, 16);
INSERT INTO libros VALUES (31, 'Photoshop 7.0', 32.2102, 11);
INSERT INTO libros VALUES (32, 'Dreamweaver MX', 32.2102, 11);
INSERT INTO libros VALUES (33, 'Guia Practica de Autocad 2002', 32.2102, 14);
INSERT INTO libros VALUES (34, 'Programacion C++', 32.2102, 10);
INSERT INTO libros VALUES (35, 'Photoshop con KPTs', 32.2102, 12);
INSERT INTO libros VALUES (36, 'Programacion en Excel con Aplicaciones VB', 32.2102, 6);
INSERT INTO libros VALUES (37, 'Corel Draw 11', 32.208, 12);
INSERT INTO libros VALUES (38, 'Ms Project 2002', 32.2102, 15);
INSERT INTO libros VALUES (39, 'Programacion en Lenguaje C', 32.2102, 10);
INSERT INTO libros VALUES (40, 'Visual Basic .NET', 32.2102, 5);
INSERT INTO libros VALUES (41, 'Aplicaciones Teorico Practico SAP 2000', 32.208, 8);
INSERT INTO libros VALUES (42, 'Guia Practica Autocad 2004', 32.2102, 8);
INSERT INTO libros VALUES (43, 'Diseo Web', 32.2102, 11);
INSERT INTO libros VALUES (44, 'Algoritmos y Diagramas de Flujo', 48.312, 10);
INSERT INTO libros VALUES (45, 'Power Builder 9.0 Full Data Base', 48.3153, 13);
INSERT INTO libros VALUES (46, 'UML con Rational Rose', 48.3153, 7);
INSERT INTO libros VALUES (47, 'DHTML JavaScript y Aplicaciones ASP.NET', 48.3153, 6);
INSERT INTO libros VALUES (48, 'S10 Costos y Presupuestos', 48.3153, 8);
INSERT INTO libros VALUES (49, 'Visual FoxPro 8.0 Full DataBase', 48.3153, 7);
INSERT INTO libros VALUES (50, 'Desarrolle Aplicaciones con DELPHI 7', 48.312, 10);
INSERT INTO libros VALUES (51, 'Oracle 9i', 48.3153, 4);
INSERT INTO libros VALUES (52, 'Macromedia Flash MX 2004', 48.3153, 11);
INSERT INTO libros VALUES (53, 'Word 2002 XP Paso a Paso', 48.3153, 1);
INSERT INTO libros VALUES (54, 'Aprenda y Domine Excel 2000', 48.312, 1);
INSERT INTO libros VALUES (55, 'Access 2002 XP', 15.4, 1);
INSERT INTO libros VALUES (56, 'Introduccion a la Computacion', 48.3153, 1);
INSERT INTO libros VALUES (57, 'Gui-a Visual de Power Point XP 2002', 48.3153, 6);
INSERT INTO libros VALUES (58, 'xxx', 0, 1);

CREATE TABLE orden (


ordenID int(11) NOT NULL,
libroID int(11) NOT NULL,
Cantidad tinyint(11) NOT NULL,
item int(11) NOT NULL auto_increment,
PRIMARY KEY (item)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=49 ;
INSERT INTO orden VALUES (1, 55, 10, 1);
INSERT INTO orden VALUES (1, 1, 5, 2);
INSERT INTO orden VALUES (2, 10, 8, 3);
INSERT INTO orden VALUES (3, 5, 50, 4);
INSERT INTO orden VALUES (3, 10, 16, 5);
INSERT INTO orden VALUES (3, 20, 15, 6);
INSERT INTO orden VALUES (3, 8, 10, 7);
INSERT INTO orden VALUES (13, 55, 127, 8);
INSERT INTO orden VALUES (13, 55, 90, 9);
INSERT INTO orden VALUES (13, 33, 45, 10);
INSERT INTO orden VALUES (13, 51, 1, 11);
INSERT INTO orden VALUES (14, 32, 5, 12);
INSERT INTO orden VALUES (15, 55, 8, 13);
INSERT INTO orden VALUES (15, 55, 9, 14);
INSERT INTO orden VALUES (15, 55, 0, 15);
INSERT INTO orden VALUES (16, 16, 10, 16);
INSERT INTO orden VALUES (16, 8, 0, 17);
INSERT INTO orden VALUES (16, 55, 89, 18);
INSERT INTO orden VALUES (16, 55, 127, 19);
INSERT INTO orden VALUES (17, 26, 2, 20);
INSERT INTO orden VALUES (17, 18, 1, 21);
INSERT INTO orden VALUES (18, 12, 10, 22);
INSERT INTO orden VALUES (18, 47, 2, 23);
INSERT INTO orden VALUES (19, 33, 8, 24);
INSERT INTO orden VALUES (19, 18, 100, 25);
INSERT INTO orden VALUES (22, 32, 10, 29);
INSERT INTO orden VALUES (20, 42, 8, 28);
INSERT INTO orden VALUES (22, 25, 15, 30);
INSERT INTO orden VALUES (24, 23, 6, 34);
INSERT INTO orden VALUES (23, 26, 10, 32);
INSERT INTO orden VALUES (23, 1, 8, 33);
INSERT INTO orden VALUES (24, 57, 10, 35);
INSERT INTO orden VALUES (28, 12, 5, 37);
INSERT INTO orden VALUES (28, 29, 4, 38);
INSERT INTO orden VALUES (28, 4, 1, 39);
INSERT INTO orden VALUES (29, 12, 56, 40);
INSERT INTO orden VALUES (33, 18, 10, 41);
INSERT INTO orden VALUES (38, 12, 5, 42);
INSERT INTO orden VALUES (38, 13, 63, 43);
INSERT INTO orden VALUES (38, 25, 10, 47);
INSERT INTO orden VALUES (39, 18, 5, 48);

CREATE TABLE pedidos (


clienteID int(11) NOT NULL,
monto float NOT NULL,
Fecha date NOT NULL,
ordenID int(11) NOT NULL auto_increment,
PRIMARY KEY (ordenID)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=41 ;

INSERT INTO pedidos VALUES (5, 0, '2004-06-15', 40);


INSERT INTO pedidos VALUES (1, 150, '2004-06-04', 1);
INSERT INTO pedidos VALUES (2, 240, '2004-03-15', 2);
INSERT INTO pedidos VALUES (3, 1680, '2004-02-10', 3);
INSERT INTO pedidos VALUES (6, 3279.58, '2004-06-14', 38);
INSERT INTO pedidos VALUES (4, 0, '2004-06-14', 35);
INSERT INTO pedidos VALUES (9, 351.383, '2004-06-14', 28);
INSERT INTO pedidos VALUES (7, 439.23, '2004-06-14', 33);
INSERT INTO pedidos VALUES (5, 0, '2004-06-14', 37);
INSERT INTO pedidos VALUES (3, 614.922, '2002-05-01', 24);
INSERT INTO pedidos VALUES (5, 409.948, '2002-05-01', 23);
INSERT INTO pedidos VALUES (4, 732.05, '2002-05-01', 22);
INSERT INTO pedidos VALUES (4, 0, '2004-06-14', 36);
INSERT INTO pedidos VALUES (7, 0, '2002-05-01', 13);
INSERT INTO pedidos VALUES (5, 0, '2002-05-01', 14);
INSERT INTO pedidos VALUES (4, 0, '2002-05-01', 15);
INSERT INTO pedidos VALUES (5, 0, '2002-05-01', 16);
INSERT INTO pedidos VALUES (4, 0, '2002-05-01', 17);
INSERT INTO pedidos VALUES (2, 0, '2002-05-01', 18);
INSERT INTO pedidos VALUES (7, 4626.56, '2002-05-01', 19);
INSERT INTO pedidos VALUES (5, 0, '2002-05-01', 20);
INSERT INTO pedidos VALUES (9, 0, '2004-06-14', 29);
INSERT INTO pedidos VALUES (9, 219.615, '2004-06-13', 39);

Archivo: conection.php
<?php
/* Creamos la conexin con el servidor MySQL
notemos que sea agregado dos validaciones, que cuando
no se haya conectado correctamente a la base de datos el nombre
de la base de datos no existe, mostrara un mensaje.
*/
function Conectarse()
{
if (!($link=mysql_connect("localhost","root","")))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db("editorial1",$link))
{
echo "Error seleccionando la base de datos.";
exit();
}
return $link;
}
?>

Archivo: datos.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */
include("conection.php");

/* realizamos un consulta simple */


$link=Conectarse();
$sql = "select titulo, precio from libros order by titulo";
$result = mysql_query($sql, $link);
if ($row = mysql_fetch_array($result)){
mysql_field_seek($result,0);
while ($field = mysql_fetch_field($result)){
} do {

/* mostramos los registros */


echo $row[0];
echo $row[1];

} while ($row = mysql_fetch_array($result));


} else {

/* Si no se encontraron datos mostramos


el siguiente mensaje */
echo "No se encontraron resultados!";
}
?>

Archivo: datos_avanzado.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */
include("conection.php");
?>
<table width="700" border="1" cellspacing="2" cellpadding="2">
<tr>
<td>Titulo</td>
<td>Precio</td>
<td>Autor</td>
</tr>
<?
/*
Realizamos la consulta a la base datos
note que estamos trabajando con "inner join"
para relacionar 2 tablas libros y autor, con
"$sql .=" se puede separar la consulta en 2 lneas a mas
*/

$link=Conectarse();
$sql = "select libros.titulo, libros.precio, autor.nombre from libros ";
$sql .=" inner join autor on libros.autorID = autor.autorID";
$result = mysql_query($sql, $link);
if ($row = mysql_fetch_array($result)){
mysql_field_seek($result,0);
while ($field = mysql_fetch_field($result)){
} do {

/*
Mostramos los registros
noten que para ejemplo se esta utilizando HTML
*/
?>
<tr>
<td><? echo $row[0]; ?></td>
<td><? echo $row[1]; ?></td>
<td><? echo $row[2]; ?></td>
</tr>
<?
} while ($row = mysql_fetch_array($result));
} else {
/*
Si no se encontraron resultados
se muestra el siguiente mensaje
*/
echo "No se encontraron resultados!";
}
?>
</table>

Archivo buscar_form1.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>
<body>
<form name="form1" method="post" action="buscar_resultado1.php">
Buscar Libro:
<input name="libro" type="text" id="libro">
<input type="submit" name="Submit" value="Buscar">
</form>
</body>
</html>

Archivo: buscar_resultado1.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */
include("conection.php");

/* Almacenamos en variables los datos del formulario


notemos que se estn enviando en mtodo POST */
$libro = $_POST['libro'];

?>
<table width="700" border="1" cellspacing="2" cellpadding="2">
<tr>
<td>Titulo</td>
<td>Precio</td>
<td>Autor</td>
</tr>
<?
/*
Realizamos la consulta a la base datos
note que estamos trabajando con "inner join"
para relacionar 2 tablas libros y autor, con
"$sql .=" se puede separar la consulta en 2 lneas a mas,
este tipo de consulta es para buscar un dato exacto
en la base de datos "where libros.titulo = '$libro'"
*/

$link=Conectarse();
$sql = "select libros.titulo, libros.precio, autor.nombre from libros ";
$sql .=" inner join autor on libros.autorID = autor.autorID";
$sql .=" where libros.titulo = '$libro'";
$result = mysql_query($sql, $link);
if ($row = mysql_fetch_array($result)){
mysql_field_seek($result,0);
while ($field = mysql_fetch_field($result)){
} do {

/*
Con "$row" mostramos los datos y
mostramos los registros
*/
?>
<tr>
<td><? echo $row[0]; ?></td>
<td><? echo $row[1]; ?></td>
<td><? echo $row[2]; ?></td>
</tr>
<?
} while ($row = mysql_fetch_array($result));
} else {
/*
Si no se encontraron resultados
se muestra el siguiente mensaje
*/
echo "No se encontraron resultados!";
}
?>
</table>

Archivo: buscar_form2.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>
<body>
<form name="form1" method="post" action="buscar_resultado2.php">
Buscar Libro:
<input name="libro" type="text" id="libro">
<input type="submit" name="Submit" value="Buscar">
</form>
</body>
</html>
Archivo: buscar_resultado2.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */
include("conection.php");

$libro = $_POST['libro'];

?>
<table width="700" border="1" cellspacing="2" cellpadding="2">
<tr>
<td>Titulo</td>
<td>Precio</td>
<td>Autor</td>
</tr>
<?
/*
Realizamos la consulta a la base datos
note que estamos trabajando con "inner join"
para relacionar 2 tablas libros y autor, con
"$sql .=" se puede separar la consulta en 2 lneas a mas,
este tipo de consulta es para buscar un dato que tenga algn
tipo de similitud en la base de datos "where libros.titulo like '%$libro%'"
*/

$link=Conectarse();
$sql = "select libros.titulo, libros.precio, autor.nombre from libros ";
$sql .=" inner join autor on libros.autorID = autor.autorID";
$sql .=" where libros.titulo like '%$libro%'";
$result = mysql_query($sql, $link);
if ($row = mysql_fetch_array($result)){
mysql_field_seek($result,0);
while ($field = mysql_fetch_field($result)){
} do {
/*
Con "$row" mostramos los datos y
mostramos los registros
*/
?>
<tr>
<td><? echo $row[0]; ?></td>
<td><? echo $row[1]; ?></td>
<td><? echo $row[2]; ?></td>
</tr>
<?
} while ($row = mysql_fetch_array($result));
} else {
/*
Si no se encontraron resultados
se muestra el siguiente mensaje
*/
echo "No se encontraron resultados!";
}
?>
</table>

Archivo: buscar_form3.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form name="form1" method="post" action="buscar_resultado3.php">
Buscar Libro:
<input name="libro" type="text" id="libro">
<br>
Precio
<input name="precio" type="text" id="precio">
<br>
<input type="submit" name="Submit" value="Buscar">
</form>
</body>
</html>

Archivo: buscar_resultado3.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */
include("conection.php");

/* Almacenamos en variables los datos del formulario


notemos que se estn enviando en mtodo POST */
$libro = $_POST['libro'];
$precio = $_POST['precio'];

?>
<table width="700" border="1" cellspacing="2" cellpadding="2">
<tr>
<td>Titulo</td>
<td>Precio</td>
<td>Autor</td>
</tr>
<?
/*
Realizamos la consulta a la base datos
note que estamos trabajando con "inner join"
para relacionar 2 tables libros y autor, con
"$sql .=" se puede separar la consulta en 2 lineas a mas,
este tipo de consulta es para buscar dos datos que tenga algn
tipo de similitud en la base de datos "where libros.titulo like '%$libro%' and libros.precio like
'%$precio%'"
*/
$link=Conectarse();
$sql = "select libros.titulo, libros.precio, autor.nombre from libros ";
$sql .=" inner join autor on libros.autorID = autor.autorID";
$sql .=" where libros.titulo like '%$libro%' and libros.precio like '%$precio%'";
$result = mysql_query($sql, $link);
if ($row = mysql_fetch_array($result)){
mysql_field_seek($result,0);
while ($field = mysql_fetch_field($result)){
} do {
/*
Con "$row" mostramos los datos
*/
?>
<tr>
<td><? echo $row[0]; ?></td>
<td><? echo $row[1]; ?></td>
<td><? echo $row[2]; ?></td>
</tr>
<?
} while ($row = mysql_fetch_array($result));
} else {
/*
Si no se encontraron resultados
se muestra el siguiente mensaje
*/
echo "No se encontraron resultados!";
}
?>
</table>

Archivo: insertar_datos_form.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="guardar_datos.php">
<table width="335" border="1" cellspacing="2" cellpadding="2">
<tr>
<td width="76">Libro:</td>
<td width="239"><input name="titulo" type="text" id="titulo" /></td>
</tr>
<tr>
<td>Precio:</td>
<td><input name="precio" type="text" id="precio" /></td>
</tr>
<tr>
<td>Autor ID:</td>
<td><input name="autorID" type="text" id="autorID" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Guardar" /></td>
</tr>
</table>
</form>
</body>
</html>

Archivo: insertar_datos_avanzado_form.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */
include("conection.php");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="guardar_datos.php">
<table width="335" border="1" cellspacing="2" cellpadding="2">
<tr>
<td width="76">Libro:</td>
<td width="239"><input name="titulo" type="text" id="titulo" /></td>
</tr>
<tr>
<td>Precio:</td>
<td><input name="precio" type="text" id="precio" /></td>
</tr>
<tr>
<td>Autor:</td>
<td>
<select name="autorID" id="autorID">
<?
/*
Realizamos una consulta ala tabla autor
para mostrar los datos en un combo
*/
$link=Conectarse();
$sql = "select autorID, nombre from autor order by nombre";
$result = mysql_query($sql, $link);
if ($row = mysql_fetch_array($result)){
mysql_field_seek($result,0);
while ($field = mysql_fetch_field($result)){
} do {

echo "<option value=". $row[0]. ">". $row[1]. "</option>";


} while ($row = mysql_fetch_array($result));
} else {
echo "No se encontraron resultados!";
}
?>
</select>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Guardar" /></td>
</tr>
</table>
</form>
</body>
</html>

Archivo: guardar_datos.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */
include("conection.php");

/* Almacenamos en variables los datos del formulario


notemos que se estn enviando en mtodo POST */
$titulo = $_POST['titulo'];
$precio = $_POST['precio'];
$autorID = $_POST['autorID'];

/* Insertamos los nuevos datos */


$link=Conectarse();
$sql = "INSERT INTO libros (titulo, precio, autorID)";
$sql .= "VALUES ('$titulo', '$precio', '$autorID')";
$result = mysql_query($sql);
echo "Registro Aadido!";
?>

Archivo: actualizar_pro1.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */
include("conection.php");
?>
<table width="700" border="1" cellspacing="2" cellpadding="2">
<tr>
<td>Titulo</td>
<td>Precio</td>
<td>Autor</td>
</tr>
<?
/*
Realizamos la consulta a la base datos
note que estamos trabajando con "inner join"
para relacionar 2 tables libros y autor, con
"$sql .=" se puede separar la consulta en 2 lneas a mas
*/
$link=Conectarse();
$sql = "select libros.titulo, libros.precio, autor.nombre, libros.libroID from libros ";
$sql .=" inner join autor on libros.autorID = autor.autorID";
$result = mysql_query($sql, $link);
if ($row = mysql_fetch_array($result)){
mysql_field_seek($result,0);
while ($field = mysql_fetch_field($result)){
} do {
/*
con "$row" mostramos los datos
notemos que se incluido un enlace con el ID
del registro.
*/
?>
<tr>
<td><a href="Actualizar_pro2.php?libroID=<? echo $row[3]; ?>"><? echo $row[0]; ?></a></td>
<td><? echo $row[1]; ?></td>
<td><? echo $row[2]; ?></td>
</tr>
<?
} while ($row = mysql_fetch_array($result));
} else {
/*
si no se encontraron resultados
se muestra el siguiente mensaje
*/
echo "No se encontraron resultados!";
}
?>
</table>

Archivo: actualizar_pro2.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */
include("conection.php");

/* Almacenamos en variables los datos del formulario


notemos que se estn enviando en mtodo GET */
$libroID = $_GET['libroID'];
?>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>
<body>

<?
/*
Realizamos nuevamente la consulta pero esta vez
solo mostramos los datos exclusivamente del ID
seleccionado
*/
$link=Conectarse();
$sql = "select titulo, precio, autorID, libroID from libros where libroID = $libroID";
$result = mysql_query($sql, $link);
if ($row = mysql_fetch_array($result)){
mysql_field_seek($result,0);
while ($field = mysql_fetch_field($result)){
} do {

/*
Almacenamos los datos en variables
para luego mostrarlos en el formulario
*/
$titulo = $row[0];
$precio = $row[1];
$autorID = $row[2];
$libroID = $row[3];

} while ($row = mysql_fetch_array($result));


} else {
echo "No se encontraron resultados!";
}
?>

<form id="form1" name="form1" method="post" action="Actualizar_pro3.php">


<table width="335" border="1" cellspacing="2" cellpadding="2">
<tr>
<td width="76">Libro:</td>
<td width="239"><input name="titulo" type="text" value="<? echo $titulo;?>"></td>
</tr>
<tr>
<td>Precio:</td>
<td><input name="precio" type="text" value="<? echo $precio;?>"></td>
</tr>
<tr>
<td>Autor:</td>
<td>
<select name="autorID" id="autorID">
<?
/*
en esta segunda consulta mostraremos los datos de la tabla autor
de esta manera lo veremos en un combo para seleccionar el nombre
*/

$link=Conectarse();
$sql = "select autorID, nombre from autor order by nombre";
$result = mysql_query($sql, $link);
if ($row = mysql_fetch_array($result)){
mysql_field_seek($result,0);
while ($field = mysql_fetch_field($result)){
} do {
?>
<option value=<? echo $row[0]; ?> <? if ($autorID == $row[0]){?> selected <? } ?>><? echo
$row[1] ?></option>
<?
} while ($row = mysql_fetch_array($result));
} else {
echo "No se encontraron resultados!";
}
?>
</select>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<!--
En un campo oculto almacenamos el
ID del libro para identificar el registro
que se esta actualizando
-->
<input type="submit" name="Submit" value="Guardar" />
<input name="libroID" type="hidden" value="<? echo $libroID;?>"></td>
</tr>
</table>
</form>
</body>
</html>

Archivo: actualizar_pro3.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */
include("conection.php");

/* Almacenamos en variables los datos del formulario


notemos que se estn enviando en mtodo POST */
$titulo = $_POST['titulo'];
$precio = $_POST['precio'];
$autorID = $_POST['autorID'];
$libroID = $_POST['libroID'];

/* Y finalmente actualizamos los datos*/


$link=Conectarse();
$sql = "UPDATE libros SET titulo='$titulo', precio='$precio', autorID='$autorID' WHERE
libroID='$libroID'";
$result = mysql_query($sql);
echo "Datos Actualizados!";
?>

Archivo: borrar_pro1.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */
include("conection.php");
?>
<table width="700" border="1" cellspacing="2" cellpadding="2">
<tr>
<td>Titulo</td>
<td>Precio</td>
<td>Autor</td>
</tr>
<?
/*
Realizamos la consulta a la base datos
note que estamos trabajando con "inner join"
para relacionar 2 tablas libros y autor, con
"$sql .=" se puede separar la consulta en 2 lneas a mas
*/
$link=Conectarse();
$sql = "select libros.titulo, libros.precio, autor.nombre, libros.libroID from libros ";
$sql .=" inner join autor on libros.autorID = autor.autorID";
$result = mysql_query($sql, $link);
if ($row = mysql_fetch_array($result)){
mysql_field_seek($result,0);
while ($field = mysql_fetch_field($result)){
} do {
/*
con "$row" mostramos los datos
notemos que se incluido un enlace con el ID
del registro.
*/
?>
<tr>
<td><a href="Borrar_pro2.php?libroID=<? echo $row[3]; ?>"><? echo $row[0]; ?></a></td>
<td><? echo $row[1]; ?></td>
<td><? echo $row[2]; ?></td>
</tr>
<?
} while ($row = mysql_fetch_array($result));
} else {

/*
Si no se encontraron resultados
se muestra el siguiente mensaje
*/
echo "No se encontraron resultados!";
}
?>
</table>

Archivo: borrar_pro2.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */
include("conection.php");

/* Almacenamos en variables los datos del formulario


notemos que se estn enviando en mtodo GET */
$libroID = $_GET['libroID'];

/* Y eliminamos el Registro */
$link=Conectarse();
$sql = "DELETE FROM libros WHERE libroID = $libroID ";
$result = mysql_query($sql);
echo "Registro Eliminado!";
?>
OCTAVA PRACTICA DE PHP

CREACION DE UN SISTEMA DE ENCUESTAS O VOTACIONES

Crear la base de datos encuestas que contiene:


CREATE TABLE datos (
encid int(11) NOT NULL auto_increment,
encprg varchar(50) default NULL,
encrpt1 varchar(50) default NULL,
encrpt2 varchar(50) default NULL,
encrpt3 varchar(50) default NULL,
encrpt4 varchar(50) default NULL,
encval1 int(11) NOT NULL default '0',
encval2 int(11) NOT NULL default '0',
encval3 int(11) NOT NULL default '0',
encval4 int(11) NOT NULL default '0',
enctot int(11) NOT NULL default '0',
PRIMARY KEY (encid)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO datos VALUES (1, 'Programacin Web', 'PHP', 'ASP', 'ASPX', 'JSP', 35, 13, 4, 16,
68);

Archivo: config.php
<?
/* Conexin con la Base de Datos MySQL 5*/

$servidor ="localhost";
$usuario ="root";
$password ="";
$base ="encuestas";

$SQLid = mysql_connect($servidor,$usuario,$password);
?>

Archivo: index.php
<?

/* Incluimos el fichero de conexin


a la base de datos mysql */
require('config.php');

/* Generamos un consulta
en la base de datos mysql, donde se mostraran
los datos de la encuesta, en la tabla Datos
podemos almacenar diversos tipos de encuestas y cada uno tendr
su propio ID de identificacin, para este ejemplo
sera "encid = 1"
*/
mysql_select_db($base,$SQLid);
$query = "SELECT encid, encprg, encrpt1, encrpt2, encrpt3, encrpt4 FROM datos where encid =
1";
$result = mysql_query($query,$SQLid);
$row = mysql_fetch_array($result);

/*
A continuacin mostramos los datos con "$row"
donde "0" es el ID, "1" el titulo y del 2 al 5
los nombres de la encuesta

Es importante mostrar el ID de la encuesta


para identificar a que encuesta se esta promediando
*/

?>
<html>
<head>
<title>Encuestas</title>
</head>
<body>
<form name="form1" method="post" action="encuesta.php">
<input type=hidden name="encid" value="<? echo $row[0] ?>">
<br>
<table width="300" border="0" align="center" cellpadding="2" cellspacing="0"
bgcolor="#CCCCCC">
<tr>
<td colspan="2" bgcolor="#666666"><div align="center">
<font color="#FFFFFF" size="2" face="Verdana, Arial, Helvetica, sans-serif">
Encuestas
</font>
</div></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<strong>
<? echo $row[1]?>
</strong>
</font>
</div></td>
</tr>
<tr>
<td width="20"><input name="voto" type="radio" value="1" checked="checked" /></td>
<td width="272"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<? echo $row[2]?></font></td>
</tr>
<tr>
<td><input type="radio" name="voto" value="2" /></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<? echo $row[3]?>
</font></td>
</tr>
<tr>
<td><input type="radio" name="voto" value="3" /></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<? echo $row[4]?>
</font></td>
</tr>
<tr>
<td><input type="radio" name="voto" value="4" /></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<? echo $row[5]?>
</font></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="Enviar" />
</div></td>
</tr>
</table>
</form>
</body>
</html>

Archivo: encuesta.php
<?
/* Incluimos el fichero de conexin
a la base de datos mysql */

require('config.php');

/* Almacenamos en variables los datos del Voto


notemos que se estn enviando en mtodo POST y
que solo se estn almacenando 2 variables, el del voto
y el ID de la encuesta
*/

$voto = $_POST["voto"];
$encid = $_POST["encid"];

/* Actualizamos el registro de la encuesta


donde con "where encid=$encid" identifica el registro
de encuesta a actualizar, en "enctot = enctot+1"
suma el total de votos de todas las encuestas
y por ultimo "encval$voto = encval$voto+1" suma
el total de votos para la votacin seleccionada.
*/

mysql_select_db($base,$SQLid);
$SQLquery = "UPDATE datos SET encval$voto = encval$voto+1, enctot = enctot+1 where
encid=$encid";
$SQLresult = mysql_query($SQLquery,$SQLid);
/* Luego de actualizar los datos de la votacin
mostraremos la estadstica de la encuesta.
*/

$SQLquery = "SELECT * FROM datos where encid=$encid";


$result = mysql_query($SQLquery,$SQLid);
$row = mysql_fetch_array($result);

/* La estadstica se mostrara con un lnea grafica


que no es mas que una imagen gif la cual se alarga
de acuerdo al porcentaje. Promediando el total de tipo
de encuesta "encval1" por el 100% "*100" entre "/" el
total de la votos "enctot", como resultado tendremos
ejemplo: 4.444444, ahora si esto lo colocamos en una etiqueta
img se mostrara asi:

<img height="5" width="4.444444%" src="imagenes/barra1.gif" />

Es importante colocar el signo de "%" al final, para que el tamao


de la imagen se ajuste al valor.

En la parte superior del grafico he mostrado el valor de los botos en %


notaremos que es la misma operacin matemtica aplicada a diferencia
que le coloco round(operacion,1)
donde "round" redondea el valor si en caso es muy largo como "4.444444"
a solo "1" digito quedando asi "4.4"
*/

?>

<html>
<head>
<title>Encuestas</title>
</head>
<body>

<center>
<font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<strong>
RESULTADOS DE LA ENCUESTA
<br>
<? echo $row["encprg"] ?>
</strong>
</font>

<table width="500" border="0" cellpadding="2" cellspacing="2" bgcolor="#CCCCCC">


<tr>
<td width="91"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<? echo $row["encrpt1"]?>
</font></td>
<td width="299">

<font size="2" face="Verdana, Arial, Helvetica, sans-serif">


<? echo round($row["encval1"]*100/$row["enctot"],1)?> %</font><br>

<img height="5" width="<? echo $row["encval1"]*100/$row["enctot"]?>%"


src="imagenes/barra1.gif" /></td>
<td width="98"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>
<? echo $row["encval1"]?>
</b> votos</font></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<? echo $row["encrpt2"]?>
</font></td>
<td>

<font size="2" face="Verdana, Arial, Helvetica, sans-serif">


<? echo round($row["encval2"]*100/$row["enctot"],1)?> %</font><br>

<img height="5" width="<? echo $row["encval2"]*100/$row["enctot"]?>%"


src="imagenes/barra2.gif" /></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>
<? echo $row["encval2"]?>
</b> votos</font></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<? echo $row["encrpt3"]?>
</font></td>
<td>

<font size="2" face="Verdana, Arial, Helvetica, sans-serif">


<? echo round($row["encval3"]*100/$row["enctot"],1)?> %</font><br>

<img height="5" width="<? echo $row["encval3"]*100/$row["enctot"]?>%"


src="imagenes/barra3.gif" /></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>
<? echo $row["encval3"]?>
</b> votos</font></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<? echo $row["encrpt4"]?>
</font></td>
<td>

<font size="2" face="Verdana, Arial, Helvetica, sans-serif">


<? echo round($row["encval4"]*100/$row["enctot"],1)?> %</font><br>

<img height="5" width="<? echo $row["encval4"]*100/$row["enctot"]?>%"


src="imagenes/barra4.gif" /></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>
<? echo $row["encval4"]?>
</b> votos</font></td>
</tr>
</table>

<font size="2" face="Verdana, Arial, Helvetica, sans-serif">


Total de votos: <b><? echo $row["enctot"]?></b></font>
</center>

</body>
</html>
NOVENA PRACTICA DE PHP

CREACION DE UN FORO

Crear la base de datos foro que contiene:


CREATE TABLE foro (
id int(7) NOT NULL auto_increment,
autor varchar(200) NOT NULL default '',
email varchar(80) NOT NULL,
titulo varchar(200) NOT NULL default '',
mensaje text NOT NULL,
fecha datetime NOT NULL default '0000-00-00 00:00:00',
respuestas int(11) NOT NULL default '0',
identificador int(7) NOT NULL default '0',
ult_respuesta datetime default NULL,
KEY id (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

INSERT INTO foro VALUES (1, 'Joel De la Cruz', 'correo@correo.com', 'PHP y MySQL 5',
'Informaci&oacute;n de PHP 5 y MySQL 5', '2006-02-27 11:49:45', 2, 0, '2006-02-27 11:50:57');
INSERT INTO foro VALUES (2, 'Carol Mejia', 'correo@correo.com', 'Re: PHP y MySQL 5',
'[citar]Informaci&oacute;n de PHP 5 y MySQL 5[/citar] Sobre PHP 5 en www.php.net', '2006-02-
27 11:50:23', 0, 1, '2006-02-27 11:50:23');
INSERT INTO foro VALUES (3, 'Carmen Mejia', 'correo@correo.com', 'Re: PHP y MySQL 5',
'[citar]Informaci&oacute;n de PHP 5 y MySQL 5[/citar] Sobre MySQl 5 en www.mysql.com',
'2006-02-27 11:50:57', 0, 1, '2006-02-27 11:50:57');

Archivo: config.php
<?php
/* Conexin con la Base de Datos MySQL 5*/
$bd_host = "localhost";
$bd_usuario = "root";
$bd_password = "";
$bd_base = "foro";
$con = mysql_connect($bd_host, $bd_usuario, $bd_password);
mysql_select_db($bd_base, $con);
?>

Archivo: cabecera_de_pagina.html
<html>
<head>
<title>Foro</title>
<style type="text/css">
<!--
a{
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
color: #0066FF;
}
a:link {
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #0065FF;
}
a:hover {
text-decoration: none;
color: #0065FF;
}
a:active {
text-decoration: none;
color: #0065FF;
}
.Estilo3 {font-size: 18px}
-->
</style></head>
<body>
<table width="700" border="0" align="center" cellpadding="2" cellspacing="2">
<tr>
<td bgcolor="#E5E5E5">
<font face="Verdana, Arial, Helvetica, sans-serif" size="5">
Foro </font>

<div align="right">
<a href="index.php"><strong>Home</strong></a>
<font face="Verdana, Arial, Helvetica, sans-serif" size="1">l</font>
<a href="respuesta.php"><strong>Nuevo Tema</strong></a>
</div>
</td>
</tr>
</table>

Archivo: pie_de_pagina.html
<table width="700" border="0" align="center" cellpadding="2" cellspacing="2"
bgcolor="#E5E5E5">
<tr>
<td align="center">
<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Foro de Programacin</font>
</td>
</tr>
</table>
</body>
</html>

Archivo: formulario.html
<table width="700" border="0" cellspacing="2" cellpadding="2">
<form name="f" action="agregar.php" method="post">
<input type="hidden" name="identificador" value="<?=$id?>">
<tr>
<td width="30%" align="right"><font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Autor</font> </td>
<td><input type="text" name="autor"></td>
</tr>
<tr>
<td width="30%" align="right"><font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Titulo</font></td>
<td><input type="text" name="titulo" value="<?=$titulo?>"></td>
</tr>
<tr>
<td align="right"><font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Email</font></td>
<td><input name="email" type="text" id="email" /></td>
</tr>
<tr>
<td width="30%" align="right"><font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Mensaje</font></td>
<td><textarea name="mensaje" cols="50" rows="5"><?=$mensaje?></textarea></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="Submit" value="Enviar Mensaje"> </td>
</tr>
</form>
</table>

Archivo: cuerpo_de_mensaje.html
<table width="700" border="0" align="center" cellpadding="2" cellspacing="2">
<tr bgcolor="<?=$color?>">
<td width="25%" valign="top">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<b><a name="<?=$id?>"><?=$autor?></a></b><br>
Email: <a href="mailto:<?=$email?>"><?=$email?></a><br>
Enviado el : <?=$enviado?>
</font>
</td>
<td> <table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<strong>
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<?=$titulo?>
</font>
</strong>
</td>
<td width="10%" align="right">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
[ <a href="respuesta.php?id=<?=$id?>&citar=1">CITAR</a>]
</font>
</td>
</tr>
</table>
<hr align="center" width="100%" size="2" noshade>
<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<?=$mensaje?>
</font>
</td>
</tr>
<tr>
<td colspan="2" height="5"></td>
</tr>
</table>

Archivo: cabecera_de_registros.html
<table width="700" border="0" align="center" cellpadding="2" cellspacing="2"
bgcolor="#B8D6EB">
<tr>
<td> <font face="Verdana, Arial, Helvetica, sans-serif" size="2"> T&iacute;tulo </font></td>
<td width="15%" align="center"> <font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Autor</font></td>
<td width="15%" align="center"> <font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Respuestas</font></td>
<td width="15%" align="center"> <font face="Verdana, Arial, Helvetica, sans-serif"
size="2">&Uacute;lt. Mensaje</font></td>
</tr>
</table>

Archivo: titulo_de_mensajes.html
<table width="700" border="0" align="center" cellpadding="2" cellspacing="2"
bgcolor="#B8D6EB">
<tr align="center">
<td width="25%"> <font face="Verdana, Arial, Helvetica, sans-serif"
size="2">Usuario</font></td>
<td> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Mensaje</font></td>
</tr>
</table>

Archivo: temas.html
<table width="700" border="0" align="center" cellpadding="2" cellspacing="2"
bgcolor="<?=$color?>">
<tr>
<td>
<a href="foro.php?id=<?=$id?>"><b><?=$titulo?></b></a>
</td>

<td width="15%" align="center">


<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
Por <b> <?=$autor?> </b><br> el <?=$fecha?>
</font>
</td>

<td width="15%" align="center">


<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<?=$respuestas?>
</font>
</td>

<td width="15%" align="center">


<font face="Verdana, Arial, Helvetica, sans-serif" size="2">
<?=$ult_respuesta?>
</font>
</td>
</tr>
</table>

Archivo: index.php
<?php
/* Incluimos el fichero de conexin
a la base de datos mysql */
require('config.php');

/* Incluimos el fichero de funciones */


require('funciones.php');

/* Incluimos el fichero de cabecera */


include('cabecera_de_pagina.html');

/* Seleccionamos todos los temas iniciales (identificador=0)


y los ordenamos por ult_respuesta */
$sql = "SELECT id, autor, titulo, fecha, respuestas, ult_respuesta ";
$sql.= "FROM foro WHERE identificador=0 ORDER BY ult_respuesta DESC";
$rs = mysql_query($sql, $con);
if(mysql_num_rows($rs)>0)
{
/* Incluimos el contenido de la plantilla de temas */
$template = implode("", file("temas.html"));

/* Incluimos el fichero de cabecera de registros */


include('cabecera_de_registros.html');
while($row = mysql_fetch_assoc($rs))
{

/* Puede cambiar el color del registro


Reemplazando el #BCBCBC*/
$color=($color==""?"#BCBCBC":"");
$row["color"] = $color;

/* mostrarTemplate llama a la funcin en


el fichero funciones.php */
mostrarTemplate($template, $row);
}
}

/* Incluimos el fichero de pie de pagina */


include('pie_de_pagina.html');
?>

Archivo: foro.php
<?php
/* Incluimos el fichero de conexin
a la base de datos mysql */
require('config.php');

/* Incluimos el fichero de funciones */


require('funciones.php');

/* Almacenamos en variables los datos


Notemos que se estn enviando en mtodo GET */
$id = $_GET["id"];

/* Validamos el campo id,


Si es vaci se redireccin a index.php */
if(empty($id)) Header("Location: index.php");

/* Generamos la consulta SQL */


$sql = "SELECT id, autor, email, titulo, mensaje, ";
$sql.= "DATE_FORMAT(fecha, '%d/%m/%Y %H:%i:%s') as enviado FROM foro ";
$sql.= "WHERE id='$id' OR identificador='$id' ORDER BY fecha ASC";
$rs = mysql_query($sql, $con);

/* Incluimos el fichero de cabecera */


include('cabecera_de_pagina.html');

if(mysql_num_rows($rs)>0)
{

/* Incluimos el fichero de titulo */


include('titulo_de_mensajes.html');

/* Incluimos el fichero de estilo para cada registro */


$template = implode("", file('cuerpo_de_mensaje.html'));
while($row = mysql_fetch_assoc($rs))
{

/* Puede cambiar el color del registro


Reemplazando el #BCBCBC*/
$color=($color==""?"#BCBCBC":"");
$row["color"] = $color;

/* nl2br genera los saltos de lnea


en los mensajes */
$row["mensaje"] = nl2br($row["mensaje"]);

/* parsearTags y mostrarTemplate llama a la funcin en


el fichero funciones.php */
$row["mensaje"] = parsearTags($row["mensaje"]);
mostrarTemplate($template, $row);
}
}
/* Incluimos el fichero de pie de pagina */
include('pie_de_pagina.html');
?>
Archivo: agregar.php
<?php

/* Incluimos el fichero de conexin


a la base de datos mysql */
require('config.php');

/* Almacenamos en variables los datos del formulario


Notemos que se estn enviando en mtodo POST */
$autor = $_POST["autor"];
$email = $_POST["email"];
$titulo = $_POST["titulo"];
$mensaje = $_POST["mensaje"];
$ident = $_POST["identificador"];

/* Validamos el campo autor,


Si es vaci se aadir annimo */
if(empty($autor)) $autor = "Annimo";

/* Validamos el campo Titulo,


Si es vaci se aadir Sin ttulo */
if(empty($titulo)) $titulo = "Sin ttulo";

/* Con htmlentities impedimos que el usuario ingrese cdigo HTML */


$mensaje = htmlentities($mensaje);
/* Ingresamos el mensaje en la base.
Noten que con $sql. Podemos dividir
La lnea SQL en 2 o mas lneas */
$sql = "INSERT INTO foro (autor, email, titulo, mensaje, identificador, fecha, ult_respuesta) ";
$sql.= "VALUES ('$autor', '$email', '$titulo','$mensaje','$ident',NOW(),NOW())";
$rs = mysql_query($sql, $con) or die("Error al grabar un mensaje: ".mysql_error);
$ult_id = mysql_insert_id($con);
/* Si ingresa un mensaje en respuesta a otro
Solo actualizamos los datos */
if(!empty($ident))
{
$sql = "UPDATE foro SET respuestas=respuestas+1, ult_respuesta=NOW()";
$sql.= " WHERE id = '$ident'";
$rs = mysql_query($sql, $con);

/* Con Header redireccionamos


a la pagina foro.php cuando se ingresa un mensaje en respuesta a otro */
Header("Location: foro.php?id=$ident#$ult_id");
exit();
}
/* Al final con Header redireccionamos
a la pagina index.php cuando el mensaje es nuevo*/
Header("Location: index.php");
?>
Archivo: respuesta.php
<?php
/* Incluimos el fichero de conexin
a la base de datos mysql */
require('config.php');

/* Incluimos el fichero de funciones */


require('funciones.php');

/* Almacenamos en variables los datos


Notemos que se estn enviando en metodo GET */
$id = $_GET["id"];
$citar = $_GET["citar"];

/* Creamos un arreglo con el id */


$row = array("id" => $id);

/* Si citar es igual a 1
se procede al siguiente proceso */
if($citar==1)
{
$sql = "SELECT titulo, mensaje, identificador AS id FROM foro WHERE id='$id'";
$rs = mysql_query($sql, $con);
if(mysql_num_rows($rs)==1) $row = mysql_fetch_assoc($rs);
$row["titulo"] = "Re: ".$row["titulo"];
$row["mensaje"] = "[citar]".$row["mensaje"]."[/citar]";
if($row["id"]==0) $row["id"]=$id;
}

/* Incluimos el fichero de formulario */


$template = implode("", file('formulario.html'));

/* Incluimos el fichero de cabecera */


include('cabecera_de_pagina.html');

/* mostrarTemplate llama a la funcin en


el fichero funciones.php */
mostrarTemplate($template, $row);

/* Incluimos el fichero de pie de pagina */


include('pie_de_pagina.html');
?>

Archivo: funciones.php
<?php
/* mostrarTemplate ()
La funcin mostrarTemplate toma el
contenido de la plantilla y un array asociativo con los
valores a reemplazar. La funcin de PHP extract()
se encarga de pasar estos valores a la funcin.
Por lo que si tenemos un arreglo del
tipo $a = array("clave" => "valor"), al ejecutar
extract($a), entonces pasaremos a tener una variable
disponible, de nombre $variable y con "valor" como
contenido. Luego, la funcin eval() se encarga de ejecutar
todo el cdigo de la plantilla.
*/
function mostrarTemplate($tema, $variables)
{
//var_dump($variables);
extract($variables);
eval("?>".$tema."<?");
}
/* parsearTags ()
Dentro de esta funcin, se puede aplicar
diversas modificaciones al mensaje del foro. En el ejemplo,
se muestra el uso de un tag propio, [citar].
El mismo, dentro de la funcin, ser reemplazado por el
cdigo HTML necesario para destacar el citado de un mensaje.
*/
function parsearTags($mensaje)
{
$mensaje = str_replace("[citar]", "<blockquote><hr width='100%' size='2'>", $mensaje);
$mensaje = str_replace("[/citar]", "<hr width='100%' size='2'></blockquote>", $mensaje);
return $mensaje;
}
?>

Das könnte Ihnen auch gefallen