Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/05/2006, 13:26
Avatar de AlZuwaga
AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 1 mes
Puntos: 535
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&ntilde;a:</span>
      <input name="pass" type="text" id="pass" value="<? echo $pass; ?>" />
      </label>
      <label><span>Reingrese contrase&ntilde;a:</span>
      <input name="pass2" type="text" id="pass2" value="<? echo $pass2; ?>" />
      </label>
      <label><span>Direcci&oacute;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>&nbsp;</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
__________________
...___...