Comunidad de diseño web y desarrollo en internet online

Problema $_SESSION y almacenar formulario en base de datos

Citar            
MensajeEscrito el 05 May 2011 10:54 am
Hola muy buenas a todos, soy un poco nuevo progrando php y tengo un par de dudas en mi código, voy a intenter explicarlas lo mejor posible.

Utilizo $_SESSION para poder utilizar algunas variables de un código en otro, mi pregunta es ¿existe alguna forma de que cada vez que inicio mi código se reinicien las variables? Es que necesito que cada vez que se abra dicho código las variables esten a 0 o en su valor inicial.¿Hay alguna forma de hacerlo?

Pongo una parte del código1.php

Código PHP :

<?php 
session_start(); 
//unset($_SESSION); 
$id = $_GET["id"];
//Para recibir id, necesito que vaya avanzando, id lo incremento más abajo
 if ($id=="") $id=1; 
//al final del código le paso la variable id y cont a código2,cuando pulsamos enviar le
//muestra el formulario relleno 
//y volvería a este código, con diferente formulario, en este caso sería con //id2,posteriormente
 //vulve a mostrarle el formulario relleno (codigo2) y vuelve a código1 con id 3, así hasta los //id que haya en la base de datos.
 $ide = $_SESSION["ident"];//recibo las variables de código2 
$cont = $_SESSION["contador"]; 
if($ide!=0) //realizo este control, para ver si es la primera vez que se inicia el código
 { 
$id=$ide+1; 
} 
else
 {
 $id = $_GET["id"];
 if ($id=="") $id=1;
 } 


He utilizado session_start(); pero el problema es que si vuelvo a iniciar el código, continuan las variables con el valor anterior, y lo que quiero es que cada vez que se inicie se ponga a 0 o en su valor inical.

Lo que hago es rellenar un formulario, y cuándo pulsa el botón enviar,que se almacene en la base de datos, y luego pase a mostrarle la solución del formulario según el id correspondiente (en código2). Aquí me aparece otro problema porque al darle al boton quiero que me haga 2 acciones, que me vaya al siguiente código y que me lo almacene en la base de datos, pero me lo almacena al volver del código2.php al código1.php, y al hacerlo así el problema que hay es que me almacena el formulario sin rellenar, os pongo el control que tengo puesto para que veais como lo hago:

Código PHP :

if(isset($_POST['submit'])){ 
$ssql = "insert into formulario (prueba) values('". $_POST["a1"]."'); 


¿Cómo puedo poner 2 acciones en un botón?

Muchas gracias de antemano.
Un saludo.

Por ark7

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 May 2011 03:13 pm
No entiendo bien cuál es el problema, me parece que es más simple de lo que has explicado.

Pero, respondiendo tu pregunta concreta, lo que debes hacer es una vez que has usado las variables $_SESSION es destruirlas con unset($_SESSION['variable_ya_usada']);

Creo que eso es lo que estás preguntando.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 05 May 2011 03:48 pm
Muchas gracias por contestar,ya utilice unset($_SESSION['variable_ya_usada']); pero creo que no me vale.
Mi problema es el siguiente:
El usuario rellena un sudoku(codigo1.php), luego le muestro la solución del sudoku, por eso le paso el "id" para que me muestre la solución del "id" correspondiente,esto lo hago en código2.php, y luego pulsa el boton siguiente sudoku, y vuelve al codigo1.php y la variable id lleva valor 2, asi sucesivamente.
El problema es que si inicio el código de nuevo, sin cerrar la ventana del navegador, el valor de las variables no se va.
Y lo que quiero es que se quede hasta que finalice, y luego se reinicien a sus valores.

Y lo que pasa cuando utilizo unset($_SESSION['variable_ya_usada']); es que como va de un código a otro varias veces, se les va el valor a las variables antes de la cuenta.
Muchas gracias.
Un saludo.

Por ark7

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 May 2011 03:54 pm
Si tu problema es que el visitante te presiona F5 (hace que la página se recargue), entonces controla el referer de la página en cuestión ($_SERVER['HTTP_REFERER']). Si no tiene referer, es que ha recargado la página.

Sigo sin comprender bien cuál es el problema.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 05 May 2011 04:47 pm
Lo siento, es que es compllicado de explicar... :D

Estoy intentando hacer un sudoku, los pasos son:

1) Muestra una plantilla de sudoku de la base de datos.

2) El usuario resuelve la plantilla y pulsa GUARDAR
Cuando el usuario le de a guardar quiero que me lo guarde en la base de datos y luego me muestre la corrección del sudoku, para ello le paso el id, para que me muestre la correción del sudoku correspondiente. Uno de los problemas es que no puedo ponerle dos acciones a un mismo boton y lo que hace es irse a código2.php y me muestra la correción.

3) Comprueba los errores y muestra la solución en codigo2.php
En código2.php el usuario solo ve la correción y pulsa el boton realizar el siguiente sudoku, y vuelve a codigo1.php, por esto no me sirve unset($_SESSION['variable_ya_usada']);

4) Carga un nuevo sudoku y repite a partir del punto 1.
Esto me lo hace bien, pero si inicio el código de nuevo, las variables tiene los valores anteriores, y quiero que se ponga a sus valores iniciales.

No sé si ahora quedará un poco más claro.

Con lo cual los problemas que tengo es que me realice 2 acciones al pulsar el boton guardar y que al iniciar el código de nuevo, las variables tiene los valores anteriores, y quiero que se ponga a sus valores iniciales.

Muchas gracias!!!

Un saludo.

Por ark7

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 May 2011 08:50 pm
¿Podrías poner la URL de la página que estás haciendo?

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 05 May 2011 09:14 pm
La estoy haciendo en local...sorry

Por ark7

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 May 2011 02:20 pm
segun lo que entiendo es esto tu quieres que al pulsar el boton del formulario vaya a codigo1.php y de ahi a codigo2.php donde le muestras el resultado,
en codigo1php tienes la conexion a la db y en codigo2.php muestras la respuesta,
de donde sacas los datos para la respuesta o resultado del sudoku? del mismo form o la extraes de la DB?
si la sacas de la DB lo que puedes hacer una ves que hagas el proceso de insercion y demas redireccionar a codigo2.php
te dejo una funcion que utlizo para redireccionar

Código PHP :

function redirect($url,$seconds = 0)
   {
      $url_php = strtr($url,array("&amp;" => "&"));
      if($seconds < 1 && !headers_sent())
      {
         header ("Location: $url_php");
      }
         $secondsJS = $seconds * 1000;
      $JS = <<<JS
         var time = null;
         function move(){
            location.href="$url";
            window.location="$url";
         }
         setTimeout("move()","$secondsJS")
JS;
      if(class_exists('mySkyn'))
      {
         mySkyn::addJs($JS);
      }
      else
      {
         die ('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         <title>redireccionando</title>
         <meta http-equiv="Refresh" content="'.$seconds.';url=' . $url . '">
         <script type="text/javascript">
   //<![CDATA[
   $JS
   //]]>
         </script>
      </head>
      <body onload="timer=setTimeout(\'move()\','.$secondsJS.')">
         <a href="' . $url . '">redirect</a>
      </body>
   </html>');
      }
   }

una vez que hagas el proceso de insercion y comprobacion deberias lo redireccionas a la pagina 2

Código PHP :

if(isset($_POST['submit'])){  
/**
* todo el codigo de insercion 
**/
redirect('codigo2.php',2);
}

pero dejame aconsejarte de que la forma en la que estas trabajando no esta muy estructurada lo que estas haciendo podrias hacerlo en una misma pagina con condicionales(if else), require, file_get_contents,switch, y funciones utiles pero eso depende de vos

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 07 May 2011 12:10 pm
Muchas gracias por su ayuda y por su consejo, ya he cambiado la estructura del código y lo hago todo en el mismo código.
Un saludo.

Por ark7

3 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.