Foros del Web » Programando para Internet » PHP »

Problema con formulario y envío de datos

Estas en el tema de Problema con formulario y envío de datos en el foro de PHP en Foros del Web. Resulta que tengo un formulario del tipo: <form method="post" name="añade" onSubmit = "return validar(this)" action="registro.php"> .... .... <input type="submit" name="Preview" value="Preview"> </form> y el script ...
  #1 (permalink)  
Antiguo 20/11/2004, 17:22
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
formulario y paso de variables ¿cómo?

Resulta que tengo un formulario del tipo:
<form method="post" name="añade" onSubmit = "return validar(this)" action="registro.php">
....
....
<input type="submit" name="Preview" value="Preview">
</form>

y el script registro.php:

Código:
if(isset($_POST['Submit'])) 
{
  if(isset($_POST['Submit'])=='Submit'){ 
  /* añadir a BD */
  }
  elseif(isset($_POST['Submit'])=='Preview')
  {
  # se recogen los datos del formulario y se muestran
  }
  else
  {
    header ("Location: form.php"); 
  }
}
?>
El problema es que no me entra en los Ifs al enviar el formulario. He probado con Submit y Preview en el formulario pero nada, algo falla, a ver si sabéis qué.

Gracias y saludoss.

Última edición por apañero; 21/11/2004 a las 17:31
  #2 (permalink)  
Antiguo 20/11/2004, 20:19
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Lo que pasa es que debes llamar a las variables por su nombre (los nombres que les diste en el campo "name")... "Submit" no es un nombre de variable válido en este caso... para referirte a tu botón de submit debes hacerlo por su atributo "name"...
O sea que donde pones $_POST['Submit'] debes poner $_POST['Preview']....

Saludos
  #3 (permalink)  
Antiguo 21/11/2004, 09:06
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
Ok ya lo entiendo, name es el nombre de la variable y value su valor.

Una duda sobre lo mismo. Ahora tengo un sólo script con opciones del tipo:
if ($_GET['submit'] == "Add"){
....
....
}

y cosas del estilo, para que con un solo script pueda tener varias opciones. Lo que no sé es cómo puedo pasar unas variables de una llamada a otra dentro del mismo script, o sea de un if a otro.
Lo que me pasa exactamente es que ese script recibe datos de un formulario y a través de un if ($_GET['submit'] == "Preview") previsualiza los datos mostrando a su vez otro formulario con los botones ATRAS (history.go(-1)) y AÑADIR. Si pincha en AÑADIR se envía ese nuevo formulario (se rellama el script) y lo recibe if ($_GET['submit'] == "Add") pero ya he perdido los valores que me pasaba el formulario. Y no quiero eso.

Creo que hay paso de variables por URL pero es que son muchas variables y bastante texto lo que se envía desde el formulario...

A ver qué me recomendáis. Muchas gracias.

Última edición por apañero; 21/11/2004 a las 10:15
  #4 (permalink)  
Antiguo 22/11/2004, 01:16
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Lo mejor es que cuando hagas el preview, muestres el preview propiamente dicho y debajo el mismo formulario que estaba llenando el usuario con lo datos que tenía. (Los datos los recoges de las mismas variables con las que haces el preview). Y vuelves a dar las opciones de "preview" y "add". De esa manera cuando haga "add" se enviará el formulario lleno. Esa es la primera opción.

Otra opción es que re-construyas el formulario dinámicamente con puro campo "hidden". Algo como:
Código PHP:
echo "<form action=\"pagina.php?submit=add\" method=\"POST\">";
foreach(
$_POST as $clave => $valor){
 echo 
"<input type\"hidden\" name=\"$clave\" value=\"$valor\" />";
}
// Luego ya pones el botón de "add"
echo "<input type=\"submit\" value=\"add\">"
De esa manera está creando un segundo formulario que tendrá las variables y valores del primero. Y aí cuando hagas "add" se enviarán sin problemas.

La tercera opción es que guardes esas variables del formulario en alguna parte. Por ejemplo en variables de sesión (o en cookies) y luego para enviarlas, al hacer "add" las lees de ahí.

Saludos

Última edición por jpinedo; 22/11/2004 a las 09:03
  #5 (permalink)  
Antiguo 22/11/2004, 04:49
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
Ajá la primera opción la entiendo, es repetir los datos pero dentro del mismo formulario, un poco pesado de escribir y para el usuario ya que se muestra la previsualización en sí y luego el pedazo formulario abajo.

La segunda opción no la acabo de entender muy bien, ¿¿el código que me pones es el del primer formulario?? Dices que le añada ese campo oculto, lo añado y tenemos un campo más en el formulario primero, ahora se pulsa Previsualizar, se recogen todas las variables (¿esa oculta la recojo también?) y luego previsualiza junto a un nuevo formulario del tipo:

echo "<form action='$PHP_SELF?submit=Add' method='post'>";
echo "<input type='submit' value='Añadir'>";
echo "<input type='button' value='Modificar' onClick='javascript:history.go(-1)'>";
echo "</form>";

Con eso valdría para lo que me comentas del segundo caso?? Funcionaría? No lo acabo de entender bien, si es cómo otra variable con todo el contenido del formulario, cómo pasa de uno a otro.

Y la tercera opción me la imaginaba, pero cuál me recomiendas usar??Pros y Contras??

Muchas gracias por todo.
  #6 (permalink)  
Antiguo 22/11/2004, 09:09
 
Fecha de Ingreso: noviembre-2004
Mensajes: 2
Antigüedad: 13 años, 1 mes
Puntos: 0
hola apañero.
si he entendido bien todo tengo por el momento el mismo problema que tu. Tengo q modificar el contenido de una base de datos de usuarios y como no se si se puede acceder al contenido de la base sin tener q enviar los datos lo que he hecho es enviarme la informacion al propio formulario q la envia (Preview). El problema estaba en q no sabia como hacer q mi formulario enviara la informacion a una u otra página dependiendo del boton pulsado. Mire el primer codigo q pusiste, el de los Ifs pero vamos q yo llevo tres dias en esto y como q no me entero ni del nodo. Pero ayer mirando vi q los formularios se podian esconder cambiando "text" por "hidden" y pense, pa q coño servira eso!
Y esta mañana se me encendio la bombilla y me dije joder si por cada formulario solo hay un boton q envia la información, lq tengo q hacer es crear otro formulario q también la reciba y que pueda enviarla a la otra página la cual modificara el contenido de mi base de datos.
Pues bien, creo q eso es lo que jpinedo te daba como segunda opción, solo tiene un problema y es q antes de poder enviar los datos tienes hacer un preview ya q sino el segundo formulario no tiene en sus variables los cambios que el usuario haya podido realizar en los campos!Habría q avisar al usuario de q primero previsualizara antes de enviar.

Espero q lo poco q se te sirva de algo. Yo lo voy a probar y seguire buscando otras soluciones
  #7 (permalink)  
Antiguo 22/11/2004, 09:16
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
En realidad la primera opción puede no ser tan pesada... si no, mira en los foros cuando estás escribiendo un mensaje y haces "previsualizar", ves el mensaje como quedará y el forumlario que estás llenando.

Ahora, respecto a la segunda alternativa...
El formulario que te pongo ahí es el SEGUNDO. Lo que va a hacer ese bucle foreach, es volver a crear TODOS los campos que venían del primero, pero como tipo "hidden". O sea, es como la primera opción... sólo que el usuario no lo ve... como ves, no es que haya una variable que contenga todo el formulario (aunque en realidad todo el formulario está en el array $_POST).

La tercera parece que sí la entiendes bien.

-----------------------------------------
Entre la primera y la segunda no hay mayor diferencia (en cuanto a rendimiento) porque lo que en la primera escribes en un campo visible, en la segunda lo haces en uno oculto.

Yo utilizaría la primera porque le doy al usuario la opción de corregir ahí mismo sin tener que hacer más clics.

Y si es así, creo que en este caso no habría por qué utilizar sesiones... salvo que no quieras mostrar el form y el preview juntos... entonces creo que hacer un "atrás" no es del todo confiable y sí deberías guardar tus variables en una sessión. Cada vez que cargas el form (el primero) verificas si hay datos en la sesión y los escribes en los campos... si no, muestras los campos vacíos.... es lo mismo que ya parece hacer automáticamente con el botón de "atrás"... pero es posible que no funcione siempre como esperas.

Un saludo
  #8 (permalink)  
Antiguo 22/11/2004, 09:20
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
ssccima:
No es necesario hacer el preview para enviar los datos... al contrario, si no haces preview los datos se envían directamente al script que agrega el registro.... y no hay problema!

Saludos
  #9 (permalink)  
Antiguo 22/11/2004, 15:02
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
perfecto jpinedo, me queda todo mucho más claro, voy a probar la primera porque como dices tiene la ventaja de que puedes modificar sin volver atrás.

Última edición por apañero; 23/11/2004 a las 19:43
  #10 (permalink)  
Antiguo 23/11/2004, 18:45
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
Me ha surgido otro problema al volver a mostrar el primer formulario pero relleno con los datos que se han mandado la primera vez. Resulta que el primer formulario tiene varios campos de selección, tipo:

<select size=\"1\" name=\"Dia\">
<option value=\"01\">01</option>
<option value=\"02\">02</option>
..
..
<option value=\"31\">31</option>

que no sé cómo hacer para que en la previsualización, al mostrar el primer formulario ahora con los datos que ha enviado el usuario, aparezcan estos campos de selección seleccionados con lo que había elegido el usuario.

además tengo un campo textarea del tipo:
<textarea name="Comentario" rows=19 cols=50></textarea>
y un campo archivo del tipo:
<input type="hidden" name="MAX_FILE_SIZE" value="25000">
<input type="file" name="imgfile">

que no me muestran el contenido de las variables de su nombre, como $imgfile y $Comentario al hacer en el segundo formulario un value:

<textarea name=\"Comentario\" value=\"$Comentario\" rows=19 cols=50></textarea>
<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"25000\">
<input type=\"file\" name=\"imgfile\" value=\"$imgfile\">


Así que no sé cómo mostrar estos tipos de campos con los valores que el usuario había metido al principio. A ver si podeís decirme cómo hacerlo.

venga graciass y saludos.

Última edición por apañero; 23/11/2004 a las 19:50
  #11 (permalink)  
Antiguo 24/11/2004, 05:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Para predefinir un valor inicial de un elemento de tu formulario tendras que usar sus respectivos:

Un Textarea no tiene "value" .. se indica en:
Código PHP:
<textarea name="Comentario" rows=19 cols=50><? echo $Comentario ?></textarea>
En un campo "file" no puedes predefinir su valor inicial .. a lo sumo hacer un "echo" en otro sitio a tu $imgfile .. no tiene propiedad "value".

Los "<select>" de HTML tienen la propiedad "selected" para indicar que opción va a quedar pre-establecida al cargar tu página.

No sé si esos valores los tienes (los "<option>") fijos en el código HTML o los genéras dinámicamente desde otro sitio (BD, arrays, bucles ..) El caso es que deberías generar eso dinámiecamente. Ya sea teniendo esos valores en un array o bien usando un bucle (for() ...) para que puedas hacer un condicional tipo:

Código PHP:
bucle(){
  if (
$valor_anterior == $valor_que_se_esta_produciendo){
       echo 
"<option value=\"".$valor_que_se_esta_produciendo."\" selected >".valor_que_se_esta_produciendo."</option>\n";
  } else {
       echo 
"<option value=\"".$valor_que_se_esta_produciendo."\" >".valor_que_se_esta_produciendo."</option>\n";

  }

Un saludo,

Última edición por Cluster; 24/11/2004 a las 05:43
  #12 (permalink)  
Antiguo 25/11/2004, 20:10
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 13 años, 7 meses
Puntos: 0
Ok perfecto Cluster, sólo me falta en mi formulario de envío de datos lo de autocompletar el campo FILE, porque cuando le das a Previsualizar, sale la previsualización más el formulario original autocompletado con la opción de añadir (a bd) o modificar (volver a previsualizar) pero resulta que el único campo vacío es el de FILE y no mola, porque necesito que el usuario tenga qué archivo eligió, y además necesito algo para saber que ha introducido un archivo antes de mandarse, ya que con javascript y formulario.imgfile.value.length no lo coge, es el único campo que no coge, que no valida digamos.

A ver si podeís decirme cómo podría chequear que se meten caracteres en ese campo FILE y además que se autocomplete ese campo en el formulario de previsualizacion.

gracias por todo.
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 07:47.