Hola mauled, me queda bastante claro lo de los strings y op. lógicos.
Con lo restante, creo que lo explicaría mejor con el siguiente ejemplo.
Se trata de un trabajo práctico (ya hecho y aprobado, no pido ayuda con él).
La consigna fue:
Cita: -validar que todos los campos sean obligatorios
-las contraseñas deben conicidir y no deben ser menores de 5 ni mayores de 8
-la dirección tiene que salir con las iniciales en mayúsculas y el resto en minúsclas.
-nombre y apelido igual que elpunto anterior
-si falto llenar un campo, lo debe marcar (avisar de todos los errores)
-si está todo ok, dar un resumen de todos los datos cargados (salvo la contraseña)
-calcular la edad con la fecha de nacimiento
-mantener el estado del formulario.
La lógica que le di fue esta:
Código:
<?
//No sé por qué me obliga a definir variables!!!!
$nombre="";
$apellido="";
$dia="";
$mes="";
$anio="";
$user="";
$pass="";
$pass2="";
$direccion="";
$localidad="";
$provincia="";
$alertar_nombre = false;
$alertar_apellido = false;
$alertar_nac = false;
$alertar_user = false;
$alertar_pass = false;
$alertar_pass2 = false;
$alertar_direccion = false;
$alertar_localidad = false;
$alertar_provincia = false;
$alertar_pass_distintas = false;
$alertar_pass_largo = false;
$muestra_form = true;
?>
<!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>TP2 NE TM Azuaga</title>
<style type="text/css">
<!--
body {
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 12px;
color: #333333;
margin-top: 50px;
margin-right: 0px;
margin-bottom: 0px;
margin-left: 0px;
}
#contenedor {
margin-right: auto;
margin-left: auto;
width: 550px;
}
#registro {
margin: 0px;
padding: 0px;
}
#frmtitulo {
font-size: 16px;
font-weight: bold;
background-color: #FFFFFF;
}
fieldset {
background-color: #EBEBEB;
display: block;
}
label {
display: block;
width: 450px;
margin-right: auto;
margin-left: auto;
margin-top: 5px;
}
label span {
width: 150px;
display: block;
float: left;
text-align: right;
margin-right: 10px;
}
input {
width: 200px;
}
#enviar {
width: auto;
}
#alertas {
width: 550px;
margin-right: auto;
margin-bottom: 50px;
margin-left: auto;
}
#tit_alertas {
margin-top: 0px;
margin-right: 0px;
margin-bottom: 15px;
margin-left: 0px;
font-size: 14px;
font-weight: bold;
}
#contenedor th {
text-align: left;
}
#contenedor #thsup {
background-color: #FFFFFF;
}
#contenedor table {
color: #333333;
background-color: #EBEBEB;
}
#contenedor tr {
}
.fecha_nac {
width: auto;
}
-->
</style>
</head>
<body>
<?
if(isset($_POST['nombre'])){
$nombre = ucwords(strtolower($_POST['nombre']));
$apellido = ucwords(strtolower($_POST['apellido']));
$dia = $_POST['dia'];
$mes = $_POST['mes'];
$anio = $_POST['anio'];
$user = $_POST['user'];
$pass = $_POST['pass'];
$pass2 = $_POST['pass2'];
$direccion = ucwords(strtolower($_POST['direccion']));
$localidad = ucwords(strtolower($_POST['localidad']));
$provincia = ucwords(strtolower($_POST['provincia']));
if(strlen($nombre) == 0){
$alertar_nombre = true;
}
if(strlen($apellido) == 0){
$alertar_apellido = true;
}
if(strlen($dia) != 2 || strlen($mes) != 2 || strlen($anio) != 4){
$alertar_nac = true;
// echo $alertar_nac;
}
if(strlen($user) == 0){
$alertar_user = true;
}
if(strlen($pass) == 0){
$alertar_pass = true;
}
if(strlen($pass2) == 0){
$alertar_pass2 = true;
}
if(strlen($direccion) == 0){
$alertar_direccion = true;
}
if(strlen($localidad) == 0){
$alertar_localidad = true;
}
if(strlen($provincia) == 0){
$alertar_provincia = true;
}
if($pass != $pass2){
$alertar_pass_distintas = true;
}
if(strlen($pass) < 5 || strlen($pass) > 8){
$alertar_pass_largo = true;
}
//echo "se produjo al menos un submit";
if($alertar_nombre ||
$alertar_apellido ||
$alertar_nac ||
$alertar_user ||
$alertar_pass ||
$alertar_pass2 ||
$alertar_direccion ||
$alertar_localidad ||
$alertar_provincia ||
$alertar_pass_distintas ||
$alertar_pass_largo){
// echo "<br />ocurrio al menos un error";
}
else{
// echo "<br />no ocurrieron errores";
$muestra_form = false;
}
}//isset
else{
// echo "se accede por primera vez al formulario";
}//isset
?>
<? if($muestra_form){ ?>
<div id="alertas">
<p id="tit_alertas">Ocurrieron los siguientes errores:</p>
<ul>
<?
if($alertar_nombre){
echo " <li>Debe escribir su nombre</li>";
}
if($alertar_apellido){
echo " <li>Debe escribir su apellido</li>";
}
if($alertar_nac){
echo " <li>Debe escribir su fecha de nacimiento completa (Ej. 27/08/1975)</li>";
}
if($alertar_user){
echo " <li>Debe escribir un nombre de usuario</li>";
}
if($alertar_pass){
echo " <li>Debe escribir una contraseña</li>";
}
if($alertar_pass2){
echo " <li>Debe reingresar la contraseña elegida</li>";
}
if($alertar_pass_distintas){
echo " <li>Las contraseñas ingresadas no coinciden</li>";
}
if($alertar_pass_largo){
echo " <li>El largo de las contraseñas debe ser entre 5 y 8 caracteres</li>";
}
if($alertar_direccion){
echo " <li>Debe proporcionarnos su direccion</li>";
}
if($alertar_localidad){
echo " <li>Debe escribir su localidad</li>";
}
if($alertar_provincia){
echo " <li>Debe escribir la provincia donde vive</li>";
}
?>
</ul>
</div>
<? }//if $muestra_form ?>
<div id="contenedor">
<? if($muestra_form){ ?>
<form id="registro" name="registro" method="post" action="<? echo $_SERVER['PHP_SELF'] ?>">
<fieldset>
<legend id="frmtitulo">Formulario de registro</legend>
<label><span>Nombre:</span>
<input name="nombre" type="text" id="nombre" value="<? echo $nombre; ?>" />
</label>
<label><span>Apellido:</span>
<input name="apellido" type="text" id="apellido" value="<? echo $apellido; ?>" />
</label>
<label><span>Fecha de nacimiento:</span>
<input name="dia" type="text" id="dia" value="<? echo $dia; ?>" size="2" maxlength="2" class="fecha_nac" />
/
<input name="mes" type="text" id="mes" value="<? echo $mes; ?>" size="2" maxlength="2" class="fecha_nac" />
/
<input name="anio" type="text" id="anio" value="<? echo $anio; ?>" size="4" maxlength="4" class="fecha_nac" />
</label>
<label><span>Nombre de usuario:</span>
<input name="user" type="text" id="user" value="<? echo $user; ?>" />
</label>
<label><span>Contraseña:</span>
<input name="pass" type="text" id="pass" value="<? echo $pass; ?>" />
</label>
<label><span>Reingrese contraseña:</span>
<input name="pass2" type="text" id="pass2" value="<? echo $pass2; ?>" />
</label>
<label><span>Dirección:</span>
<input name="direccion" type="text" id="direccion" value="<? echo $direccion; ?>" />
</label>
<label><span>Localidad:</span>
<input name="localidad" type="text" id="localidad" value="<? echo $localidad; ?>" />
</label>
<label><span>Provincia:</span>
<input name="provincia" type="text" id="provincia" value="<? echo $provincia; ?>" />
</label>
<label><span> </span>
<input name="enviar" type="submit" id="enviar" value="Enviar" />
</label>
</fieldset>
</form>
<? }
else{
?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<th colspan="2" scope="col" id="thsup">Los datos fueron ingresados correctamente:</th>
</tr>
<tr>
<th scope="row">Nombre:</th>
<td><? echo $nombre; ?></td>
</tr>
<tr>
<th scope="row">Apellido:</th>
<td><? echo $apellido; ?></td>
</tr>
<tr>
<th scope="row">Direccion</th>
<td><? echo $direccion; ?></td>
</tr>
<tr>
<th scope="row">Localidad</th>
<td><? echo $localidad; ?></td>
</tr>
<tr>
<th scope="row">Provincia</th>
<td><? echo $provincia; ?></td>
</tr>
<tr>
<th scope="row">Su edad: </th>
<td>
<?php
$fecha1 = date('d/m/Y');
$fecha2 = $dia ."/" . $mes . "/" . $anio;
$diferencia = abs((strtotime($fecha1) - strtotime($fecha2))/(86400*365));
echo number_format($diferencia,0)." Años";
?> </td>
</tr>
</table>
<? }//if muestra_form ?>
</div>
</body>
</html>
No sé si está correctamente planteado, pero me llamó mucho la atención (vengo de ASP) que no pueda hacer uso de variables que antes no fueron inicializadas.
Saludos
PD: perdón lo extenso de ese código :p