Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/06/2011, 19:54
Avatar de Firez
Firez
 
Fecha de Ingreso: junio-2011
Mensajes: 12
Antigüedad: 13 años, 8 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