Foros del Web » Programando para Internet » PHP »

envio de formularios con php: duda

Estas en el tema de envio de formularios con php: duda en el foro de PHP en Foros del Web. salu2 a to2, estoy creando un sistema de usuarios en mi web. tengo una pagina que se llama register.php, en la que se encuentra el ...
  #1 (permalink)  
Antiguo 09/07/2005, 18:14
okram
Invitado
 
Mensajes: n/a
Puntos:
Pregunta envio de formularios con php: duda

salu2 a to2, estoy creando un sistema de usuarios en mi web.

tengo una pagina que se llama register.php, en la que se encuentra el formulariod e registro. Este formulario es procesado y almacenado en la BD por la pagina check.php. Aqui viene mi duda. quiero que la pagina check.php verifique que todos los campos hayan sido llenados, y si faltan algunos, que regrese a la pagina del formulario y me liste todos los campos que faltan llenar, pero que los que si lo estan conserven sus datos y no se borren???

espero ayuda gracias
  #2 (permalink)  
Antiguo 09/07/2005, 20:09
Avatar de PabloP  
Fecha de Ingreso: marzo-2005
Mensajes: 83
Antigüedad: 12 años, 8 meses
Puntos: 0
no crees que seria mejor validar los campos del formulario que envia datos para que no envie hasta ques estén llenos los campos que deban ser obligatorios?, consulta por validación de campos de texto de formularios en el foro de javascript.
  #3 (permalink)  
Antiguo 09/07/2005, 21:46
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 2 meses
Puntos: 5
Hola, puedes hacerlo como lo dice PabloP y asi le quitarías trabajo al servidor. Pero... ¿qué pasa si el cliente no tiene JS?

Te mostraré un ejemplo con solo dos campos, nombre y email. Tu luego te encargas de enriquecerlo, es solo para que tengas una idea.

register.php
Código HTML:
<form method="post" action="check.php">
<input type="text" name="nombre" value="<?php echo isset($_GET['nombre'])?$_GET['nombre']:''; ?>" />
<input type="text" name="email" value="<?php echo isset($_GET['email'])?$_GET['email']:''; ?>" />
<input type="submit" name="submit" value="enviar" />
</form>
<?php echo $_GET['buffer']; ?> 
check.php
Código PHP:
$buffer=''//inicializamos el buffer de errores
$buffer.=empty($_POST['nombre'])?'Debe escribir un nombre.<br />':'';
$buffer=empty($_POST['email'])?'Debe escribir un email.':'';
if(empty(
$buffer)){
  
//procedimientos del registro, inserción en BD, etc
}else{
  
header('Location: register.php?nombre='.$_POST['nombre'].'&email='.$_POST['email'].'&buffer='.$buffer);

No he probado el código, pero debería funcionar. Es para que tengas una idea básica de lo que debes hacer.

Saludos,
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #4 (permalink)  
Antiguo 10/07/2005, 00:44
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Igual algo sencillo.. más explicativo que otra cosa: http://www.forosdelweb.com/f18/personalizacion-errores-258911/

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 10/07/2005, 18:43
okram
Invitado
 
Mensajes: n/a
Puntos:
Exclamación

Cita:
Iniciado por Takitei
register.php
Código HTML:
<form method="post" action="check.php">
<input type="text" name="nombre" value="<?php echo isset($_GET['nombre'])?$_GET['nombre']:''; ?>" />
<input type="text" name="email" value="<?php echo isset($_GET['email'])?$_GET['email']:''; ?>" />
<input type="submit" name="submit" value="enviar" />
</form>
<?php echo $_GET['buffer']; ?> 
check.php
Código PHP:
$buffer=''//inicializamos el buffer de errores
$buffer.=empty($_POST['nombre'])?'Debe escribir un nombre.<br />':'';
$buffer=empty($_POST['email'])?'Debe escribir un email.':'';
if(empty(
$buffer)){
  
//procedimientos del registro, inserción en BD, etc
}else{
  
header('Location: register.php?nombre='.$_POST['nombre'].'&email='.$_POST['email'].'&buffer='.$buffer);

No he probado el código, pero debería funcionar. Es para que tengas una idea básica de lo que debes hacer.

Saludos,
gracias por tu respuesta, antes de postear en este foro hice algo parecido, pero despues me di cuenta que no era conveniente, primero porque en tu ejemplo solo son 2 campos, y si hay algun error simplemente redirijes a
Código PHP:
header('Location: register.php?nombre='.$_POST['nombre'].'&email='.$_POST['email'].'&buffer='.$buffer); 
pero imaginate con 15 o 20 campos. Ademas eso solo es util con campos de tipo text, pero que hay de los campos de tipo radio y de tipo select? Ademas de esa forma la pagina de registro queda guardada en la carpeta historial con toda la indormacion que el usuario puso (p ej. register.php?nombre=marco&[email protected] .) y no es seguro. Se me ocurrio tal vez guardar los datos de los campos en variables de sesion. Tal vez crear una variable llamada datos_de_form y que los valores que quiero que se llenen automaticamente en los campos sean arrays en esa variable (datos_de_form[1], etc...), pero a decir verdad no se como hacerlo. Vi algo parecido en la pagina http://www.desarrolloweb.com/articul....php?manual=14, pero no lo entendi muy bien... haber si me hechan una mano.



Cita:
Iniciado por PabloP
no crees que seria mejor validar los campos del formulario que envia datos para que no envie hasta ques estén llenos los campos que deban ser obligatorios?, consulta por validación de campos de texto de formularios en el foro de javascript.
Gracias por la sugrenecia, tambien pense en eso, pero de todas maneras necesito saber como conservar los datos, ya que puede pasar por ejemplo que el id que quiere registrar el usuario ya esta en la bd y tiene que cambiarlo. eso no se podria hacer con javascript... salu2



Cita:
Iniciado por jam1138
Igual algo sencillo.. más explicativo que otra cosa: http://www.forosdelweb.com/showthread.php?t=258911
Igual sigue la duda... como hago con los input de tipo select y radio??



Espero una ayuda... gracias
  #6 (permalink)  
Antiguo 11/07/2005, 02:54
 
Fecha de Ingreso: noviembre-2003
Mensajes: 383
Antigüedad: 14 años
Puntos: 2
La mejor forma es usando sesiones.

Yo tuve el mismo problema y lo solvente con una sesión.

En mi sesión defino un array para guardar lo que el formulario envía por POST.

Código PHP:
$_SESSION['formulario'
En el formulario, para cada campo le defino como valor por defecto el que tenga la sesión.

Código PHP:
echo "<input type='text' name='nombre' value='".$_SESSION['formulario']['nombre']."'>"
La primera vez que entras en el formulario, como al array $_SESSION['formulario'] NO le has definido ningún valor, los valores por defecto de cada campo estará vacio.

Luego en la página que recibe el formulario asignas los valores al array ...

Código PHP:
$_SESSION['formulario']=$_POST
Ahora solo queda saber si todos los campos están cumplimentados, y en caso de que alguno no lo este, redireccionar a la página anterior manteniendo los campos...

Lógicamente el script que recibe el formulario SOLO conoce los campos que se le han enviado, y NO conoce los campos que habian en el formulario.
Por ello si en el formulario tienes 20 campos y solo seleccionar 12 el script recibirá 13 (los 12 campos seleccionados + el botón submit).

Por ello debería verificar campo a campo para saber si lo has recibido o no.

Código PHP:
if ( !isset($_POST['nombre]) )
   ... lo que sea
if ( !isset($_POST['
apellido]) )
   ... 
lo que sea 

Otra solución sería poner en el formulario un campo oculto cuyo valor por defecto sea el total de campos que debe recibir el script ...

Código PHP:
echo "<input type='hidden'  name='totalCampos' value='20'>"
... y en el script verificas si el total de campos recibidos es igual al valor de totalCampos.

Saludos.
  #7 (permalink)  
Antiguo 11/07/2005, 08:05
okram
Invitado
 
Mensajes: n/a
Puntos:
De acuerdo

Cita:
Iniciado por pellagofio
Lógicamente el script que recibe el formulario SOLO conoce los campos que se le han enviado, y NO conoce los campos que habian en el formulario.
Por ello si en el formulario tienes 20 campos y solo seleccionar 12 el script recibirá 13 (los 12 campos seleccionados + el botón submit).

Por ello debería verificar campo a campo para saber si lo has recibido o no.

Código PHP:
if ( !isset($_POST['nombre]) )
   ... lo que sea
if ( !isset($_POST['
apellido]) )
   ... 
lo que sea 
Gracias × la respuesta. Alcarame un poco la parte que cite d tu respuesta... ademas todavia me queda la duda de como hacer para los campos selecxt y radio y checkbox, que no usan el parametro value para determinar su valor por default, p. ej.
Código HTML:
<select name=loquesea>
<option value=1>1
<option value=2>2
<option value=3>3
<option value=4>4
</select>
<INPUT TYPE=RADIO NAME="sexo" VALUE="h" checked>Hombre
<INPUT TYPE=RADIO NAME="sexo" VALUE="m">Mujer
en esos casos, como podria conservar el valor q se envia?

salu2 y gracias
  #8 (permalink)  
Antiguo 11/07/2005, 09:16
 
Fecha de Ingreso: noviembre-2003
Mensajes: 383
Antigüedad: 14 años
Puntos: 2
... isset() es una función que verifica si una variable existe o no.

Como sabes, cuando envias un formulario, lo que realmente esta recibiendo el script es un array que puede ser $_POST o $_GET. En nuestro caso es $_POST.
En este array llegan los campos que se han seleccionado en el formulario MAS los campos tipo "hidden" (ocultos) MAS el botón submit.

Antonces, si tu sabes que en tu formulario tienes los siguientes campos...

Código HTML:
...
<input type="text" name="nombre">
<input type="text" name="apellido">
<input type="text" name="edad">
<input type="text" name="pais">
<input type="submit" value="siAcepto" name="aceptar">
<input type="reset" value="noAcepto" name="restablecer">
...
... al picar en el submir, y suponiendo que no hemos rellenado el campo pais, enviaras el siguiente array...

Código PHP:
$_POSTnombre=>Juanapellido=>Medinaedad=>34aceptar=>siAcepto 
... entonces en el script que recibe el array haces una verificación para saber que variables has recibido ...

Código PHP:
...
...
if ( !isset(
$_POST['pais']) )
   echo 
"Debes indicar un pais...";
...
... 


En cuanto a los valores por defecto te digo ...

<SELECT>
Código HTML:
...
...
<option value="España" selected>   //Este es el valor por defecto del select
<option value="Argentina">
...
...
<CHECKBOX>
...
...
Código HTML:
<INPUT TYPE=checkbox NAME="sexo" VALUE="h" checked>  
//Este radio esta seleccionado por defecto.  Se enviará sexo=on
// si le quitas el checked NO se envía nada.
  #9 (permalink)  
Antiguo 11/07/2005, 09:30
okram
Invitado
 
Mensajes: n/a
Puntos:
ya si todo bien hasta ahi, mi pregunta anterior iba a en caso de que el forumlario tenga errores y tenga que volver a la pag antyerior, entonces que tendria que poner para que los valores en los campos checkbox, radio y select se mantengan?

salu2
  #10 (permalink)  
Antiguo 21/07/2005, 17:45
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Para checkboxes y radios necesitas ponerle la palabra "checked" para que aparesca seleccionado:
Código HTML:
 <input type="radio" name="algo" value="esto" checked> 
Para listboxes la palabra "selected" a la opción indicada:
Código HTML:
<select name="listbox">
<option value="1">1</option>
<option value="2" selected>2</option>
<option value="3">3</option> 
Entonces, conbina eso con una condicinal y listo... Ejemplo sencillo:
Código PHP:
$default=5// dato variable que podrías obtener de cualquier lugar
echo "<select name=\"listbox\">";
for (
$i=1$i<=10$i++) {
      echo 
"<option value=\"$i\"";
      if(
$i==$default) echo " selected"// compara e imprime
      
echo ">$i</option>";

Otro:
Código PHP:
$check=true;
echo 
"<input type=\"checkbox\" name=\"algo\" value=\"1\"";
if(isset(
$check)) echo " checked"// comparamos, imprimimos
echo ">"
Solo vé lo que recibirás y con qué haz de compararlo... sencillo, cuestión de pensarle. Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #11 (permalink)  
Antiguo 21/07/2005, 18:20
okram
Invitado
 
Mensajes: n/a
Puntos:
bueno en realidad ya soluciones este tema de los select y checkbox... Gracias de todas maneras

Salu2
  #12 (permalink)  
Antiguo 21/07/2005, 23:40
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 12 años, 4 meses
Puntos: 3
hola!!!!!

te dire que yo use js, para solucionar ese problema......
eh hice.. una funcion llamada validar. que realiza todo el proceso...!!! campo por campo.
entonces. si un campo. no esta lleno o esta mal. simplemete. se detiene en ese punto. sale de su ciclo. y selecciona el campo que no esta llenado.

esto lo hago secuencialmente con for() y con algunos if. claro alado de los campos que van de rigo. puse una marca.


y en el boton submit. ,mando a llamar ala funcion con onclick="funcion"
y.... le kito de su propiedad de type="submit" a button.... y despues en otra parte.
solo mando a llamar a document.form.submit(); claro siempre y cuando todo este validado.!


no se uds. usuarios de este foro. kisiera saber = si estoy en lo correcto.
solo quisiera saber. sobre la proteccion de los datos, que tan seguro es hacer esto.-
  #13 (permalink)  
Antiguo 22/07/2005, 02:43
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Saludos vevni :

Primero debes entender bien qué es PHP y qué es JavaScript; verás que el primero trabaja del lado del servidor mientras el segundo lo hace en la propia maquina del usuario. Es por esa cuestión que para hacer una validación en PHP tendrás que enviar los datos lo cuál podría significar un gasto de recursos (enviar->regresar->enviar), esto no sucede con JavaScript porque la validación corre a cargo de la PC del visitante pero por lo mismo depende que dicha PC --el navegador-- soporte/tenga activado JavaScript... alguien puede simplemente desactivarlo y adios validación , esto no pasará con PHP (y cualquier lenguaje del lado del servidor) pués tu visitante no tiene manera de acceder a el servidor lo cuál te da absoluta seguridad...

En conclusión:
- PHP= Total seguridad pero un gasto de recursos mayor.
- JavaScript= Rapidéz, ahorro de recursos pero totalmente vulnerable/violable.

Espero haberte aclarado un poco. Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #14 (permalink)  
Antiguo 22/07/2005, 21:59
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 12 años, 4 meses
Puntos: 3
gracias.............
tienes razon, como soy nuevo no habia pensado en eso......!!!
vere que puedo hacer al respecto sobre la validacion, por medio de php, no se mucho, pero buscare en los foros.!
  #15 (permalink)  
Antiguo 26/07/2005, 01:53
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 13 años, 9 meses
Puntos: 0
me he perdido..
pq el archivo register.php usa el $_GET y no $_POST ¿?
  #16 (permalink)  
Antiguo 26/07/2005, 03:17
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Porque al comprobar y en caso de error (campos vacios) redirecciona con header(), y pasa el error por URL... debes usar $_GET. No usa $_POST porque no viene de un formulario... podrías hayar la manera de usar $_POST pero, en ese caso mejor usar sesiones... Te aconsejo sigas el mensaje que eso, me parece, ya se mencionó... y que pruebes el código sin miedo...

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #17 (permalink)  
Antiguo 26/07/2005, 12:46
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 13 años, 9 meses
Puntos: 0
si despues trastee un rato por ello y me di cuenta de lo estupida de mi pregunta :(
ahora faltaria probar con sesiones......
no hay limite para variables de sesion no? :p
  #18 (permalink)  
Antiguo 26/07/2005, 12:52
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 2 meses
Puntos: 5
No, puedes crear cuantas quieras.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #19 (permalink)  
Antiguo 30/07/2005, 18:26
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 13 años, 9 meses
Puntos: 0
una duda.......

he visto un ejemplo que tiene esto en el html

<form action="resultados.php" method="post">
Elige Tipo de Búsqueda:<br>
<select name="tipobusqueda">
<option value="autor">Autor
<option value="titulo">Título
<option value="isbn">ISBN
</select>
<br>
Escribe Término Búsqueda:<br>
<input name="terminobusqueda" type=text>
<br>
<input type=submit value="Buscar">
</form>


y en
resultados.php tiene

<?
trim ($terminobusqueda);
if (!$tipobusqueda || !$terminobusqueda)
{
echo "No has introducido los detalles de la busqueda. Por favor vuelve e inténtalo de nuevo.";
exit;
}

no es necesario poner $_POST para recoger la variables del formulario?
  #20 (permalink)  
Antiguo 30/07/2005, 19:31
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 2 meses
Puntos: 5
Si es necesario, yo diría que obligatorio. Ese script esta hecho para ser ejecutado en entornos donde register_globals este en ON. Este parámetro de configuración debería permanecer en OFF por razones de seguridad, de esta forma se garantiza que las variables que usamos en nuestro scripts vienen de un medio que nosotros hayamos especificado, bien sea POST, GET, COOKIE, SESSION, ENV, SERVER, etc.

No te recomiendo en absoluto manejar tus scripts sin usar los arrays superglobales. Siempre que vayas a usar variables que vengan por POST usa su respectivo array superglobal, lo mismo para GET y todos los demás casos.

Tienes más información al respecto en: http://www.php.net/manual/es/languag...predefined.php
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #21 (permalink)  
Antiguo 31/07/2005, 05:12
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Y más información en las FAQ también: http://www.forosdelweb.com/showthrea...989#post238989

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #22 (permalink)  
Antiguo 31/07/2005, 10:32
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 13 años, 9 meses
Puntos: 0
muchas gracias!
  #23 (permalink)  
Antiguo 31/07/2005, 17:55
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 12 años, 4 meses
Puntos: 3
solo da busqueda en el foro de php.
valida, validar formularios. y ya.!!!!
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:44.