Foros del Web » Programando para Internet » PHP »

Un pequeño inconveniente

Estas en el tema de Un pequeño inconveniente en el foro de PHP en Foros del Web. Hola de nuevo: Finalmente conseguí grabar datos en el formulario de registro con mensajes de advertencia en forma de popup de Javascript. Hasta aquí todo ...
  #1 (permalink)  
Antiguo 17/01/2011, 12:09
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Información Un pequeño inconveniente

Hola de nuevo:

Finalmente conseguí grabar datos en el formulario de registro con mensajes de advertencia en forma de popup de Javascript. Hasta aquí todo bien.
El problema es que cada vez que un usuario (...o sea yo) se equivoca y sale el mensaje de advertencia, al volver al formulario, este aparece limpio y claro hay que cumplimentarlo POR COMPLETO de nuevo .
Esto se que es un freno para el registro de mis esperados y deseados subscriptores he visto en otros casos parecidos en los que al volver no se borra el formulario permitiendo corregir el dato.
¿Alguien puede decirme que tengo mal y que debo cambiar?

Aquí el código:
Código PHP:
<?php  

// form submitted  
//Seleccciono los datos de conexión a la BBDD 
$host "AAA";  
$user "BBB";  
$pass "CCC";  
$db "DDD";  

// Recojo las entradas del formulario, compruebo y doy mensajes de error si no está bien 
//Campos de Tabla personas 

if($nombre = empty($_POST['nombre'])) {echo "<script type=\"text/javascript\">alert(\"ERROR: Pon un nombre\");  window.history.back();  </script>";  exit;}   
if(
$apellido1 = empty($_POST['apellido1'])) {echo "<script type=\"text/javascript\">alert(\"ERROR: Pon un Apellido 1º\");  window.history.back();  </script>";  exit;} 
if(
$apellido2 = empty($_POST['apellido2'])) {echo "<script type=\"text/javascript\">alert(\"ERROR: Pon un Apellido 2º\");  window.history.back();  </script>";  exit;} 

//Campos de Tabla Direcciones 

if ($direccion = empty($_POST['direccion'])) {echo "<script type=\"text/javascript\">alert(\"Debes poner una dirección\"); 
window.history.back();   
</script>"
;   
exit; };  
if (
$poblacion = empty($_POST['poblacion'])) {echo "<script type=\"text/javascript\">alert(\"Falta la población\"); 
window.history.back();   
</script>"
;   
exit; };  

// Abro conexión y selecciono la base de datos 

$connection mysql_connect($host$user$pass) or die ("Unable to connect!");  
mysql_select_db($db) or die ("Unable to select database!");  

// creo query para tabla personas 

$queryPER "INSERT INTO personas (nombre,apellido1,apellido2) VALUES ('$nombre', $apellido1','$apellido2')"

// ejecuto query para tabla personas 

$result mysql_query($queryPER) or die ("Error in queryPER: $queryPER. ".mysql_error()); 
echo 
"New record inserted with ID ".mysql_insert_id();  

//Selecciono PK y la adjudico a la clave idPER de personas mediante una variable para crear el vinculo entre tablas (idPrimaryPER en personas  con idPER en direcciones, contacto, etc...) 

$selectPKper mysql_insert_id(); 

$idPER=$selectPKper

// creo query para tabla direcciones 
  
$queryDIR"INSERT INTO direcciones (idPER,direccion, poblacion) VALUES ('$idPER','$direccion','$poblacion')"
  
// ejecuto query para tabla Direcciones 

$resultDIR mysql_query($queryDIR) or die ("Error in query: $queryDIR. ".mysql_error()); 
echo 
"New record inserted with ID ".mysql_insert_id(); 

// Cierro la conexión 
mysql_close($connection);  
  
?>
Gracias mil por la valiosa ayuda,

J.
  #2 (permalink)  
Antiguo 17/01/2011, 12:27
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 9 meses
Puntos: 35
Respuesta: Un pequeño inconveniente

Una manera de evitar ese comportamiento seria la de validar el formulario desde javascript, antes de enviar el formulario al servidor.
Al hacer click en "enviar" una función valide el form, en caso de ser valido lo envíe action del form
__________________
I am Doyle please insert code.
  #3 (permalink)  
Antiguo 17/01/2011, 19:52
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Un pequeño inconveniente

Para que vuelvas y esten los datos que se escribieron, debes hacer uso de las sessiones en PHP. Aqui un enlace al manual oficial sobre las sesiones, espero que te sea de utilidad.

Un saludo
  #4 (permalink)  
Antiguo 18/01/2011, 10:15
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Un pequeño inconveniente

Hola Helios,

Vale, ya he iniciado la sesion tambien en esta página (ya tenia declarada sesion para todo el proceso de autentificación y login). Sin embargo me sigue sucediendo lo mismo .
Quizás al ser este el formulario inicial en el que se registra el usuario, si a mitad de proceso de registro se produce un error, como el usuario realmente todavia no existe, se pierde la información introducida en el formulario.
A lo mejor debería, primero registrar el usuario/contraseña y después crear una página personal del usuario (con sesion) en donde accediera al resto del formulario.
Me parece un poco complicado ¿Tienes alguna idea?

Gracias por tu ayuda y un saludo,

J.
  #5 (permalink)  
Antiguo 18/01/2011, 11:02
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Un pequeño inconveniente

No he entendido muy bien que es lo que quieres hacer, pero el mecanismo para que si hay algún error vuelvan a estar los datos es guardar cada campo en un valor del array $_SESSION, y despues, en cada campo, en el atributo value, haces algo como:
Código PHP:
<input type="text" name"usuario" value="<?php echo $_SESSION['user']; ?>" />
  #6 (permalink)  
Antiguo 18/01/2011, 11:43
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Un pequeño inconveniente

Hola Helios:

Gracias por contestar tan rápido. El form es más largo pero ¿te refieres a algo así?

Código PHP:
<?php

....
        <
label for="nombre">Nombre:</label><input type="text" name="nombre" id="nombre"size="40" value="<?php echo $_SESSION['nombre']; ?>"/><br/><br/>
        <
label for="apellido1">Apellido 1º:</label><input type="text" name="apellido1" id="apellido1" value="<?php echo $_SESSION['apellido1']; ?>"/>
        <
label for="apellido2">Apellido 2º:</label><input type="text" name="apellido2" id="apellido2" value="<?php echo $_SESSION['apellido2']; ?>"/><br>
     <
label for="imagen">Foto:<input type="file" name="imagen" size="40" value="<?php echo $_SESSION['imagen']; ?>"><br>

.....

?>
¿Serviría para el campo de imagen?

Un saludo y gracias de nuevo,

J.
  #7 (permalink)  
Antiguo 18/01/2011, 12:47
 
Fecha de Ingreso: junio-2008
Ubicación: Capital Federal xD
Mensajes: 1.208
Antigüedad: 15 años, 9 meses
Puntos: 35
Respuesta: Un pequeño inconveniente

los values tendrán el valor de lo que se guardo en $_SESSION, por lo que paso previo debería guardarse en las $_SESSION los valores que se envian del formulario
Código Javascript:
Ver original
  1. if ($_POST){
  2.     $_SESSION['apellido1'] = $_POST['apellido1'];
  3.     etc
  4. }
El campo de la imagen solo toma la url de donde cargará un archivo, no guarda al archivo en sí.
__________________
I am Doyle please insert code.
  #8 (permalink)  
Antiguo 19/01/2011, 05:25
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Un pequeño inconveniente

Si me refiero a como lo pusiste en el código.

Y como dice doylelives, en la pagina donde envia al form, debes llenar el array session, para poder usarlo al volver a la pagina del formulario.

Y si, creo que con el campo file tambien funcionará, no te lo puedo garantizar al 100%, pero solo es cuestión de probar :)

Un saludo
  #9 (permalink)  
Antiguo 19/01/2011, 11:38
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Un pequeño inconveniente

Gracias a los dos

Intuyo que como lo que sucede es que el mensaje de Javascript procede del código php mostrado, donde debo poner el array es en el form de origen, es decir el destino al que vuelve el mensaje de javascript con window.history.back();.

Código:
echo "<script type=\"text/javascript\">alert(\"Debes poner una dirección\");  
window.history.back();    
</script>";
¿O es en la misma página del código?


Un saludo y muy agradecido

J.
  #10 (permalink)  
Antiguo 19/01/2011, 11:55
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Un pequeño inconveniente

Mi solución era sin javascript, javascript es una solución complementaria, siempre habría que aplicar las dos para la gente que no tiene activado javascript.

Un saludo

Etiquetas: Ninguno
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 00:56.