Separata preparada para el desarrollo del curso de:
Lenguaje de Programación I
Cuarta Unidad Temática:USO DE FUNCIONES EN PHP
Facultad de Ingeniería de Sistemas
TERCER CICLO
Semestre: 2013-II
2013
INDICE
PRIMERA UNIDAD TEMATICA
USO DE FUNCIONES EN PHP
DECIMA TERCERA SEMANA
MARCO TEORICOFUNCIONES DE FECHA Y DE CADENAFunciones de Fecha……………...................................................................................... 4Funciones de Cadena…………...................................................................................... 12
MARCO PRACTICOActividades....................................................................................................................... 15
DECIMA CUARTA SEMANA
MARCO TEORICOFUNCIONES DE ARREGLO Y DE PRESENTACIÓN DE DATOSManejo de Arreglos……………...................................................................................... 17Funciones de Presentación de Datos................................................................................. 23
MARCO PRACTICOActividades....................................................................................................................... 25
DÉCIMA QUINTA SEMANA
MARCO TEORICOVALIDACION DE DATOS A NIVEL CLIENTE/SERVIDORValidación usando código cliente...................................................................................... 26Validación con código de servidor.................................................................................... 29
MARCO PRACTICOActividades........................................................................................................................ 32
DÉCIMA SEXTASEMANA
MARCO TEORICOFUNCIONES DE MANEJO DE BASE DE BASE DE DATOS MySQLFunciones de Base de Datos de MySQL en PHP…….................................................... 33Caso Practico……………………..………………......................................................... 41
Universidad Privada Telesup
DÉCIMA SEMANA – Marco Teórico
LogroQue el participante conozca y utilice las funciones de fecha para el manejo de datos cronológicos y las funciones de cadena para el trabajo con datos de tipo cadena.ResumenExisten diversas funciones que nos permiten trabajar con datos cronológicos tales como: date(), checkdate() y strtotime().Adicionalmente también PHP nos ofrece una serie de funciones para procesar datos de tipo cadena.
Funciones de Fecha y de Cadena
Los datos cronológicos son aquellos que representan un instante de tiempo
(Fecha y/o Hora), los datos cronológicos en PHP están expresados en marcas
de tiempo en una recta cronológica expresada en segundos la cual comienza el
01 de Enero de 1970 a las 00:00.00 Hrs, asociado a la marca de tiempo 0, a
partir de este punto inicial, la recta cronológica se extiende de segundo en
segundo, asi que el 02 de Enero de 1970 a las 00:00.00 hrs , está asociada a la
marca de tiempo 86400, y el 03 de Enero de 1970 a las 00:00.00 hrs , está
asociada a la marca de tiempo 172800 y así sucesivamente. A las marcas de
tiempo también se le llama timespan.
Para conocer la marca de tiempo de una fecha:
El timespan o marca de tiempo de una fecha corresponde a la cantidad de
segundos transcurridos desde el 01/01/1970 00:00.00 hrs (GMT), hasta una
determinada fecha. Todos los datos cronológicos tienen un timespan.
<?echo strtotime("31 December 2008");echo strtotime("26 May 2008 08:00:00"); echo strtotime("now"); //Marca de tiempo actual?>
Para mostrar una fecha a partir de una marca de tiempo:
date(formato,timespan)
Esta función visualiza una fecha de acuerdo a la marca de tiempo, si no se
especifica la fecha, se asumirá la fecha actual.
$n=strtotime(“12 oct 1989”); //Obtenemos la marca de tiempo$fn=date(“d/m/y”,$n); //Obtenemos la fecha a partir de la marca tiempoecho $fn; //Visualizamos la fecha anterior en formato d/m/y
Asignatura: Laboratorio de Programación I
5
Universidad Privada Telesup
Para establecer los formatos en la función date, utilice los siguientes valores:
Valores Descripción
a “a.m” o “p.m”
A “A.M.” o “P.M”
d Día del mes con dos dígitos (de 01 a 31)
D Día de la semana con tres caracteres
F Nombre del mes
h Hora en formato “01” a “12”
H Hora en formato “00” a “23”
g Hora en formato “1” a “12” (sin cero)
G Hora en formato “0” a “23” (sin cero)
i Minutos de “00” a “59”
j Día del mes en formato “1” a “31”
l Día de la semana, en texto completo
L 1: si es año bisiesto; 0: si no es un año bisiesto
m Mes de “01” a “12”
M Mes con tres caracteres
n Mes de “1” a “12” (sin cero inicial)
s Segundos de 00 a 59
S Sufijo ordinal en inglés (“th”, “nd”)
t Número de dias del mes dado, de 28 a 31
U Segundos transcurridos desde el valor de inicio (01-01-
1970)
w Día de la semana de “0” (domingo) a “6” (sábado)
Y Año con cuatro digitos
y Año con dos digitos
z Día del año de “0” a “365”
Ejemplo:
echo date(“d/M/y”); //Muestra la fecha actual en formato 01/01/08
echo date(“d/F/y”,strtotime(“28 February 2008”));
Validar una fecha
checkdate(mes,dia,año)
Asignatura: Laboratorio de Programación I
6
Universidad Privada Telesup
Esta función valida la fecha de acuerdo a los parámetros recibidos, si la fecha
es correcta, esta función devuelve true, en caso contrario devuelve false.
if(checkdate(13,14,2008)) //mm,dd,aa
{ echo "Fecha valida"."<br>"; }
else
{ echo "Fecha invalida"."<br>"; }
Nota: En este caso, el valor devuelto por la función checkdate es false (o
vacio).
Incrementar una cantidad de tiempo a una fecha
La función strtotime también nos permite incrementar una cantidad de tiempo
a la fecha especificada. La cadena de incremento debe obedecer las normas
del GNU. Para más información acuda a:
http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html
Ejemplos:
//Agregar 20 días a la fecha de 28/05/2008
$x=strtotime("+20 days",strtotime("28 May 2008"));
$nf1=date("d/M/y h:i.s",$x);
echo $nf1."<br>";
//Agregar 2 años a la fecha de 28/05/2008
$x=strtotime("+20 years",strtotime("28 May 2008"));
$nf1=date("d/M/y h:i.s",$x);
echo $nf1."<br>";
//Agregar 2 semanas a la fecha de 28/05/2008
$x=strtotime("+2 weeks",strtotime("28 May 2008"));
$nf1=date("d/M/y h:i.s",$x);
echo $nf1."<br>";
//Hallar la fecha que corresponde a la próxima semana de 28/05/2008
$x=strtotime("next week",strtotime("28 May 2008"));
$nf1=date("d/M/y h:i.s",$x);
echo $nf1."<br>";
EJEMPLOS PRACTICOS
Asignatura: Laboratorio de Programación I
7
Universidad Privada Telesup
a. Determinar la cantidad de tiempo transcurrido
1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2. <html xmlns="http://www.w3.org/1999/xhtml">
3. <head>
4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-
1" />
5. <title>Documento sin título</title>
6. </head>
7. <body>
8. <?
9. //Crear la fecha de hoy
10. $fechaactual=date("D d-m-Y H:i:s");
11. //Visualizar la fecha
12. echo $fechaactual."<br>";
13. //Averiguar su marca (timespan) en la línea de tiempo
14. $vfechaactual=strtotime("now");
15. echo "Marca de tiempo : ".$vfechaactual."<br>";
16. //Crear una fecha especifica
17. $fn=strtotime("20 jun 1991 1:15.12");
18. echo "Marca de tiempo : ".$fn."<br>";
19. //Formatear la fecha de nacimiento
20. echo date("D d/m/Y h:i.s",$fn)."<br>";
21. //Calcular el tiempo transcurrido entre ambas fechas
22. $edseg=$vfechaactual-$fn;
23. echo "La edad en segundos es ".number_format($edseg,2,".",",")."<br>";
24. $edmin=$edseg/60;
25. echo "La edad en minutos es ".number_format($edmin,2,".",",")."<br>";
26. $edhoras=$edmin/60;
27. echo "La edad en horas es ".number_format($edhoras,2,".",",")."<br>";
28. $eddias=$edhoras/24;
29. echo "La edad en dias es ".number_format($eddias,2,".",",")."<br>";
30. ?>
31. </body>
32. </html>
b. Agregar a una fecha específica una cierta cantidad de tiempo. Visualizar la
nueva fecha.
AgregarFecha.php
1. <?
2. $meses=array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","A
gosto","Septiembre","Octubre","Noviembre","Diciembre");
3. $mesabr=array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct
","Nov","Dec");
Asignatura: Laboratorio de Programación I
8
Universidad Privada Telesup
4. $tiempos=array("Dias","Semanas","Meses","Años");
5. $times=array("Days","Weeks","Months","Years");
6. //capturar valores
7. $dia=$_POST["cbodia"];
8. $mes=$_POST["cbomes"];
9. $year=$_POST["cboyear"];
10. $tipo=$_POST["cbotipo"];
11. $unidad=$_POST["cbounidad"];
12. $cant=$_POST["txtcant"];
13. $benviar=$_POST["btnenviar"];
14. if($benviar!="") {
15. //Hallar la marca de tiempo de la fecha seleccionada
16. $x=strtotime($dia." ".$mes." ".$year);
17. //Agregar la cantidad de tiempo
18. $y=strtotime($tipo.$cant." ".$unidad,$x);
19. //convertir a formato convencional
20. $nuevafecha=date("D d/m/Y",$y);
21. }
22. ?>
23.
24. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
25. <html xmlns="http://www.w3.org/1999/xhtml">
26. <head>
27. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-
1" />
28. <title>Documento sin título</title><style type="text/css">
29. <!--
30. .Estilo1 {
31. font-size: 16px;
32. color: #FF0000;
33. }
34. -->
35. </style></head>
36. <link rel="stylesheet" type="text/css" href="css/estilo.css">
37. <body>
38. <h1>Agregar un espacio de tiempo </h1>
39. <form id="form1" name="form1" method="post" action="">
40. <table width="346" border="1" align="center">
41. <tr>
42. <td width="111" class="tablaTitulo"><div
align="center"><strong>Dia</strong></div></td>
43. <td width="84" class="tablaTitulo"><div align="center"><strong>Mes
</strong></div></td>
44. <td width="129" class="tablaTitulo"><div
align="center"><strong>Año</strong></div></td>
45. </tr>
46. <tr>
47. <td><div align="center">
48. <select name="cbodia" id="cbodia">
49. <option>Dia</option>
50. <? for($i=1;$i<32;$i++) { ?>
51. <option value=<?=$i?>><?=$i?></option>
52. <? } ?>
Asignatura: Laboratorio de Programación I
9
Universidad Privada Telesup
53. </select>
54. </div></td>
55. <td><div align="center">
56. <select name="cbomes" id="cbomes">
57. <option>Mes</option>
58. <? for($i=0;$i<12;$i++) { ?>
59. <option value=<?=$mesabr[$i]?>><?=$meses[$i]?></option>
60. <? } ?>
61. </select>
62. </div></td>
63. <td><div align="center">
64. <select name="cboyear" id="cboyear">
65. <option>Año</option>
66. <? for($i=1980;$i<2001;$i++) { ?>
67. <option value=<?=$i?>><?=$i?></option>
68. <? } ?>
69. </select>
70. </div></td>
71. </tr>
72. <tr>
73. <td>Tipo de incremento </td>
74. <td colspan="2"><select name="cbotipo" id="cbotipo">
75. <option value="+">Ascendente</option>
76. <option value="-">Descendente</option>
77. </select> </td>
78. </tr>
79. <tr>
80. <td>Unidad de Tiempo </td>
81. <td><select name="cbounidad" id="cbounidad">
82. <option value="">Seleccione Unidad de tiempo</option>
83. <? for($i=0;$i<4;$i++) { ?>
84. <option value=<?=$times[$i]?>><?=$tiempos[$i]?></option>
85. <? } ?>
86. </select></td>
87. <td> </td>
88. </tr>
89. <tr>
90. <td>Cantidad de Tiempo </td>
91. <td><input name="txtcant" type="text" id="txtcant" /></td>
92. <td> </td>
93. </tr>
94. <tr>
95. <td colspan="3"><div align="center">
96. <input name="btnenviar" type="submit" class="boton" id="btnenviar"
value="Enviar" />
97. </div></td>
98. </tr>
99. </table>
100. </form>
101. <? if($benviar!="") { ?>
102. <div id="datos">
103. <div align="center"><strong><span
class="Estilo1"><?=$nuevafecha?></span></strong></div>
104. </div>
105. <? } ?>
Asignatura: Laboratorio de Programación I
10
Universidad Privada Telesup
106. <p> </p>
107. </body>
108. </html>
c. Determinar la cantidad de tiempo transcurrido entre 2 fechas
1. <?2. $meses=array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio",
"Agosto","Septiembre","Octubre","Noviembre","Diciembre");3. $mesabr=array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","O
ct","Nov","Dec");
4. //Capturar los valores5. $dia=$_REQUEST["cbodia"];6. $mes=$_REQUEST["cbomes"];7. $year=$_REQUEST["cboyear"];
8. $dia2=$_REQUEST["cbodia2"];9. $mes2=$_REQUEST["cbomes2"];10. $year2=$_REQUEST["cboyear2"];11. $benviar=$_REQUEST["btnenviar"];
12. //Validar ambas fechas13. if(checkdate($mes+1,$dia,$year) and checkdate($mes2+1,$dia2,$year2)) {14. $n1=strtotime($dia." ". $mesabr[$mes]." ".$year);15. $n2=strtotime($dia2." ". $mesabr[$mes2]." ".$year2);
16. if($n1<$n2){ //La fecha1 es menor que la fecha217. $dif=$n2-$n1;18. $dias=$dif/86400; //Convertimos los segundos en dias19. }20. else21. { $rpta="Lo sentimos la fecha 1 debe ser menor que la fecha 2";22. }23. }24. else {25. $rpta="Lo sentimos una de las fechas no es válida...";26. }27. ?>28. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">29. <html xmlns="http://www.w3.org/1999/xhtml">30. <head>31. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-
1" />32. <title>Documento sin título</title>33. <style type="text/css">34. <!--35. .Estilo1 {color: #0000FF}36. -->37. </style>38. </head>39. <link rel="stylesheet" type="text/css" href="css/estilo.css">40. <body>41. <h1><strong>Diferencia de Fechas</strong></h1>42. <form id="form1" name="form1" method="post" action="">43. <table width="200" border="1" align="center">44. <tr>45. <th scope="col">Dia</th>46. <th scope="col">Mes</th>47. <th scope="col">Año</th>48. </tr>
Asignatura: Laboratorio de Programación I
11
Universidad Privada Telesup
49. <tr>50. <td><select name="cbodia" id="cbodia">51. <option>Dia</option>52. <? for($i=1;$i<32;$i++) { ?>53. <option value="<?=$i?>">54. <?=$i?>55. </option>56. <? } ?>57. </select> </td>58. <td><select name="cbomes" id="cbomes">59. <option>Mes</option>60. <? for($i=0;$i<12;$i++) { ?>61. <option value="<?=$i?>">62. <?=$meses[$i]?>63. </option>64. <? } ?>65. </select></td>66. <td><select name="cboyear" id="cboyear">67. <option>Año</option>68. <? for($i=1980;$i<2001;$i++) { ?>69. <option value="<?=$i?>">70. <?=$i?>71. </option>72. <? } ?>73. </select></td>74. </tr>75. <tr>76. <td><select name="cbodia2" id="cbodia2">77. <option>Dia</option>78. <? for($i=1;$i<32;$i++) { ?>79. <option value="<?=$i?>">80. <?=$i?>81. </option>82. <? } ?>83. </select></td>84. <td><select name="cbomes2" id="cbomes2">85. <option>Mes</option> 86. <? for($i=1;$i<32;$i++) { ?>87. <option value="<?=$i?>"><?=$meses[$i]?></option>88. <? } ?>89. </select></td>90. <td><select name="cboyear2" id="cboyear2">91. <option>Año</option>92. <? for($i=1980;$i<2001;$i++) { ?>93. <option value="<?=$i?>">94. <?=$i?>95. </option>96. <? } ?>97. </select></td>98. </tr>99. <tr>100. <td colspan="3"><div align="center">101. <input name="btnenviar" type="submit" class="boton" id="btnenviar"
value="Enviar" />102. </div></td>103. </tr>104. </table>105. </form>106. <? if($benviar!="") { ?>107. <div id="datos">108. <table width="200" border="1" align="center">109. <tr>
Asignatura: Laboratorio de Programación I
12
Universidad Privada Telesup
110. <th scope="col">Dias Transcurrido </th>111. </tr>112. <tr>113. <? if($rpta==""){ ?>114. <td><div align="center" class="Estilo1"><?=number_format($dias,0,".","
")?></div></td>115. <? } else { ?> 116. <td><div align="center" class="Estilo1"><?=$rpta?></div></td>117. <? }?>118. </tr>119. </table>120. </div>121. <? } ?>122. <p> </p>123. </body>124. </html>
d. Validar el ingreso de una fecha1. <?2. $meses=array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","A
gosto","Septiembre","Octubre","Noviembre","Diciembre");3. //Capturar los valores4. $dia=$_REQUEST["cbodia"];5. $mes=$_REQUEST["cbomes"];6. $year=$_REQUEST["cboyear"];7. $benviar=$_REQUEST["btnenviar"];8. ?>9. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">10. <html xmlns="http://www.w3.org/1999/xhtml">11. <head>12. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-
1" />13. <title>Documento sin título</title><style type="text/css">14. <!--15. .Estilo1 {color: #0000FF}16. -->17. </style></head>18. <link rel="stylesheet" type="text/css" href="css/estilo.css">19. <body>20. <h1>Validar Fechas</h1>21. <form id="form1" name="form1" method="post" action="">22. <table width="200" border="1" align="center">23. <tr>24. <th scope="col">Dia</th>25. <th scope="col">Mes</th>26. <th scope="col">Año</th>27. </tr>28. <tr>29. <td><select name="cbodia" id="cbodia">30. <option>Dia</option>31. <? for($i=1;$i<32;$i++) { ?>32. <option value="<?=$i?>"><?=$i?></option>33. <? } ?>34. </select> </td>35. <td><select name="cbomes" id="cbomes">36. <option>Mes</option>37. <? for($i=0;$i<12;$i++) { ?>38. <option value="<?=$i?>"><?=$meses[$i]?></option>39. <? } ?>40. </select></td>41. <td><select name="cboyear" id="cboyear">
Asignatura: Laboratorio de Programación I
13
Universidad Privada Telesup
42. <option>Año</option>43. <? for($i=1980;$i<2001;$i++) { ?>44. <option value="<?=$i?>"><?=$i?></option>45. <? } ?>46. </select></td>47. </tr>48. <tr>49. <td colspan="3"><div align="center">50. <input name="btnenviar" type="submit" class="boton" id="btnenviar"
value="Enviar" />51. </div></td>52. </tr>53. </table>54. </form>55. <? if($benviar!="") {56. if(checkdate($mes+1,$dia,$year)) {57. $rpta="Fecha correcta...";58. }59. else {60. $rpta="Fecha incorrecta...";61. }62. ?>63. <div id="datos">64. <table width="200" border="1" align="center">65. <tr>66. <th scope="col">Respuesta de la validación </th>67. </tr>68. <tr>69. <td><div align="center"><strong><span
class="Estilo1"><?=$rpta?></span></strong></div></td>70. </tr>71. </table>72. </div>73. <? } ?>74. <p> </p>75. </body>76. </html>
Funciones de Cadena
1. INTRODUCCION Para realizar trabajos con cadenas de textos, PHP nos provee de un conjunto de funciones de cadena que realizan procesos específicos.
2. FUNCIONES DE CADENA
Función strtoupper: Devuelve el contenido de la cadena en Mayúsculas. Ejemplo:
$login=$_POST[“txtlogin”];if(strtoupper($login)){ echo “Usuario Admitido”);}
Asignatura: Laboratorio de Programación I
14
Universidad Privada Telesup
Explicación: Si el contenido de la variable login es igual a PEPE, saldrá un
mensaje con el contenido “Usuario Admitido”, no interesará si el usuario
haya ingresado el texto en minúscula o mayúscula porque la función
strtoupper siempre lo convertirá a mayúsculas.
Función strtolower: Devuelve el contenido de la cadena en Minúsculas. Ejemplo:
$login=$_POST[“txtlogin”];if(strtolower($login)){ echo “Usuario Admitido”);}
Función count(): Devuelve la longitud de la cadena.Ejemplo:
if (count($dni)!=8) { echo “ERROR: No es un número de DNI válido”;
}
Función strpos(): Devuelve la posición de la primera ocurrencia del carácter dado.Ejemplo 1:
$ape=”Torres Huamán”;$c=strpos($ape,” ”);echo “El espacio en blanco está situado en la posición ”.$c;
Función trim() : Elimina los espacios en blanco a la izquierda o derecha de la cadena.Ejemplo:$ape=$_POST[“txtape”];if(trim($ape)==””)
{ echo “El dato no puede ser vacío”; }
Función str_pad() :
string str_pad(string cadena_original, int longitud_relleno [, string cadena_relleno [, int
tipo_relleno]] )
Rellena una cadena con un carácter especificado. El tipo de relleno puede
ser: STR_PAD_LEFT para Rellenar a la izquierda, STR_PAD_RIGHT para
Rellenar a la derecha, STR_PAD_BOTH rellenar en la izquierda y la
derecha (dato centrado). Ejemplo:
Asignatura: Laboratorio de Programación I
15
Universidad Privada Telesup
$monto=234.23;
echo "S/.".str_pad($monto,12,"*",STR_PAD_LEFT);
Función str_repeat() : str_repeat($caracter,n)Repite una cadena o carácter, n veces
Función str_replace() : str_replace($dato)Reemplaza una subcadena por otra dentro de una cadena.
Ejemplo:$cadena="el alumno Ronald";echo str_replace("alumno","ingeniero",$cadena);
Función ucfirst() : ucfirst($cadena)Convierte el primer carácter a mayúscula.
Función ucwords() : ucwords($cadena)Convierte el primer carácter de cada palabra a mayúscula.
Función substr() : substr($cadena,inicio,longitud)Consigue una subcadena.
Función chr: Devuelve el código ASCII de un determinado carácter. Ejemplo:
$ape=”Casas”;for($i=0;$i<count($ape);$i++) //Recorremos los caracteres de la
cadena{ $car=substr($ape,$i,1); //Obtenemos un carácter de la cadena $x=chr($car); // Obtenemos el código ASCII del carácter capturado
if($x==97) //Se pregunta si el Codigo ASCII es igual a 97 (a minúscula)
{ $c++; } //Contamos la cantidad de veces en que aparece la letra a}echo “La vocal a se repite $c veces”; //Visualizamos la cantidad
Explicación: Se hace un recorrido por todos los caracteres de la cadena
usando la estructura for, empezando desde la primera posición (cero)
hasta la última posición 4, en cada vuelta se toma el carácter que
corresponde a la variable i y se convierte dicho carácter a su equivalente
Asignatura: Laboratorio de Programación I
16
Universidad Privada Telesup
ASCII, luego se pregunta si dicho carácter es igual al carácter a (Código
ASCII 97), si es así, se contabilizará la cantidad de veces en que aparece
dicho carácter
Función strrpos() : strrpos($cadena,$subcadena)
Retorna la posición de la subcadena dentro de la cadena. (Solo de la
última ocurrencia).
Ejemplo:$cadena="el alumno Ronald";echo strpos($cadena,"alumno");
Función strrev() : strrev($cadena)Devuelve la cadena invertida.
Función str_repeat() : str_repeat($caracter,n)Repite una cadena o carácter, n veces
Función str_replace() : str_replace($dato) Reemplaza una subcadena por otra dentro de una cadena.
Ejemplo:$cadena="el alumno Ronald";echo str_replace("alumno","ingeniero",$cadena);
Actividad Objetivo: Que el alumno cree aplicaciones basadas en la POO utilizando datos cronológicos.
Crear cada una de las siguientes aplicaciones con su respectiva clase.
1. Crear una aplicación que luego de ingresar la fecha de nacimiento de
una persona nos devuelva el nombre de la estación en la que nació.
2. Crear una aplicación que luego de ingresar la fecha de nacimiento nos
devuelva la edad de la persona expresada en: Años, meses, semanas,
días, horas, minutos y segundos.
Asignatura: Laboratorio de Programación I
17
Universidad Privada Telesup
3. Crear una aplicación que nos permita ingresar dos fechas (Fecha inicial
y fecha final). Determinar dentro de este rango de dos fechas ¿Cuantos
domingos existen?
4. Crear una aplicación que recepcione el monto de la deuda, la fecha del
último día de pago y la fecha de cancelación. Calcule la cantidad de días
de retraso en el pago y la mora correspondiente, si se sabe que por
cada día de retraso se aplica una interés moratorio del 1% sobre el
monto de la deuda. Considere que si la persona cancela antes de la
fecha del último día de pago la mora es 0.
5. Realizar una aplicación PHP que recepcione dos fechas y demuestre un listado de las fechas comprendidas en ese rango, mostrando los domingos de color ROJO.
Asignatura: Laboratorio de Programación I
18
Universidad Privada Telesup
DÉCIMA CUARTA SEMANA – Marco Teórico
LogroEl alumno manejará los arreglos a través de las funciones de PHP y asi mismo manejará las funciones de presentación de datos.ResumenLos arreglos son estructuras de datos estáticas que almacenan un conjunto de datos, existen arreglos escalares (índices numéricos) y arreglos asociativos (índices descriptivos). Adicionalmente las funciones de presentación de datos permiten mostrar los datos de manera personalizada.
Funciones de Arreglos y Funciones de Presentación de Datos
Manejo de Arreglos
Arreglo
Es una estructura de datos estática que almacena un conjunto de datos, cada
dato puede ser accedido por un índice.
Tipos de arreglos en PHP
a. Arreglo Escalar
Este arreglo tiene índices numéricos en serie secuencial.
Ejemplo: Arreglo Ventas de tipo Escalar
1000 2356 1598 2542 1982
0 1 2 3 4
b. Arreglo Asociativo
Este arreglo tiene índices descriptivos
Ejemplo: Arreglo Ventas de tipo Asociativo
1000 2356 1598 2542 1982
Lunes Martes Miercoles Jueves Viernes
Cargar un Arreglo Escalar
1ra. forma
$distritos=array(“Ate”,”Barranco”,”Breña”,”Carabayllo”,”Comas”);
2da. forma
$ciudades[]=”Lima”;
$ciudades[]=”Cajamarca”;
Asignatura: Laboratorio de Programación I
19
Universidad Privada Telesup
$ciudades[]=”Huaraz”;
$ciudades[]=”Tacna”;
3ra. forma
$asig[0]=”Matematica”;
$asig[1]=”Fisica”;
$asig[2]=”Quimica”;
$asig[3]=”Investigación Operativa”;
Recorrer los datos de un arreglo escalar
<?
for($i=0;$i<count($asig);$i++){
echo $asig[$i].”<br>”;
}
?>
Cargar un Arreglo Asociativo
<?$cuentas[“Enero”]=1233;$cuentas[“Febrero”]=1233;$cuentas[“Marzo”]=1233;$cuentas[“Abril”]=1233;?>
Recorrer los datos de un arreglo escalar
<?
foreach($cuentas as $pos=>$dato){
echo $pos.” : “.$dato.”<br>”;
}
?>
FUNCIONES PARA EL MANEJO DE ARREGLOS
pos($arreglo) Devuelve el dato que se encuentra en la posición actual
del puntero.
current($arreglo) Es idéntico al anterior
key($arreglo) Devuelve el número de la posición actual donde se
encuentra el puntero
reset($arreglo) Envía el puntero al principio del arreglo y devuelve el
dato de dicha posición
end($arreglo) Envía el puntero al final del arreglo y devuelve el dato
de dicha posición
Asignatura: Laboratorio de Programación I
20
Universidad Privada Telesup
next($arreglo) Envía el puntero al siguiente elemento y devuelve el
dato de dicha posición
prev($arreglo) Envía el puntero al siguiente elemento y devuelve el
dato de dicha posición
count($arreglo) Devuelve el número total de elemento del arreglo
sort($arreglo) Ordena ascendentemente el contenido de los datos del
arreglo
asort($arreglo) Ordena descendentemente el contenido de los datos
del arreglo
array_reverse($arreglo) Devuelve un arreglo con el contenido en orden inverso
array_count_values($arreglo) Devuelve un arreglo con la frecuencia con las cuales se
repiten los elementos en el arreglo
in_array($dato, $arreglo) Devuelve verdadero si el dato existe en el arreglo
shuffle($arreglo) Esparce fortuitamente los elementos de arreglo.
CASOS PRACTICOS
a. Cargar una lista desplegable con datos de un arreglo
1. <?2. $lista[0]="Pedro";3. $lista[1]="Liseth";4. $lista[2]="Juan";5. $lista[3]="Carla";6. $lista[4]="Victor";7. $lista[5]="Santiago";8. $lista[6]="Smith";9. $nuevalista=array_reverse($lista);
10. sort($nuevalista); //Ordenar el array
11. //Visualizar el array ?>12. <select name="cbolista">13. <option value="">Seleccionar Nombre</option>14. <? for($i=0;$i<count($nuevalista);$i++){?>15. <option
value="<?=$nuevalista[$i]?>"><?=$nuevalista[$i]?></option>16. <? }?>17. </select>
b. Demostrativo de cómo funcionan las funciones de arreglos
Arreglos.php<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Documento sin título</title></head>
Asignatura: Laboratorio de Programación I
21
Universidad Privada Telesup
<body bgcolor="beige"><h1>Arreglos</h1><hr /><?
//cargar los arreglos$amigos=array("Luis","Jorge","Victor","Carlos");$amigas=array("Marìa","Carmen","Sofia","Carla");$edades=array(19,18,18,17,20,18,18,18,20,21,20,21,18,19,20,19,15,19,20,20,19,16,20);
//Invertir el contenido del arreglo$arreglo1=array_reverse($amigos);$arreglo2=array_reverse($amigas);
//Conseguir el análisis de datos$analisis=array_count_values($edades);echo "Amigos: <br>";foreach($analisis as $x=>$dato){echo "$x : $dato"."<br>";}echo "<br><br>";
echo "Amigas: <br>";foreach($arreglo2 as $x=>$dato){echo "$x : $dato"."<br>";}
//Se encuentra un dato en el arreglo?if(in_array("Ana",$amigas)){ echo "Si se encuentra";}else{ echo "No se encuentra";}?></body></html>
c. Demostrativo de cómo funcionan las funciones de arreglos
Arreglos2.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Documento sin título</title><style type="text/css"><!--.Estilo1 {
font-family: Arial, Helvetica, sans-serif;font-weight: bold;
}--></style></head>
Asignatura: Laboratorio de Programación I
22
Universidad Privada Telesup
<body bgcolor="#BBDAFD"><span class="Estilo1">Arreglos</span><hr /><p> </p></body></html>
<?php//Cargar un arreglo$amigos[0]="Carlos";$amigos[1]="Rocio";$amigos[2]="Victor";
//Dimension Dinamica$ventas[0]=344;$ventas[1]=300;$ventas[3]=34;$ventas[]=1200;$ventas[]=1800;$ventas[]=200;$ventas[]=600;
foreach ($ventas as $clave=>$dato){echo "La posicion $clave tiene al dato $dato<br>";}echo "<p>";
//Cargar un arreglo en el momento de su declaracion$notas=array(15,9,10,12,8,7);$academico=array("Luna","LPOO",17.25);
foreach ($notas as $clave=>$dato){echo "La posicion $clave tiene al dato $dato<br>";}echo "<p>";
foreach ($academico as $clave=>$dato){echo "La posicion $clave tiene al dato $dato<br>";}
$alumnos=array(2=>"Baylon",0=>"Luna",3=>"Gonzales","Andrade","Mori");echo "<p>";foreach ($alumnos as $clave=>$dato){echo "La posicion $clave tiene al dato $dato<br>";}
//ARREGLOS ASOCIATIVOS
//Cargar el arreglo (1 Dimension)$telesup["Codigo"]="T007100404";$telesup["Apellido"]="Balbín";$telesup["Edad"]=17;$telesup["Sexo"]="M";
$telesup["Codigo"]="T007100395";$telesup["Apellido"]="Andrade";$telesup["Edad"]=15;$telesup["Sexo"]="M";
Asignatura: Laboratorio de Programación I
23
Universidad Privada Telesup
echo "<p>";foreach ($telesup as $clave=>$dato){echo "La posicion $clave tiene al dato $dato<br>";}
//Cargar el arreglo asociativo (2 Dimension)$aula["ALUMNO1"]["Codigo"]="T007100404";$aula["ALUMNO1"]["Apellido"]="Baylón";$aula["ALUMNO1"]["Edad"]=17;$aula["ALUMNO1"]["Sexo"]="M";
$aula["ALUMNO2"]["Codigo"]="T007100395";$aula["ALUMNO2"]["Apellido"]="Andrade";$aula["ALUMNO2"]["Edad"]=15;$aula["ALUMNO2"]["Sexo"]="M";
echo "<p>";for($i=1;$i<=2;$i++){echo $aula["ALUMNO$i"]["Codigo"]."<br>";echo $aula["ALUMNO$i"]["Apellido"]."<br>";echo $aula["ALUMNO$i"]["Edad"]."<br>";echo $aula["ALUMNO$i"]["Sexo"]."<br>";}
//FUNCIONES DE ARREGLOSecho "Cantidad de elementos del arreglo amigos : ". count($amigos)."<br>";echo "Avanza al siguiente elemento : ". next($amigos)."<br>";echo "Avanza al siguiente elemento : ". next($amigos)."<br>";echo "Retrocede un elemento : ". prev($amigos)."<br>";echo "Retrocede un elemento : ". prev($amigos)."<br>";echo "Muestra el último elemento : ". end($amigos)."<br>";echo "Avanza al siguiente elemento : ". next($amigos)."<br>";echo "Muestra el primer elemento : ". reset($amigos)."<br>";?>
d. Ejercicios con Shuffle (Distribuir los datos del array aleatoriamente)<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Documento sin título</title></head><?$amigas=array("Marìa","Carmen","Sofia","Carla");
echo "Antes del Shuffle<br>";
foreach($amigas as $x=>$dato){echo "$x : $dato"."<br>";}shuffle($amigas);echo "<br><br>";echo "La ganadora es: $amigas[0]";
$numeros=array(0,1,2,3,4,5,6,7,8,9);shuffle($numeros);
Asignatura: Laboratorio de Programación I
24
Universidad Privada Telesup
echo "El numero ganador es: ".$numeros[0].$numeros[1].$numeros[2];
$frutas1=array("fruta1.jpg","fruta2.jpg","fruta3.jpg","fruta4.jpg","fruta5.jpg");$frutas2=array("fruta1.jpg","fruta2.jpg","fruta3.jpg","fruta4.jpg","fruta5.jpg");$frutas3=array("fruta1.jpg","fruta2.jpg","fruta3.jpg","fruta4.jpg","fruta5.jpg");shuffle($frutas1);shuffle($frutas2);shuffle($frutas3);?><table border=0 align="center"><tr>
<td><img src=<? echo $frutas1[0] ?> width=100 height=100></td><td><img src=<? echo $frutas2[0] ?> width=100 height=100></td><td><img src=<? echo $frutas3[0] ?> width=100 height=100></td>
</tr></table><body></body></html>
FUNCIONES DE PRESENTACION DE DATOS
printf($cadena_con_patrones,dato1,dato2,dato3,…)
Visualiza la cadena formateada de acuerdo a los patrones especificados.
Patrones
Símbolo Significado
% Representa el símbolo del porcentaje
b El argumento se trata como nº entero y se representa en codificación
binaria.
c El argumento se trata como nº entero y se muestra el caracter cuyo
código ASCII se corresponde con el valor.
d El argumento se trata como nº entero y se representa en codificación
decimal sin parte fraccionaria
f El argumento se trata como un nº de tipo double y se representa
como un
decimal sin coma flotante
o El argumento se trata como un nº entero y se representa en
codificación
octal
s El argumento se trata y representa como una cadena de caracteres
Asignatura: Laboratorio de Programación I
25
Universidad Privada Telesup
x El argumento se considera un nº entero y se representa en
codificación
hexadecimal en minúsculas
X El argumento se considera un nº entero y se representa en
codificación
hexadecimal en mayúsculas
Ejemplo://Visualiza solo la parte entera$numero=2.895555;printf("El numero es : %d ",$numero);echo "<br>";
//Visualiza el numero con una aproximación 2 decimalesprintf("El numero es : %.2f ",$numero);echo "<br>";//Visualiza el numero como si fuera una cadena de textoprintf("El número es : %s ",$numero);echo "<br>";
//Visualiza el número en su equivalente ASCIIprintf("El número es : %c ",64);echo "<br>";
// Visualiza el número en su equivalente binarioprintf("El número es : %b ",$numero);echo "<br>";
// Visualiza el número en su equivalente Octalprintf("El número es : %o ",9);echo "<br>";
// Visualiza el número en su equivalente Hexadecimalprintf("El número es : %x ",18);echo "<br>";
sprintf($cadena_con_patrones,dato1,dato2,dato3,…)
Devuelve una cadena formateada de acuerdo a los patrones especificados. Su
uso es similar a printf.
Ejemplo:$resultado=sprintf("El numero es : %.2f ",$numero);echo "<br>";print($resultado);
number_format(dato_numerico,cant_decimales,"carac_decimal","sep_decim");
Asignatura: Laboratorio de Programación I
26
Universidad Privada Telesup
Formatea un dato numérico con una cierta cantidad de decimales, se especifica
el tipo de carácter decimal y separador de miles.
Ejemplo:echo number_format(123121312.956666,2,".",",");
Actividad
1. Crear un programa que solicite una cadena de texto y luego que la muestre de manera invertida.
2. Leer un carácter y deducir si está situado antes o después de la letra M en orden alfabético.
3. Solicitar un número telefónico fijo de la ciudad de Lima, luego verificar si dicho número es correcto o no.
4. Indique cuantos constantes, vocales y palabras existen dentro de una frase ingresada.
5. Ingresar el primer nombre y el primer apellido de una persona. Luego mostrar solo el primer apellido de manera separada
Asignatura: Laboratorio de Programación I
27
Universidad Privada Telesup
DECIMA QUINTA SEMANA – Marco Teórico
LogroEl alumno aprende a validar utilizando código cliente y código de servidor
ResumenLa validación cliente consiste en validar los datos ingresados en un formulario antes de ser enviados al servidor web, se utiliza código JavaScript.La validación en servidor web consiste en validar los datos enviados al servidor por un formulario HTML utilizando código dinámico de PHP
VALIDACION DE ENTRADA DE DATOS
Consiste en evaluar si los datos ingresados son correctos o consistentes.
Tipos de Validación
1. Validación de Cliente: Cuando la validación se realiza en la máquina
del cliente o usuario, se usa código JavaScript.
Esta validación se lleva a cabo hasta de que ocurra el submit en el
formulario de datos, si el proceso de validación es true, los datos son
enviados, en caso contrario, se notifica del error.
2. Validación de Servidor: Este tipo de validación se realiza en el servidor
Apache, luego que los datos fueron enviados, para este tipo de
validación se utilizan funciones de validación. El proceso de validación
ocurre en el servidor.
La ventaja de utilizar este tipo de validación es la de poder utilizar
recursos del lenguaje PHP para consistenciar los datos.
Validación usando código de ClientePara este tipo de validación usaremos Expresiones Regulares.
Expresiones RegularesEs una plantilla de caracteres que restringen el ingreso de datos en una caja de texto. En este tipo de validación utilizaremos las expresiones regulares en Java Script.
Plantilla Descripción
Asignatura: Laboratorio de Programación I
28
Universidad Privada Telesup
$ Empieza con ^ Termina con [A-Z] Se espera un carácter alfabético mayúscula [a-z] Se espera un carácter alfabético minúscula [0-9] Se espera un carácter numérico dentro del rango de 0 a 9 [2-7] Se espera un carácter numérico dentro del
rango de 2 a 7 [A-Z0-9] Se espera un carácter alfabético o
numérico [A-Za-z] Se espera un carácter alfabético mayúscula
o minúscula [0-9]{3} Se espera 3 caracteres numéricos [0-9]{3,5} Se espera de 3 a 5 caracteres numéricos [A-Z]{2,5} Se espera de 2 a 5 caracteres alfabéticos [A-ZÑñÜü] Se espera un carácter alfabético o Ñ o ñ o Ü o ü [A-Z]+ Se espera un o varios caracteres alfabéticos0* Se espera ninguno o varios caracteres 0 ([A-Z]) | ([a-z]) Se espera un carácter alfabético mayúscula o minúscula
CASO PRÁCTICOValidar usando expresiones regulares a un formulario de entrada de datos, cuando el dato ingresado sea incorrecto debe alertarse del error y enviar al cursor a dicha caja, para la rectificación del error.
Datos.php1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2. <html xmlns="http://www.w3.org/1999/xhtml">3. <head>4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-
1" />5. <title>Documento sin título</title>6. </head>7. <script>
Asignatura: Laboratorio de Programación I
29
Universidad Privada Telesup
8. patron=new Object();9. patron.ape=/^([A-Za-z ÑñáéíóúÜü]){2,50}$/;10. patron.ruc=/^((10)|(20))[0-9]{9}$/;11. patron.tel=/^[2-7][0-9]{6}$/;12. patron.edad=/^(1[8-9])|([2-5][0-9])|(6[0-5])$/;13. patron.ec=/^[CSVDcsvd]$/;14. function validar(){15. elementos=datos.elements;16. for(i=0;i<elementos.length;i++){17. v=elementos[i].validador;18. if(!v) continue;19. r=patron[v];20. e=r.exec(elementos[i].value);21. if(!e){22. alert("Error en: " +v+ " con el valor: "+elementos[i].value);23. elementos[i].focus();24. return false;25. }26. }27. return true;28. }29. </script>30. <body bgcolor=beige>31. <form id="form1" name="datos" method="post" action="" onsubmit="return
validar();">32. <table width="200" border="1">33. <tr>34. <td>Apellido</td>35. <td><input name="txtape" type="text" id="txtape" validador="ape"/></td>36. </tr>37. <tr>38. <td>Numero de RUC </td>39. <td><input name="txtruc" type="text" id="txtruc" validador="ruc"
value=""/></td>40. </tr>41. <tr>42. <td>Telefono</td>43. <td><input name="txttel" type="text" id="txttel" validador="tel"
value=""/></td>44. </tr>45. <tr>46. <td>Edad</td>47. <td><input name="txtedad" type="text" id="txtedad" validador="edad"
value=""/></td>48. </tr>49. <tr>50. <td>Estado Civil </td>51. <td><input name="txtec" type="text" id="txtec" validador="ec"/></td>52. </tr>53. <tr>54. <td colspan="2"><input type="submit" name="Submit" value="Enviar" />55. <input type="reset" value="Limpiar" /></td>56. </tr>57. </table>58. </form>59. <? 60. $ape=$_REQUEST["txtape"];
Asignatura: Laboratorio de Programación I
30
Universidad Privada Telesup
61. echo $ape."<br>";62. $ruc=$_REQUEST["txtruc"]; 63. echo $ruc."<br>";64. $tel=$_REQUEST["txttel"];65. echo $tel."<br>";66. $edad=$_REQUEST["txtedad"];67. echo $edad."<br>";68. $ec=$_REQUEST["txtec"];69. echo $ec."<br>";70. ?>71. </body>72. </html>
Validación con Código de ServidorEste tipo de validación ocurre en el servidor Apache PHP luego que los datos
son enviados por el formulario del cliente hacia el servidor, este tipo de
validación usa las funciones de validación en PHP para verificar la
consistencia de datos.
FUNCIONES DE VALIDACIÓN DE DATOS
ctype_alpha($dato)
Devuelve true, si el carácter o los caracteres evaluados son caracteres
alfabéticos. (Incluye las vocales acentuadas, u con diéresis y la letra ñ)
ctype_alnum($dato)
Devuelve true, si el carácter o los caracteres evaluados son caracteres
alfanuméricos.
ctype_cntrl($dato)
Devuelve true, si el carácter o los caracteres evaluados son caracteres de
control.
ctype_digit($dato)
Devuelve true, si el carácter o los caracteres evaluados son caracteres
numéricos.
ctype_graph($dato)
Devuelve true, si el carácter o los caracteres evaluados son caracteres
gráficos.
ctype_lower($dato)
Devuelve true, si el carácter o los caracteres evaluados son caracteres
alfabéticos minúsculas.
ctype_print($dato)
Devuelve true, si el carácter es imprimible.
Asignatura: Laboratorio de Programación I
31
Universidad Privada Telesup
ctype_punct($dato)
Devuelve true, si el carácter o los caracteres evaluados son caracteres de
puntuación.
ctype_space($dato)
Devuelve true, si el carácter o los caracteres evaluados es un espacio en
blanco.
ctype_upper($dato)
Devuelve true, si el carácter o los caracteres evaluados son caracteres
mayúsculas.
ctype_xdigit($dato)
Devuelve true, si el carácter o los caracteres evaluados son caracteres
hexadecimales.
is_bool($dato)
Devuelve true, si el dato evaluado es booleano.
is_float($dato)
Devuelve true, si el dato evaluado es decimal (float).
is_long($dato)
Devuelve true, si el dato evaluado es numérico largo.
is_null($dato)
Devuelve true, si el dato evaluado es null.
is_numeric($dato)
Devuelve true, si el dato evaluado es numérico.
is_object($dato)
Devuelve true, si el dato evaluado es un objeto.
is_string($dato)
Devuelve true, si el dato evaluado es cadena de texto.
strval($dato)
Convierte un dato a String.
gettype($dato)
Devuelve el tipo de dato
CASO PRÁCTICOValidar usando código PHP, la entrada de datos para Apellidos y Edad.
Asignatura: Laboratorio de Programación I
32
Universidad Privada Telesup
Validacion.php1. <?2. //Atrapar los datos3. $btnenviar=$_REQUEST["btnenviar"];4. $ape=$_REQUEST["txtape"];5. $edad=$_REQUEST["txteda"];6. $error="";
7. //Preguntar si se envió los datos (Si se presionó el boton enviar)8. if($btnenviar!=""){9. //Validar10. if(!ctype_alpha($ape)){11. $error.="Lo sentimos, el apellido solo debe contener caracteres
alfabéticos<p>";12. }13. if(!is_numeric($edad)){14. $error.="Lo sentimos, la edad solo debe contener caracteres
numéricos<p>";15. }16. if(!($edad>=18 and $edad<=65)){17. $error.=" La edad ingresada no esta dentro del rango permitido<p>";18. }19. }20. ?>21. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">22. <html xmlns="http://www.w3.org/1999/xhtml">23. <head>24. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-
1" />25. <title>Documento sin título</title>
Asignatura: Laboratorio de Programación I
33
Universidad Privada Telesup
26. <style type="text/css">27. <!--28. .Estilo1 {29. color: #FF0000;30. font-weight: bold;31. font-size: medium;32. }33. -->34. </style>35. </head>36. <link rel="stylesheet" type="text/css" href="css/estilo.css">37. <body>38. <h1>Ingreso de Datos</h1>39. <form id="form1" name="form1" method="post" action="">40. <table width="302" border="1">41. <tr>42. <td width="101">Apellido Paterno </td>43. <td width="166"><input name="txtape" type="text" id="txtape" /></td>44. <td width="13"> </td>45. </tr>46. <tr>47. <td>Edad</td>48. <td><input name="txteda" type="text" id="txteda" size="2"
maxlength="2" /></td>49. <td> </td>50. </tr>51. <tr>52. <td colspan="3"><div align="center">53. <input name="btnenviar" type="submit" class="boton" id="btnenviar"
value="Enviar" />54. </div></td>55. </tr>56. <tr>57. <td colspan="3"><div align="center"
class="Estilo1"><?=$error?></div></td>58. </tr>59. </table>60. </form>61. <? if($error=="" and $btnenviar!="") { //No hubo error y si se presiono
el boton enviar ?>62. <div id="datos">63. <table width="200" border="1">64. <tr>65. <td width="99">Apellido Paterno </td>66. <td width="85"><?=$ape?></td>67. </tr>68. <tr>69. <td>Edad</td>70. <td><?=$edad?></td>71. </tr>72. <tr>73. <td> </td>74. <td> </td>75. </tr>76. </table>77. </div>78. <? } ?>
Asignatura: Laboratorio de Programación I
34
Universidad Privada Telesup
79. <p> </p>80. <p> </p>81. </body>
82. </html>
Actividad
Realizar una aplicación PHP que valide a nivel cliente y servidor la entrada de datos para: Apellidos, DNI, SEXO, Sueldo (No menor al sueldo mínimo vital), cantidad de hijos (de 0 a 15).
Asignatura: Laboratorio de Programación I
35
Universidad Privada Telesup
DECIMA SEXTA SEMANA – Marco Teórico
LogroQue el participante aprenda a realizar una aplicación web basada en PHP con conexión a una base de datos de MySQL.
ResumenPara realizar la conexión con una base de datos desde una aplicación web PHP, se utilizan diversas funciones de base de datos las cuales son explicadas durante esta semana.
Funciones de Base de Datos - MySQL
FUNCIONES DE BASE DE DATOS DE MYSQL EN PHP
PHP en la versión 5, nos ofrece una serie de funciones incorporados en
lenguaje, estas funciones son:
mysql_affected_rows();
int mysql_affected_rows(int [link_identifier] );
Devuelve el número de filas afectado en el último INSERT, UPDATE o DELETE
pregunta en el servidor asociado con el identificador de conexión especificado.
Si no se e especifica un identificador de conexión, se asume le de la última
conexión abierta.
Este orden no es eficaz para las instrucciones SELECT, sólo en instrucciones
que modifican archivos. Para recuperar el número de filas de un SELECT, usar
mysql_num_rows.
mysql_close();
int mysql_close(int [link_identifier] );
Devuelve: TRUE si se ha cerrado la conexión exitosamente, FALSE en caso de
error.
Cierra la conexión a la base de datos MySQL asociada al identificador de
conexión especificado. Si no se e especifica un identificador de conexión, se
asume le de la última conexión abierta.
Note que esta función no es normalmente necesaria en conexiones no-
persistentes (abiertas con mysl_connect) ya que ésta se cerrará
automáticamente al final de la ejecución del script o página. La función
mysql_close no cierra una conexión persistente (abierta con mysql_pconnect()).
Asignatura: Laboratorio de Programación I
36
Universidad Privada Telesup
mysql_connect() int mysql_connect(string [hostname], string [username], string [password] );
Devuelve un identificador de conexión, o FALSE en caso de error.
sql_connect() establece una conexión a un servidor de MySQL. Todos los
argumentos son optativos, y si no se especifican, los valores por defecto son
('localhost', nombre del usuario del usuario que posee el proceso del servidor,
la contraseña vacía). La cadena hostname también puede incluir un número del
puerto, "hostname:port".
En caso de realizar una segunda llamada a mysql_connect con los mismos
argumentos, no se establecerá ninguna nueva conexión, sino se devolverá el
identificador de conexión de la ya existente.
La conexión al servidor se cerrará en cuanto la ejecución del script acabe, a
menos que la cerremos antes con la función mysql_close.
mysql_create_db()
int mysql_create_db(string database name, int [link_identifier] );
La función mysql_create_db intenta crear una nueva base de datos en el
servidor asociado con el identificado de conexión especificado.
mysql_data_seek()
int mysql_data_seek(int result_identifier, int row_number);
Devuelve: TRUE si toda ha ido bien, y FALSE en caso de error.
La función mysql_data_seek mueve el puntero que indica la fila actual al
número de fila de la consulta que indica el identificador. La próxima llamada al
mysql_fetch_row o mysql_fetch_array devolvería esa fila.
mysql_dbname()
string mysql_dbname(string result, int i);
mysql_dbname devuelve el nombre de la base de datos guardado en posición i
de los resultados del indicador de consulta devuelto por la función del
Asignatura: Laboratorio de Programación I
37
Universidad Privada Telesup
mysql_list_dbs. La función del mysql_num_rows puede usarse para determinar
cuántos nombres de bases de datos están disponibles.
mysql_db_query()int mysql_db_query(string database, string query, int link_identifier);
Devuelve: un identificador de conexión, o FALSE en caso de error.
Ejecuta una consulta en una base de datos. Si el identificador no se especifica,
la función intenta encontrar una conexión abierta con el servidor. Si no
encuentra una conexión, intentará crear una (similar a mysql_connect( ) sin
argumentos).
mysql_drop_db()
int mysql_drop_db(string database_name, int [link_identifier] );
Devuelve: TRUE si toda ha ido bien, y FALSE en caso de error.
Elimina una base de datos del servidor asociado al identificador de conexión.
mysql_errno()
int mysql_errno();
Devuelve el número de error asociado a la última operación realizada.
mysql_error()
string mysql_error();
Devuelve el texto asociado al error producido en la última operación realizada
por la base de datos.
mysql_fetch_array()
array mysql_fetch_array(int result);
Devuelve un array con la información correspondiente al resultado de una
consulta especificado por su identificador o 'false' si ya no hay más filas.
Es una versión extendida de mysql_fetch_row( ). Además de almacenar los
datos a través de índices numéricos del array, también lo hace a través de
índices asociativos, utilizando los nombres de los campos como claves. Si dos
o más columnas del resultado tienen el mismo nombre de campo, la última es
la que tiene preferencia. Para acceder a las demás es necesario utilizar el
índice numérico o construir un alias para la columna:
<?php
Asignatura: Laboratorio de Programación I
38
Universidad Privada Telesup
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_array($result)) {
echo $row["user_id"]; echo $row["fullname"];
}
mysql_free_result($result); ?>
mysql_fetch_field()
object mysql_fetch_field(int result, int [field_offset] );
Devuelve un objeto que contiene la información de los campos que componen
un resultado de una consulta. Si no se especifica 'offset', devuelve información
sobre el siguiente campo que todavía no ha sido devuelto.
Propiedades del objeto devuelto:
• name - nombre del campo
• table - nombre de la tabla a la que pertenece el campo
• max_length - longitud máxima que puede tomar el campo
• not_null - 1 si el campo no puede tomar valores nulos
• primary_key - 1 si el campo es una clave principal (primary key)
• unique_key - 1 si el campo tiene restricción de unicidad
• multiple_key - 1 si el campo no tiene rest
• multiple_key - 1 si el campo no tiene restricción de unicidad
• numeric - 1 si el campo es numérico
• blob - 1 si el campo es BLOB
• type - tipo de dato (del campo)
• unsigned - 1 si el campo es 'unsigned'
• zerofill - 1 si el campo es rellenado con ceros
mysql_fetch_lengths()
int mysql_fetch_lengths(int result);
Devuelve: una tabla o FALSE si hay error.
Asignatura: Laboratorio de Programación I
39
Universidad Privada Telesup
mysql_fetch_lengths almacena en una tabla la longitud de cada campo de una
consulta realizada con mysql_fetch_row o mysql_fetch_array. El índice de la
tabla comienza en 0.
mysql_fetch_object()
int mysql_fetch_object(int result);
Devuelve: un objeto o FALSE en caso de error.
Esta función es similar a mysql_fetch_array, solo que los resultados de una
consulta, en lugar de una tabla, los devuelve como un objeto. En este caso,
sólo se puede acceder a los datos a través de los nombres de sus campos. La
velocidad de ejecución es idéntica a la de 'mysql_fetch_array. Para referenciar
el valor de un campo debemos utilizar el operador típicos de los objetos (->).<
objetos típicos>
mysql_fetch_row()
array mysql_fetch_row(int result);
Devuelve: una tabla o FALSE si hay error.
Devuelve un tabla con los valores de los campos de la fila actual de la consulta,
la que especificar el indicador (result) , y mueve el puntero interno que marca la
fila actual a la siguiente fila, si no hay mas filas devuelve FALSE. El índice de la
tabla comienza en 0.
mysql_field_name()
string mysql_field_name(string result, int i);
Devuelve el nombre del campo especificado por el índice.
mysql_field_seek()
int mysql_field_seek(int result, int field_offset);
Mueve el puntero del campo actual hacia adelante las posiciones actual hacia
adelante las posiciones indicadas por 'offset'.
mysql_field_table()
string mysql_field_table(int result, int field_offset);
Devuelve el nombre de la tabla que almacena el campo especificado por el
índice ( 'field_offset' ).
Asignatura: Laboratorio de Programación I
40
Universidad Privada Telesup
mysql_field_type()
string mysql_field_type(string result, int field_offset);
Devuelve el tipo del campo del indice especificado.
mysql_field_flags()
string mysql_field_flags(string result, int field_offset);
Devuelve los especificadores (flags) del campo especificado como una cadena
de texto en la que cada especificador se corresponde con una palabra, y éstas
van separadas mediante un espacio simple. Se puede analizar la cadena
utilizando explode( )
Los especificadores son:
"not_null", "primary_key", "unique_key", "multiple_key", "blob", "unsigned",
"zerofill", "binary", "enum", "auto_increment", "timestamp".
mysql_field_len()
int mysql_field_len(string result, int field_offset);
Devuelve la longitud del campo especificado
mysql_free_result()
int mysql_free_result(int result);
Sólo debería ser utilizada si la cantidad de memoria utilizada para almacenar el
resultado de una consulta es muy grande. Cuando se ejecuta esta función, toda
la memoria asociada al resultado se libera.
mysql_insert_id()
int mysql_insert_id(void);
Esta función devuelve el ID (identificador) generado para los campos
autonuméricos (AUTO_INCREMENTED). El ID devuelto es el correspondiente
al de la última operación INSERT.
mysql_list_fields()
int mysql_list_fields(string database, string tablename);
Asignatura: Laboratorio de Programación I
41
Universidad Privada Telesup
Devuelve información sobre la tabla. El valor resultante puede ser utilizado con
mysql_field_flags(), mysql_field_len(), mysql_field_name(), and
mysql_field_type().
El identificador que devuelve es un entero positivo o '-1' en caso de error. El
texto que describe el error se encuentra en $phperrmsg.
mysql_list_dbs()
int mysql_listdbs(void);
Devuelve un puntero que contiene las bases de datos disponibles para el
servidor actual (msql daemon). Este valor se utiliza con la función
mysql_dbname( ).
mysql_list_tables()int mysql_list_tables(string database, , int [link_identifier]);
Devuelve un identificar, el cual pasaremos a la función mysql_tablename para
extraer el nombre de las tablas de la base de datos especificada.
mysql_num_fields()
int mysql_num_fields(int result);
mysql_num_fields devuelve en número de campos de una consulta.
mysql_num_rows()
int mysql_num_rows(string result);
Devuelve el número de filas del resultado de una consulta.
mysql_pconnect() int mysql_pconnect(string [hostname] , string [username] , string [password] );
Devuelve: A positive MySQL persistent link identifier on success, or false on
error
Devuelve un identificador de conexión persistente o 'false' en caso de error. Las
diferencias con respecto a mysql_connect( ) son:
• Primero, la función intenta encontrar una conexión persistente que ya esté
abierta con la misma máquina, usuario y password. Si es encontrada,
devuelve el identificador de la misma, en lugar de crear una nueva
conexión.
Asignatura: Laboratorio de Programación I
42
Universidad Privada Telesup
• Segundo, la conexión al servidor SQL no será cerrada cuando finalice la
ejecución del script, sino que permanece abierta para un uso posterior.
La función mysql_close no cierra una conexión abierta con mysql_pconnect.
Las conexiones abierta con esta función se llaman "persistentes".
mysql_query()
int mysql_query(string query, int [link_identifier] );
Ejecuta una consulta a la base de datos activa en el servidor asociado al
identificador de conexión. Si no se especifica, se utiliza la última conexión
abierta, se utiliza la última conexión abierta. Si no hay conexiones abiertas la
función intenta establecer una.
Esta función devuelve TRUE o FALSE para indicar si las operaciones
UPDATE, INSERT o DELETE han tenido éxito. Para la operación SELECT
devuelve un nuevo identificador de resultado.
mysql_result()
int mysql_result(int result, int row, mixed field);
Devuelve el contenido de la celda de un resultado. El argumento 'field' puede
ser un índice o el nombre del campo correspondiente o el nombre del campo
de la forma: tabla.campo. Si la columna tiene un alias ('select foo as bar
from...') se utiliza el alias en lugar del nombre de la columna.
En lugar de esta función es preferible usar mysql_fetch_row(),
mysql_fetch_array(), and mysql_fetch_object(), con la que obtendremos mejor
rendimiento.
Asignatura: Laboratorio de Programación I
43
Universidad Privada Telesup
mysql_select_db()int mysql_select_db(string database_name, int [link_identifier] );
Devuelve: true on success, false on error
Establece la base de datos activa en el servidor. Si no se especifica identificador
de conexión se utiliza la última conexión abierta. Si no hay conexiones anexión
abierta. Si no hay conexiones activas, la función intenta establecer una. A partir
de la llamada a mysql_select_db las llamadas a mysql_query( ) actúan sobre la
nueva base de datos activa.
mysql_tablename()
string mysql_tablename(int result, int i);
Toma como argumento un puntero devuelto por la función mysql_list_tables( ) y
devuelve el nombre de la tabla asociada al índice i. La función mysql_num_rows()
puede ser utilizada para determinar el número de tablas.
<?php mysql_connect ("localhost:3306"); $result = mysql_listtables ("basededatos"); $i = 0; while ($i < mysql_num_rows ($result)) { $tb_names[$i] = mysql_tablename ($result, $i); echo $tb_names[$i] . "<BR>"; $i++; } ?>
CASO PRACTICO
Crear una aplicación web que muestre el listado de la tabla alumnos de la base de datos Telesup, utilice POO
Crearemos la siguiente distribución de Carpetas:
View : Lógica de Presentación Logic : Lógica de Negocios Ds : Lógica de Datos
Carpeta View
Alumnos.php1. <?2. require_once("../ds/GestionBD.php");3. $gbd=new GestionBD();// creando a una instancia4.
Asignatura: Laboratorio de Programación I
44
Universidad Privada Telesup
5. try{ //Zona de Monitoreo de errores de ejecución6.7. $gbd->conectar(); //realizamos la conexión8. //Establecemos la sentencia para el esquema de datos9. $cad="select a.codalu,a.apealu,a.nomalu,a.diralu,d.nomdis from alumnos a,
distritos d where a.coddis=d.coddis";10. $lista=$gbd->ejecutarconsulta($cad);11. $gbd->desconectar();12. } 13. catch(Exception $ex) { //recive el erro14. $error=$ex->getMessage();15. }16. ?>
17. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
18. <html xmlns="http://www.w3.org/1999/xhtml">19. <head>20. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-
1" />21. <title>Documento sin título</title>22. </head>23. <link rel="stylesheet" type="text/css" href="../css/estilo.css">24. <body>25. <h1>Listado de Alumnos</h1>26. <center>27. <table width="747" border="1">28. <tr>29. <th width="75" scope="col">Codigo</th>30. <th width="201" scope="col">Apellidos</th>31. <th width="172" scope="col">Nombres</th>32. <th width="157" scope="col">Direccion</th>33. <th width="108" scope="col">Distrito</th>34. </tr>35. <?36. for($i>0;$i<count($lista);$i++){37. ?>38. <tr>39. <td><?=$lista[$i]["codalu"]?></td>40. <td><?=$lista[$i]["apealu"]?></td>41. <td><?=$lista[$i]["nomalu"]?></td>42. <td><?=$lista[$i]["diralu"]?></td>43. <td><?=$lista[$i]["nomdis"]?></td>44. </tr>45. <?46. }47. ?>48. </table>
49. <?50. if($error!=""){ //si hubo error?51. ?>52. <div id="error">53. <font color="#FF0000">54. <p><?=$error?></p>55. </font>56. </div>57. <?58. }59. ?>60. </center>
61. </body>62. </html>
Asignatura: Laboratorio de Programación I
45
Universidad Privada Telesup Pág. 46
Carpeta Ds1. <?2. class GestionBD{ //clase es una pantilla contiene metodos y
propiedades3. public $cn=null;//creando propiedad (representa a la conexion)4.5. //creando metodos6. public function conectar(){7. $this->cn=&mysql_connect("localhost","root","telesup"); 8. if(!$this->cn){ //si no se dio la conexión9. //genero un error (dispara el error hacia la capa que la invocó)10. throw new Exception("Error de conexión"); 11. }12. $db=&mysql_select_db("telesup",$this->cn);13. if(!$db){ //si no se pudo seleccionar la bd14. throw new Exception("No se pudo abrir la base de datos"); 15. }16. }//fin del metodo conectar
17. public function desconectar(){18. mysql_close($this->cn);19. }//fin desconectar
20. //este método solo sirva para ejecutar a un comando select21. public function ejecutarconsulta($sql) {22. $rs=&mysql_query($sql,$this->cn); //ejecuta la consulta23. if(mysql_errno($this->cn)!=0){ // Si hubo error?24. throw new Exception("Error de en la ejecución de la consulta
$sql"); //devuelve error25. }26. $lista=array(); //crea un array vacio 27. while($fila=mysql_fetch_assoc($rs)){//que cada fila vomo a estar
enciando asia un array asociativo28. $lista[]=$fila;//29. }30. return $lista;31. }//fin de ejecutar consulta32.33. public function ejecutaractualizacion($sql){34. //ejecuta los comandos Update, Insert, Delete35. mysql_query($sql,$this->cn);36. if(mysql_errno($this->cn)!=0){//el numero de error no es cero37. throw new Exception("Error en la ejecucion de la actualizacion
$sql"); //devuelve error38. }39. }//fin de Ejecutar Actualizacion40. } //fin dela clase41. ?>
Asignatura: Laboratorio de Programación I
Universidad Privada Telesup Pág. 47
III. BIBLIOGRAFIA
Autor Titulo Edición AñoGUTIERREZ RODRIGUEZ, Abraham.
PHP 5 a través de ejemplosEditorial Alfa Omega & Rama
2008
CORONEL, Gustavo
PHP Profesional.Editorial Macro, 2011
2011
Asignatura: Laboratorio de Programación I
Top Related