[ + ] Manual de PHP... Todo lo que Nececitas para aprenderlo

Iniciado por alexander1712, Octubre 26, 2012, 04:16:56 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Validación de una fecha ingresada por teclado (checkdate)

Si disponemos en forma separada del día, mes y año hay, una función que nos indica si se trata de una fecha válida:

boolean checkdate ( mes, dia, año)

Retorna verdadero si la fecha es válida, falso en caso contrario.
Implementemos un formulario que nos solicite el ingreso de una fecha:

Código: php
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php" method="post">
Ingrese una fecha (dd/mm/aaaa):
<input type="text" name="dia" size="2">
<input type="text" name="mes" size="2">
<input type="text" name="anio" size="4">
<br>
<input type="submit" value="validar">
</form>
</body>
</html>



Y la página que procesa la fecha ingresada es:
Código: php

<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
if (checkdate($_REQUEST['mes'],$_REQUEST['dia'],$_REQUEST['anio']))
  echo "La fecha ingresada es correcta";
else
  echo "La fecha no es válida";
?>
</body>
</html>


En este programa llamamos a la función checkdate pasando los tres parámetros requeridos en el orden: mes, día y año.
Podemos validar previamente si se han cargado valores numéricos en cada control "text", esto llamando a la función is_numeric(variable). Retorna true si la variable almacena un número, falso en caso contrario.
El programa modificado quedará entonces:
Código: php

<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
if (is_numeric($_REQUEST['dia']) &&
    is_numeric($_REQUEST['mes']) &&
    is_numeric($_REQUEST['anio']))
{
  if (checkdate($_REQUEST['mes'],$_REQUEST['dia'],$_REQUEST['anio']))
    echo "La fecha ingresada es correcta";
  else
    echo "La fecha no es válida";
}
else
  echo "La fecha no es válida";
?>
</body>
</html>

Carga de una fecha en una tabla de MySQL

La tabla alumnos tiene un campo que no habíamos nombrado llamado "fechanac" que es de tipo "date", es decir que permite almacenar una fecha. "fechanac" almacenará la fecha de nacimiento del alumno.
Veremos cual es la estructura que debemos darle a la fecha para que el MySql la tome como válida.
Haremos el alta de la tabla alumnos que habíamos visto anteriormente añadiéndole la carga de la fecha de nacimiento.
El primer formulario, prácticamente ya visto, es:

Código: php
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php" method="post">
Ingrese nombre:
<input type="text" name="nombre"><br>
Ingrese mail:
<input type="text" name="mail"><br>
Ingrese la fecha de nacimiento (dd/mm/aaaa):
<input type="text" name="dia" size="2">
<input type="text" name="mes" size="2">
<input type="text" name="anio" size="4">
<br>
Seleccione el curso:
<select name="codigocurso">
<?php
$conexion=mysql_connect("localhost","root","z80") or
  die("Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die("Problemas en la selección de la base de datos");
$registros=mysql_query("select codigo,nombrecur from cursos",$conexion) or
  die("Problemas en el select:".mysql_error());
while ($reg=mysql_fetch_array($registros))
{
  echo "<option value=\"$reg[codigo]\">$reg[nombrecur]</option>";
}
?>
</select>
<br>
<input type="submit" value="Registrar">
</form>
</body>
</html>


Lo único que podemos decir, es que agregamos tres controles de tipo "text" para el ingreso independiente del día, el mes y el año.
El segundo formulario, y más importante, es el alta propiamente dicha en la tabla alumnos:

Código: php
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysql_connect("localhost","root","z80") or
  die("Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die("Problemas en la seleccion de la base de datos");
$fechanacimiento=$_REQUEST['anio']."-".$_REQUEST['mes']."-".$_REQUEST['dia'];
mysql_query("insert into alumnos(nombre,mail,codigocurso,fechanac) values
           ('$_REQUEST[nombre]','$_REQUEST[mail]',
           $_REQUEST[codigocurso],'$fechanacimiento')", $conexion) or
  die("Problemas en el select".mysql_error());
mysql_close($conexion);
echo "El alumno fue dado de alta.";
?>
<br>
<a href="pagina3.php">ver listado de alumnos</a>
</body>
</html>


Lo primero que hacemos es generar una string que contenga el año-mes-día, en ese orden y utilizando como separador el caracter "-":

$fechanacimiento=$_REQUEST['anio']."-".$_REQUEST['mes']."-".$_REQUEST['dia'];

Tenemos ahora en la variable $fechanacimiento el valor de la fecha ingresada por teclado con el formato que requiere el MySql, procedemos ahora a plantear el comando insert con todos los datos ingresados en el formulario:

Código: php
mysql_query("insert into alumnos(nombre,mail,codigocurso,fechanac) values 
           ('$_REQUEST[nombre]','$_REQUEST[mail]',
           $_REQUEST[codigocurso],'$fechanacimiento')", $conexion) or
  die("Problemas en el select".mysql_error());


Por último, dispusimos un hipervínculo a una tercera página donde mostramos el contenido de la tabla alumnos, aquí podremos controlar los datos ingresados.
No hemos validado la fecha ingresada, tarea obligatoria cuando implementemos un sitio real.
El último archivo contiene la página que imprime el contenido de la tabla alumnos, con el campo fechanac inclusive:

Código: php
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysql_connect("localhost","root","z80") or
  die("Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die("Problemas en la selección de la base de datos");
$registros=mysql_query("select alu.codigo as codigo,nombre,mail,
                         codigocurso,fechanac,nombrecur from alumnos as alu
                       inner join cursos as cur on cur.codigo=alu.codigocurso",
                       $conexion) or
  die("Problemas en el select:".mysql_error());
while ($reg=mysql_fetch_array($registros))
{
  echo "Codigo:".$reg['codigo']."<br>";
  echo "Nombre:".$reg['nombre']."<br>";
  echo "Mail:".$reg['mail']."<br>";
  echo "Fecha de Nacimiento:".$reg['fechanac']."<br>";
  echo "Curso:".$reg['nombrecur']."<br>";
  echo "<hr>";
}
mysql_close($conexion);
?>
</body>
</html>



HS...

Formateo de datos en una página (printf)

Hasta ahora siempre hemos impreso dentro de la página, utilizando el comando echo, pero en ocasiones que necesitamos mayor control sobre el formato de impresión, podemos utilizar la función printf.

La función printf requiere como primer parámetro una cadena de control donde se indica cómo deben imprimirse el resto de parámetros de la misma función.
El siguiente ejemplo muestra el contenido de una variable entera con distintos formatos, lo mismo hacemos para una variable de tipo double:

Código: php
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$entero=255;
printf("Valor entero en formato decimal %d <br>",$entero);
printf("Valor entero en formato hexadecimal con letras minúsculas
%x<br>", $entero);
printf("Valor entero en formato hexadecimal con letras mayúsculas
%X<br>", $entero);
printf("Valor entero en formato binario %b<br>", $entero);
printf("Valor entero en formato octal %o<br>", $entero);
$letra=65;
printf("Valor entero como caracter ascii %c<br>", $letra);
echo "<br>";
$real=10.776;
printf("Impresion de un valor de tipo double %f <br>",$real);
printf("Impresion de un valor de tipo double indicando la cantidad de decimales
a imprimir %0.2f <br>",$real);
?>
<br>
<A href="pagina2.php">Algunas utilidades de estas conversiones</A>
</body>
</html>


Como podemos ver, es posible imprimir el contenido de una variable entera en formato ASCII, decimal, hexadecimal, octal. Y con una variable de tipo double, la podemos restringir la cantidad de decimales que deben aparecer.
La función printf sustituye todos los lugares en los cuales encuentra el caracter %, por el valor que le pasamos desde el segundo parámetro en adelante. Si queremos imprimir este caracter: %, con la función printf, debemos disponer dos: %%.

Podemos ver un uso relativamente seguido para cuando imprimamos valores de tipo double y necesitemos restringir a una determinada cantidad de decimales. Pero las otras conversiones, ¿nos servirán?
Veamos una utilidad de la función printf formateando a tipo de dato hexadecimal:

Código: php
<html>
<head>
<title>Problema</title>
</head>
<body bgcolor="<?php printf("#%X%X%X",150,150,0); ?>">
En esta página definimos el color de fondo indicando la cantidad de rojo,verde
y azul, en formato decimal y solicitando a la función printf que haga la
conversión a hexadecimal. Recordemos que la propiedad bgcolor de la
marca body, lo requiere en hexadecimal.<br><br>
<a href="pagina3.php">último ejemplo</a>
</body>
</html>


La función printf puede formatear n datos en una única llamada, como ocurre en este caso:

<body bgcolor="<?php printf("#%X%X%X",150,150,0); ?>">

Cuando tenemos los tres valores en formato decimal, para crear un color, la función printf nos facilita la tarea de generar el color definitivo en hexadecimal.

Por último, con la función printf, podemos determinar el número de caracteres que va a ocupar o en su defecto se rellenará con ceros:

Código: php
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$dia=6;
$mes=5;
$anio=2006;
printf("%02d/%02d/%d",$dia,$mes,$anio);
?>
</body>
</html>


Con esto logramos que una fecha aparezca con el día y el mes siempre de dos dígitos.

Si deseamos rellenar con otro caracter debemos disponer una simple comilla y el caracter a rellenar:

$importe=170;
printf("Valor:$%'x7d",$importe);

Formateo de datos y salida a un string (sprintf)

Así como vimos que la función printf nos permite tener un control más fino sobre cómo un dato debe imprimirse en una página, la función sprintf nos permite formatear la salida de un dato hacia un string y no a la página HTML.
Tipos de conversión utilizadas por la función sprintf (tener en cuenta que son los mismos caracteres de control que se aplican a la función printf):
%b Formatea un entero como un número binario.
%d Formatea un entero como un número decimal con signo.
%u Formatea un entero como un número decimal sin signo.
%o Formatea un entero como un número octal.
%x Formatea un entero como un número hexadecimal en minúsculas.
%X Formatea un entero como un número hexadecimal en mayúsculas.
%c Formatea un entero como un caracter ASCII.
%f Formatea un double con una cantidad de decimales.
%s Formatea un string.

Un ejemplo utilizando la función sprintf:

Código: php
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
function retornarColorHexa($rojo,$verde,$azul)
{
  $color=sprintf("#%02X%02X%02X",$rojo,$verde,$azul);
  return $color;
}
?>
<table>
<tr>
<td bgcolor="<?php echo retornarColorHexa(255,0,0)?>">Cuadro
rojo</td>
<td bgcolor="<?php echo retornarColorHexa(0,255,0)?>">Cuadro
verde</td>
<td bgcolor="<?php echo retornarColorHexa(0,0,255)?>">Cuadro
azul</td>
</tr>
</table>
</body>
</html>



Implementamos una función a la cual le enviamos 3 valores decimales y nos retorna un string que especifica un color en hexadecimal.

Fin Quinta Parte

Bueno si estas leyendo esto Es Porque leis todo el manual lo cual significa que estas listo para el mundo del php ;) o Tambien puede ser que te dio fastidio leer todo xD y te saltaste hasta aqui bue.... xD leelo si es que quieres aprender php :D

Espero que les haya gustado mi manual o que les haya servido de algo... :cool: nada cuesta agradecer xD si tienen alguna pregunta... :D

Salu2