58
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

Separata LP1 Unidad 4

Embed Size (px)

Citation preview

Page 1: Separata LP1 Unidad 4

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

Page 2: Separata LP1 Unidad 4
Page 3: Separata LP1 Unidad 4

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

Page 4: Separata LP1 Unidad 4
Page 5: Separata LP1 Unidad 4

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

Page 6: Separata LP1 Unidad 4

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

Page 7: Separata LP1 Unidad 4

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

Page 8: Separata LP1 Unidad 4

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&iacute;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

Page 9: Separata LP1 Unidad 4

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&iacute;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&ntilde;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

Page 10: Separata LP1 Unidad 4

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&ntilde;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>&nbsp;</td>

88. </tr>

89. <tr>

90. <td>Cantidad de Tiempo </td>

91. <td><input name="txtcant" type="text" id="txtcant" /></td>

92. <td>&nbsp;</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

Page 11: Separata LP1 Unidad 4

Universidad Privada Telesup

106. <p>&nbsp;</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&iacute;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&ntilde;o</th>48. </tr>

Asignatura: Laboratorio de Programación I

11

Page 12: Separata LP1 Unidad 4

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&ntilde;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&ntilde;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

Page 13: Separata LP1 Unidad 4

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>&nbsp;</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&iacute;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&ntilde;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

Page 14: Separata LP1 Unidad 4

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&oacute;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>&nbsp;</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

Page 15: Separata LP1 Unidad 4

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

Page 16: Separata LP1 Unidad 4

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

Page 17: Separata LP1 Unidad 4

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

Page 18: Separata LP1 Unidad 4

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

Page 19: Separata LP1 Unidad 4

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

Page 20: Separata LP1 Unidad 4

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

Page 21: Separata LP1 Unidad 4

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&iacute;tulo</title></head>

Asignatura: Laboratorio de Programación I

21

Page 22: Separata LP1 Unidad 4

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&iacute;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

Page 23: Separata LP1 Unidad 4

Universidad Privada Telesup

<body bgcolor="#BBDAFD"><span class="Estilo1">Arreglos</span><hr /><p>&nbsp;</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

Page 24: Separata LP1 Unidad 4

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&iacute;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

Page 25: Separata LP1 Unidad 4

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

Page 26: Separata LP1 Unidad 4

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

Page 27: Separata LP1 Unidad 4

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

Page 28: Separata LP1 Unidad 4

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

Page 29: Separata LP1 Unidad 4

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&iacute;tulo</title>6. </head>7. <script>

Asignatura: Laboratorio de Programación I

29

Page 30: Separata LP1 Unidad 4

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

Page 31: Separata LP1 Unidad 4

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

Page 32: Separata LP1 Unidad 4

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

Page 33: Separata LP1 Unidad 4

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&iacute;tulo</title>

Asignatura: Laboratorio de Programación I

33

Page 34: Separata LP1 Unidad 4

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">&nbsp;</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>&nbsp;</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>&nbsp;</td>74. <td>&nbsp;</td>75. </tr>76. </table>77. </div>78. <? } ?>

Asignatura: Laboratorio de Programación I

34

Page 35: Separata LP1 Unidad 4

Universidad Privada Telesup

79. <p>&nbsp;</p>80. <p>&nbsp;</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

Page 36: Separata LP1 Unidad 4

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

Page 37: Separata LP1 Unidad 4

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

Page 38: Separata LP1 Unidad 4

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

Page 39: Separata LP1 Unidad 4

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

Page 40: Separata LP1 Unidad 4

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

Page 41: Separata LP1 Unidad 4

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

Page 42: Separata LP1 Unidad 4

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

Page 43: Separata LP1 Unidad 4

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

Page 44: Separata LP1 Unidad 4

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

Page 45: Separata LP1 Unidad 4

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&iacute;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

Page 46: Separata LP1 Unidad 4

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

Page 47: Separata LP1 Unidad 4

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