Ejemplos practicos

Formulario de varios pasos

Si quieres dividir un formulario en varias partes tienes varias opciones:

- Coger los datos que quieras que 'persistan' y crear el siguiente formulario usando elementos 'hidden' para almacenarlos hasta que se acabe el proceso y meterlo todo junto en una base de datos por ejemplo.
Como es evidente esta forma no es recomendable, por diversos motivos.

- Meter la información en la base de datos por ejemplo, y así tener toda la información
al final en la base de datos. Esto está bien, pero … ¿Qué pasa si no se acaba de completar el formulatio?

- Por último usando las sesiones :), vas metiendo la información en la sesión, y al acabar el proceso de registro, introduces los datos almacenados en la sesión en la ase de datos por ejemplo.

form.php

<?php
// Inicia la sesión, si existe se abre y se cargan los datos de la sesión, en caso ontrario se crea.

session_start ();

while (list($key, $val) = @each($HTTP_POST_VARS)) {
if ($key != "step" && $key != "Astep") {
session_register ("$key");
$GLOBALS[$key] = $val;
}
}

if ($step == -1) session_unset ();
?>
<html><head></head>
<body>
<table>
<form name="Mform" action="ses.php" method="post">
<?php
if (!isset ($step) || $step < 1 || $step > 3) $step = 1;

switch ($Astep) {
case 1:
if (!vNick ($name)) $step = 1;
if (!vPassword ($password)) $step = 1;
if (!vEmail ($email)) $step = 1;
if ($password != $password2) $step = 1;
break;
case 2:
break;
case 3:
break;
}
if ($Astep == $step) FRMparagraph ("Verifique que los campos están orrectamente escritos");

switch ($step) {
case 1:
FRMtexto ("Nombre", "name", $name);
FRMpassword ("Password", "password", $password);
FRMpassword ("Repita Password", "password2", $password2);
FRMtexto ("E-Mail", "email", $email);
FRMgoto (2);
?>
<?php
break;
case 2:
$years = array ();
for ($n = 1900; $n <= ((int)date ("Y")); $n++) array_push ($years, $n);
$years = array_reverse ($years);
FRMselect ("Año", "year", $years, $year);
$months = array (
"Enero",
"Febrero",
"Marzo",
"Abril",
"Mayo",
"Junio",
"Julio",
"Agosto",
"Septiembre",
"Octubre",
"Noviembre",
"Diciembre");
FRMselect ("Mes", "month", $months, $month);
$days = array ();
for ($n = 1; $n <= 31; $n++) array_push ($days, $n);
FRMselect ("Día", "day", $days, $year);
FRMgoto (3);
?>
<?php
break;
case 3:
echo "Fin del formulario, gracias por su colaboración…";
// Ahora se meterían los datos, por ejemplo en una base de datos y se ofrecería un link para aceptar los datos
?>
<?php
default;
?>
<?php
}

// Reglas:

// tener una @ en la cadena
// tener al- un . en la cadena
// usar sólo los caracteres: 'A-Z', 'a-z', '@', '.' y '-'
function vEmail ($email) {
if (substr_count ($email, "@") == 1 &&
substr_count ($email, ".") > 0 &&
ereg ("^([A-Za-z@.-]{1,})$", $email)) {
return true;
} else {
return false;
}
}

// letras y números
// nº caracteres … < o = a 16
function vNick ($nick) {
if (strlen ($nick) <= 16 &&
ereg ("^([A-Za-z0-9]{1,})$", $nick)) {
return true;
} else {
return false;
}
}

// nº caracteres … > o = a 6 && < o = 32
function vPassword ($password) {
if (strlen ($password) >= 6 &&
strlen ($password) <= 32) {
return true;
} else {
return false;
}
}

function FRMgoto ($ses) {
global $step, $Astep;
echo "<tr><td colspan="2">";
echo "<input type="hidden" name="step" value="$ses"/>n";
echo "<input type="hidden" name="Astep" value="$step"/>n";
if ($step > 1) {
echo "<input type="button" onClick="Mform.Astep.value=" . ($step) . ";Mform.step.value=" . ($step - 1) . ";Mform.submit();" value="Anterior lt;&lt;"/>n";
}
echo "<input type="submit" value="Siguiente &gt;&gt;"/>n";
echo "<input type="button" onClick="Mform.step.value=-1;Mform.Astep.value=0;Mform.submit();" value="BORRAR"/>n";
echo "</td></tr>n";
}

function FRMtexto ($text, $name, $value) {
echo "<tr>";
echo "<td>$text:</td>";
echo "<td><input type="text" name="$name" value="$value"/></td>";
echo "</tr>n";
}

function FRMparagraph ($text) {
echo "<tr><td colspan="2">$text</td></tr>n";
}

function FRMpassword ($text, $name, $value) {
echo "<tr>";
echo "<td>$text:</td>";
echo "<td><input type="password" name="$name" value="$value"/></td>";
echo "</tr>n";
}

echo "<tr>";
echo "<td>$text:</td>";
echo "<td><select name="$name">n";
for ($n = 0; $n < sizeof ($array); $n++) {
echo $value . "," . $array[$n] . "<br/>n";
if ($value == $array[$n]) {
echo "<option name="$n" selected>" . $array[$n] . "</option>n";
} else {
echo "<option name="$n">" . $array[$n] . "</option>n";
}
}
echo "</select>";
echo "</td></tr>n";
}
?>
</form>
</table>
</body>

« Php | Sesiones

Si no se indica lo contrario, el contenido de esta página se ofrece bajo Creative Commons Attribution-ShareAlike 3.0 License