Foros del Web » Programando para Internet » PHP »

Redireccionamiento a la pagina con el formulario...

Estas en el tema de Redireccionamiento a la pagina con el formulario... en el foro de PHP en Foros del Web. Necesito saber si cuando en una pagina, después de comprovar si los datos no son correctos para grabarlos en la BD, cuando redirecciono a la ...
  #1 (permalink)  
Antiguo 20/03/2003, 05:50
 
Fecha de Ingreso: marzo-2003
Mensajes: 12
Antigüedad: 21 años, 8 meses
Puntos: 0
Pregunta Redireccionamiento a la pagina con el formulario...

Necesito saber si cuando en una pagina, después de comprovar si los datos no son correctos para grabarlos en la BD, cuando redirecciono a la pagina donde esta el formulario... Y ahi va la cuestión... ¿como lo hago para que los campos se queden con la informacion que había introducido el usuario antes de aceptar y pasar a la pagina que graba en la BD?
Porque ahora cuando vuelvo al formulario, ESTA VACÍO... y se tienen que volver a introducir todos los datos....
Gracias de antemano...
  #2 (permalink)  
Antiguo 20/03/2003, 06:48
 
Fecha de Ingreso: marzo-2003
Mensajes: 12
Antigüedad: 21 años, 8 meses
Puntos: 0
Este es el código que uso, ya se que es muy largo pero si no lo pongo todo a lo mejor no veis lo que quiero hacer... gracias!

FormularioAlta.html:

<form name="form1" method="post" action="AltaUsuario.php">
<table width="100%" border="0">
<tr>
<td width="100%" colspan="2">
<p align="center">
<b>
<font face="Arial, Helvetica, sans-serif" size="4" color="#000099">
Formulario de alta de cliente
<?php
if ($errorusuario=="si")
{
echo("<br><font size='2' color='red'>No ha introducido los campos requeridos!</font>");
}
?>
</font>
</b>
</td>
</tr>
<tr>
<td width="29%" align="right">
<b><font face="Arial, Helvetica, sans-serif" size="2">NICK:</font></b>
</td>
<td width="71%">
<input type="text" name="Nick" size="6" tabindex="1" maxlength="6">
</td>
</tr>
<tr>
<td width="29%" align="right">
<b><font face="Arial, Helvetica, sans-serif" size="2">CONTRASEÑA:</font></b>
</td>
<td width="71%">
<input type="password" name="Pswrd" size="6" tabindex="2" maxlength="6">
</td>
</tr>
<tr>
<td width="29%">
<p align="right">
<b><font face="Arial, Helvetica, sans-serif" size="2">NOMBRE (+ APELLIDOS):</font></b>
</td>
<td width="71%">
<input type="text" name="Nombre" size="40" tabindex="3" maxlength="6">
<b><font face="Arial, Helvetica, sans-serif" size="2">(requerido)</font></b>
</td>
</tr>
<tr>
<td width="29%">
<p align="right">
<b><font size="2" face="Arial, Helvetica, sans-serif">NIF
:</font></b></td>
<td width="71%">
<input type="text" name="Nif" size="9" tabindex="4" maxlength="9"><b><font face="Arial, Helvetica, sans-serif" size="2">(requerido)</font></b>
</td>
</tr>
<tr>
<td width="29%"><p align="right"><b><font face="Arial, Helvetica, sans-serif" size="2">C.
POSTAL :</font></b></td>
<td width="71%"><input type="text" name="CPostal" size="5" tabindex="5" maxlength="5">
</td>
</tr>
<tr>
<td width="29%">
<p align="right"><font face="Arial, Helvetica, sans-serif" size="2"><b>DIRECCIÓN :</b></font>
</td>
<td width="71%">
<input type="text" name="Direccion" size="50" tabindex="6" maxlength="50">
</td>
</tr>
<tr>
<td width="29%">
<p align="right"><b><font face="Arial, Helvetica, sans-serif" size="2">LOCALIDAD.:</font></b>
</td>
<td width="71%">
<input type="text" name="Localidad" size="40" tabindex="7" maxlength="40">
</td>
</tr>
<tr>
<td width="29%">
<p align="right"><b><font face="Arial, Helvetica, sans-serif" size="2">TELEFONO :</font></b>
</td>
<td width="71%">
<input type="text" name="Telefono" size="9" tabindex="8" maxlength="9">
</td>
</tr>
<tr>
<td width="29%">
<p align="right"><b><font face="Arial, Helvetica, sans-serif" size="2">FAX :</font></b>
</td>
<td width="71%">
<input type="text" name="Fax" size="9" tabindex="9" maxlength="9">
<b><font face="Arial, Helvetica, sans-serif" size="2">(requerido)</font></b>
</td>
</tr>
<tr>
<td width="29%">
<p align="right"><b><font face="Arial, Helvetica, sans-serif" size="2">E-MAIL :</font></b>
</td>
<td width="71%">
<input type="text" name="Mail" size"50" tabindex="10" size="20" maxlength="50">
<b><font face="Arial, Helvetica, sans-serif" size="2">(requerido)</font></b>
</td>
</tr>
<tr>
<td width="29%">
<p align="right"><b><font face="Arial, Helvetica, sans-serif" size="2">PERSONA DE CONTACTO :</font></b>
</td>
<td width="71%">
<input type="text" name="PersContac" size="50" tabindex="11" maxlength="50">
</td>
</tr>
<tr>
<td width="29%">
<p align="right"><b><font face="Arial, Helvetica, sans-serif" size="2">TIPO
DE EMPRESA :</font></b></td>
<td width="71%">
<select name="Empresa" tabindex="12" size="1">
<option value="Particular" selected>Particular</option>
<option value="E_Produccion">Mayorista</option>
<option value="Servicio Tecnico">Servicio Técnico</option>
<option value="Tienda">Tienda</option>
<option value="Otros">Otros</option>
</select>
</td>
</tr>
</table>
<div align="center">
<input type="submit" name="Submit" value="Enviar" tabindex="13">
<input type="reset" name="Borrar" value="Restablecer" tabindex="14">
</div>
</form>

AltaUsuario.php

<?php
//miramos si los campos estan vacios....
if ((strlen($Pswrd)==0) or (strlen($Nick)==0) or (strlen($Nombre)==0) or (strlen($Nif)==0))
{
header("Location: FormularioAlta.html?errorusuario=si");
} //fin if
else
{
include ("libreria.php");
$link=Conectarse();
//comprobamos que no exista el password...
$a=mysql_query("insert into usuario (password,nombre,nif,postal,
direccion,localidad,telefono,fax,email,contacto,ti poempresa,nick)
values ('$Pswrd','$Nombre','$Nif','$CPostal','$Direccion' ,'$Localidad',
'$Telefono','$Fax','$Mail','$PersContac','$Empresa ',$Nick)",$link);
if ($a)
{
mysql_close ($link);
header("Location: AltaRealizada.html");
exit;
}
else
{
echo ("Ha ocurrido un error al realizar el alta, inténtelo de nuevo");
}
mysql_close ($link);
} //fin else
?>
  #3 (permalink)  
Antiguo 20/03/2003, 07:11
Avatar de sci-fi  
Fecha de Ingreso: marzo-2002
Mensajes: 157
Antigüedad: 22 años, 8 meses
Puntos: 0
hola,

no revisé todo ese código, pero hace unos días tuve el mismo problema y lo solucioné así:

1) inicié una sesión antes de redireccionar al formulario de vuelta
2) registré una variable de sesión, un array, al que le pasé las variables de $_POST, conteniendo los datos escritos por el usuario
3) en la página de error, continúo la sesión, e imprimo los valores en las etiquetas, de estar, mediante el atributo "value" de las etiquetas HTML. Todos los inputs pueden tener un atributo "value" que es como un valor inicial del campo; <input bl bla value="valor inicial">bla bla creará un campo ya rellenado con el texto "valor inicial".

Utilicé esta forma porque las variables de $_POST se pierden en un redireciconamiento. Sin embargo el redireccionamiento es correcto, se debería de hacer así, como cuando el formulario es completado con éxito, la página de mensaje de éxito, etc, etc, no debería ser la misma del script que procesó los datos.

El array que te queda es un array asociativo (con índices basados en texto y no en números) con los mismos nombres de los campos del formulario. El código que utilicé es más o menos éste; no lo pongo todo porque sería muy largo, de todas maneras esto es lo relevante. y te conviene revistar las funciones de sesión en manual PHP sesiones :

Código PHP:
$recuperar = array();
foreach(
$_POST as $indice => $valor) {
$recuperar[$indice] = $valor;
}
// sesión
session_start();
session_register("recuperar"); 
Así te queda un array $recuperar con los nombres de los campos de formulario como índices ($recuperar['nombre'] contendrá lo que introdujo el usuario, etc), y lo recuperas en el redireccionamiento mediante sesión, con $_SESSION['recuperar']. Nota que vas a necesitar acceder, con esta notación, a cada campo mediante $_SESSION['recuperar']['nombre de campo']... porque $recuperar es en sí un array, y como $_SESSION es también un array, te queda un array de un array...

Luego en el output del codigo haces
Código PHP:
if ( isset($_SESSION['recuperar']['nombre de campo']) ) {
print 
' value="' $_SESSION['recuperar']['nombre de campo'] . '">'; } 
etc 
eso en el lugar del código que corresponda

espero haberme explicado

saludos
__________________
webdeveloper
http://www.javascripters.com.ar/
diseño web y tecnología

Última edición por sci-fi; 20/03/2003 a las 07:14
  #4 (permalink)  
Antiguo 20/03/2003, 08:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Yo uso la técnica de sci-fi (volcando el array $_POST a una session) .. va muyy bien para no andar paseando por el URL los datos del formulario ..

Un detalle .. al llegar a la página del formulario y obtener el valor del array $_POST que he guardado en la session .. procedo a borrar ese array (variable) de la session .. Así si abandonan el formulario en ese punto .. ya no me quedará dando vueltas la sesion esa (variable, array).

Por lo demas .. no me complico con crear un array del array $_POST .. tan solo hago:

En el script.php q procesa el formulario ...
Código PHP:
<?php
session_start
();
$_SESSION['datos_formulario']=$_POST;
?>
Y en el formulario:

Código PHP:
<?php
session_start
();
if (isset(
$_SESSION['datos_formulario'])){
$datos_formulario=$_SESSION['datos_formulario'];
session_unregister('datos_formulario'); // borro los datos de la session 
} else {
$datos_formulario=array();
}

// Y donde lo necesite:
echo "<input type=\"text\" name=\"nose\" value=\"$datos_fomulario['nose']\">";
?>
Lo mismo .. para los mensajes de error personalizados para cada campo/error del formulario .. se puede usar un array de "errores" y pasarlo por el mismo método ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 20/03/2003 a las 08:41
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:40.