Foros del Web » Programando para Internet » PHP »

Problema con formulario (envio de datos)

Estas en el tema de Problema con formulario (envio de datos) en el foro de PHP en Foros del Web. Buenas He estado trabajando con un formulario que recoge datos por medio de "pasos" usando el GET. Estoy trabajando de la siguiente manera: Código PHP: ...
  #1 (permalink)  
Antiguo 25/06/2011, 19:54
Avatar de Firez  
Fecha de Ingreso: junio-2011
Mensajes: 12
Antigüedad: 12 años, 10 meses
Puntos: 1
Problema con formulario (envio de datos)

Buenas

He estado trabajando con un formulario que recoge datos por medio de "pasos" usando el GET.

Estoy trabajando de la siguiente manera:
Código PHP:
$accion = @$_GET["accion"];

switch (
$accion) {
case 
"ver":
      
ver($id);
      break;
case 
"insertar":
      
insertar();
      break; 
Luego tengo la siguiente funcion que lo muestra en el caso de "index.php?accion=ver"

Código PHP:
function ver()
{
  global 
$_POST;
  global 
$conn;
  
$paso = @$_GET["paso"];
  
//etc etc
  
if (!isset($paso)) {
           
// aqui recojo 2 datos con 1 formulario de metodo GET que postea en index.php?accion=ver&dato1=X&dato2=X&paso=1
  
}
    else {
//este else se muestra si el paso=1, osea si ya recogio esos datos que son esenciales y muestra un formulario basado en esos datos

este es el formulario que muestra en el else anterior
Código HTML:
<form enctype="multipart/form-data" action="index.php?accion=insertar" method="post">
--- todos los datos del formulario
<input type="hidden" name="valido" value="1">
<input type="submit" name="action" value="Enviar !"></form> 

Y luego, la funcion para insertar en SQL es:
Código PHP:
function insertar()
{
  global 
$conn;
  global 
$_POST;
  
$valido $_POST["valido"];
  
if (!isset(
$valido)) {
 echo 
"no se puede accesar directamente";
}
else
{
  
$sql "insert into `............. //toda la consulta aqui
   //envia el email aqui etc
  echo "
Listodatos agregados";
}

donde uso, $valido que viene dado por un dato hidden en el formulario para evitar el acceso a la pagina index.php?accion=insertar directamente.

Bueno hasta ahora todo me funciona correctamente. Mi problema es el siguiente cuando una persona llena el formulario correctamente y va hacia al "insertar", lo hace correctamente y le muestra el "listo, datos agregados", pero si la persona refresca la pagina ejecuta la consulta otra vez y llena la base de datos y envia el email de confirmacion una y otra vez por todas las veces que refresque la pagina, ya que la consulta usa todos los POST

Como podria evitar esto? Y que la consulta sea ejecutada una sola vez. Y en caso de que la persona refresque la pagina, darle un mensaje de "tus datos ya fueron enviados".

Otra pregunta, consideran ustedes que el metodo que estoy usando para recolectar datos es seguro?


Soy bastante nueva en esto del php y no tengo idea de lo que ando haciendo :D seguramente me he dejado unos errores gravisimos..

PS: No pongo los codigos completos por que tengo un desastre en el codigo sobretodo en el formulario pero espero que sepan entender la idea de como funciona
  #2 (permalink)  
Antiguo 25/06/2011, 20:22
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas - Venezuela
Mensajes: 52
Antigüedad: 13 años, 1 mes
Puntos: 6
Respuesta: Problema con formulario (envio de datos)

Bueno.. la solución, es facil...

Create otro php a donde te redirija cuando la consulta sea exitosa:

Código PHP:
Ver original
  1. if (!isset($valido)) {
  2.  echo "no se puede accesar directamente";
  3. }
  4. else
  5. {
  6.   $sql = "insert into `............. //toda la consulta aqui
  7.   //envia el email aqui etc
  8. header ("location: exito.php");
  9. }


y en exito.php tengas:

Código PHP:
Ver original
  1. if (!isset($valido)) {
  2.  echo "no se puede accesar directamente";
  3. }
  4. else
  5. {
  6.  echo "Listo, datos agregados";  
  7. echo "<a href=\"dondesea.php\">Haga clic aqui para continuar</a>";
  8. }

Como la petición se hizo en otra pagina, y la rediriges a una nueva, cuando refrescas no se ejecuta el insert nuevamente.


Te recomiendo que te eches una hojeada con JQuery.... trabajar con AJAX te facilita la vida aunque al principio sea algo trabajoso.
__________________
Deja un pelo de karma si mi comentario fue de ayuda!!! ;)
  #3 (permalink)  
Antiguo 25/06/2011, 20:31
Avatar de Firez  
Fecha de Ingreso: junio-2011
Mensajes: 12
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Problema con formulario (envio de datos)

Gracias por la respuesta rapida :P me encanta este foro

Habia pensado esta solucion pero no lo hize, ya que necesito mostrar en lugar de "listo, datos agregados", un resumen total de todos los datos y una "version imprimible" (aun no me complico con eso)

Y como el script es para un censo, son muchisimos datos que puedo mostrar de inmediato al finalizar sin necesidad de enviarlos a otra pagina, o acaso hay una manera facil de enviar todas las variables a "exito.php"?
  #4 (permalink)  
Antiguo 26/06/2011, 13:34
Avatar de Firez  
Fecha de Ingreso: junio-2011
Mensajes: 12
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Problema con formulario (envio de datos)

Otra pregunta, que sistema ya hecho simple de usuarios me recomendarian?

Estuve mirando el usercake pero lo veo bastante robusto para lo que necesito :P
  #5 (permalink)  
Antiguo 26/06/2011, 13:43
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: Problema con formulario (envio de datos)

Cita:
Iniciado por Firez Ver Mensaje
Otra pregunta, que sistema ya hecho simple de usuarios me recomendarian?

Estuve mirando el usercake pero lo veo bastante robusto para lo que necesito :P
Hola que tal en el foro hay muy buenos ejemplos de sistemas de usuarios, te dejo estos saludos

Usuarios
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #6 (permalink)  
Antiguo 26/06/2011, 23:11
Avatar de Firez  
Fecha de Ingreso: junio-2011
Mensajes: 12
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Problema con formulario (envio de datos)

Cita:
Iniciado por luis_green Ver Mensaje
Bueno.. la solución, es facil...

Create otro php a donde te redirija cuando la consulta sea exitosa:

Código PHP:
Ver original
  1. if (!isset($valido)) {
  2.  echo "no se puede accesar directamente";
  3. }
  4. else
  5. {
  6.   $sql = "insert into `............. //toda la consulta aqui
  7.   //envia el email aqui etc
  8. header ("location: exito.php");
  9. }


y en exito.php tengas:

Código PHP:
Ver original
  1. if (!isset($valido)) {
  2.  echo "no se puede accesar directamente";
  3. }
  4. else
  5. {
  6.  echo "Listo, datos agregados";  
  7. echo "<a href=\"dondesea.php\">Haga clic aqui para continuar</a>";
  8. }

Como la petición se hizo en otra pagina, y la rediriges a una nueva, cuando refrescas no se ejecuta el insert nuevamente.


Te recomiendo que te eches una hojeada con JQuery.... trabajar con AJAX te facilita la vida aunque al principio sea algo trabajoso.
hmm bueno con este metodo al parecer funciona para evitar que la gente actualize y se ejecute y me funciona bien. les hago redirect hacia la pagina donde se les da el resumen, pero el problema surge de nuevo

La persona puede hacer click en "atras" en su navegador y volvera a ejecutar la consulta y puede embasurar la bd sin control.

Cita:
Iniciado por skiper0125 Ver Mensaje
Hola que tal en el foro hay muy buenos ejemplos de sistemas de usuarios, te dejo estos saludos

[URL="http://www.forosdelweb.com/f18/aporte-sistema-registro-reconocimiento-usuario-aporte-561417/"]Usuarios[/URL]
Gracias, me decidi por usar el cake y adaptarlo a mi sistema. Me parecio mas seguro.

Etiquetas: envio, formulario
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:26.