Foros del Web » Programando para Internet » PHP »

sesiones y formularios

Estas en el tema de sesiones y formularios en el foro de PHP en Foros del Web. que tal, estoy trabajando en una serie de formularios (uno lleva a otro y asi sucesivamente) y a la vez manejo sesiones, el problema es ...
  #1 (permalink)  
Antiguo 25/02/2004, 10:39
 
Fecha de Ingreso: agosto-2002
Mensajes: 121
Antigüedad: 21 años, 8 meses
Puntos: 0
sesiones y formularios

que tal, estoy trabajando en una serie de formularios (uno lleva a otro y asi sucesivamente) y a la vez manejo sesiones, el problema es que por ejemplo, cuando le doy "submit" a un formulario obviamente me lleva a un script donde valido los campos mediante php y no javascript, pero si le doy "regresar" en el boton del explorer o cualquier navegador para corregir algun dato o completar algun campo me sale un mensaje diciendo que la pagina a caducado, que le de "refrescar pagina", le doy, pero me pierde TODOS los datos que ya habia introducido anteriormente, espero alguien me pueda ayudar
Saludos
  #2 (permalink)  
Antiguo 25/02/2004, 11:33
Avatar de maralbust@netsc  
Fecha de Ingreso: julio-2003
Ubicación: Santiago
Mensajes: 242
Antigüedad: 20 años, 9 meses
Puntos: 0
un poco mas abajo hay un tema mio que dice formularios leelo, ya que es sobre lo mismo y ya lleva algun tiempo.

Te puede servir y si al final del tuyo lo envias por correo me puede decir como lo haces por que a mi no me funca



Saludos
__________________
"La imaginacion es el limite"
bee-freaks
  #3 (permalink)  
Antiguo 25/02/2004, 13:01
 
Fecha de Ingreso: agosto-2002
Mensajes: 121
Antigüedad: 21 años, 8 meses
Puntos: 0
que tal maralbust@netsc, ya revise tu mensaje pero no es exactamente lo que me esta pasando, es decir, en mi formulario ya estoy empezando una sesion, pero despues de darle submit y al intentar regresar al mismo formulario, me dice que la pagina ha caducado y que es necesario "refresacarla" (con F5) lo doy eso pero me pierde los datos que ya habia introducido.. HELP !!!!!

  #4 (permalink)  
Antiguo 25/02/2004, 14:20
Avatar de maralbust@netsc  
Fecha de Ingreso: julio-2003
Ubicación: Santiago
Mensajes: 242
Antigüedad: 20 años, 9 meses
Puntos: 0
lo que pasa es que a la mia yo le puedo dar f5 y no pierdo datos, puede ser que estas destruyendo la sesion?????
por que no publicas el codigo y lo vemos?????

SALUDOS
__________________
"La imaginacion es el limite"
bee-freaks
  #5 (permalink)  
Antiguo 25/02/2004, 14:36
 
Fecha de Ingreso: agosto-2002
Mensajes: 121
Antigüedad: 21 años, 8 meses
Puntos: 0
ahi va el codigo:
//al inicio del scipt
if (!isset($name))
session_register('name');
if (!isset($folio))
session_register('folio');

$resultado=mysql_query($sql);
$array=mysql_fetch_array($resultado);
$name=$array['nombre']." ".$array['appaterno']." ".$array['apmaterno'];
$folio=$array['cveinstructor'];

aqui sigue el formulario......
  #6 (permalink)  
Antiguo 26/02/2004, 11:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Consejo:

NOOOOOO uses las variables de sesioens como globales!!!! usa los arrays asociados $_SESSION (PHP 4.1.0 en adelante) o en su defecto $HTTP_SESSION_VARS (para versiones inferiores de PHP).


Y sobre todo .. te faltó:
session_start() antes de tus session_register() (uno sólo por script que use sesiones) para indicarle a PHP que inicie el uso de sesiones y que .. justamente esas variables "globales" como las usas sepa que tiene que mirar también en una variable de sesión si está definida ..

Te recomiendo con urgencia leer:
www.php.net/session por tu seguridad.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 27/02/2004, 14:10
 
Fecha de Ingreso: agosto-2002
Mensajes: 121
Antigüedad: 21 años, 8 meses
Puntos: 0
ok cluster ya toy leyendo sobre sesiones jijiji, pero hice esta otra prueba:

(codigo de prueba1.php)

<?
session_start();
?>
<FORM action="prueba2.php" method="POST">
<br>Nombre <INPUT TYPE="TEXT" name="nombre">
<br>apellido <INPUT TYPE="TEXT" name="ap">
<br>Sexo <SELECT name="sexo">
<OPTION value="Masculino">Masculino</OPTION>
<OPTION value="Femenino">Femenino</OPTION>
</SELECT>
<br><br><INPUT TYPE="SUBMIT" value="Probar">
</FORM>


codigo de prueba2.php
<?
echo $nombre.$ap.$sexo;
?>


Asi como esta prueba1.php pongo los datos en los campos y le doy "probar" entonces prueba2.php me imprime los valores que puse, le doy regresar una pagina y los campos estan en blanco, ya no esta lo que puse anteriomente, en cambio si le quito el inicio de sesion a prueba1.php, meto datos y le doy "probar", prueba2.php me imprime los datos que puse y al regresar a prueba1.php ahi estan los datos que puse antes, no se pierden... ahi que pasa?
  #8 (permalink)  
Antiguo 27/02/2004, 15:36
Avatar de maralbust@netsc  
Fecha de Ingreso: julio-2003
Ubicación: Santiago
Mensajes: 242
Antigüedad: 20 años, 9 meses
Puntos: 0
volvi, primero segun veo y me han enseñado, el session_start();
, no va en prueba1.php, si no (en tu caso) prueba2.php.

Ahora como hacer para que no pierdas los campos :S ni idea

SALUDOS
__________________
"La imaginacion es el limite"
bee-freaks
  #9 (permalink)  
Antiguo 01/03/2004, 08:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Tienes que usar los campos "value" para determinar el valor anterior que tuvieran que es el que debes guardarte en la sesión bajo una variable ..

en tu formulario:

Código PHP:
<br>Nombre <INPUT TYPE="TEXT" name="nombre" value="<? echo $_SESSION['nombre']" ?>">
<
br>
(así con el resto ...)

y en tu prueba2.php es donde debes registrar tus variables de sesión ..

Código PHP:
<?
session_start
();
$_SESSION['nombre']=$_POST['nombre'];

// etc...
?>
Los objetos de formulario tipo select .. radio y checkbox tienes las opcinoes "selected" o "checked" para indicar que quieres pre-seleccionar un valor .. En las FAQ's hay varios ejemplos que lo usan. leelas.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 01/03/2004, 12:21
 
Fecha de Ingreso: agosto-2002
Mensajes: 121
Antigüedad: 21 años, 8 meses
Puntos: 0
muchas gracias cluster ya hice lo ke me pusiste y si funciona muyyyyyyyyyyyyyyy bien
ahora el problema es este: cuando le doy regresar a mi formulario me sale este mensaje:

Advertencia: La página ha caducado La página solicitada se creó utilizando la información que envió en un formulario. Esta página no está ya disponible. Como medida de precaución, Internet Explorer no volverá a enviarle la información.

Para volver a enviar la información y ver esta página Web haga clic en el botón Actualizar

tendra algo que ver con las cabeceras html?
  #11 (permalink)  
Antiguo 01/03/2004, 14:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. el mensaje es normal .. Eso es ocasionado por la configuración de sesiones. Por defecto PHP usa cabeceras "no-cachè" para las sesiones. Eso lo define: session.cache_expire en tu php.ini (por defecto dice "no cache" o similar).


Tienes varias soluciones:

Rápidas pero no "ortodoxas"
1) Usa método GET en lugar de POST en tus formularios
2) No forzar "no caché" en session.cache_limiter (se puede hacer con funciones como session_cache_limiter() y/o por ini_set() ademas de con .htaccess).

Lógica:

Tu formulario envia datos a "procesar.php" .. este valida .. si hay algún error el mensaje de error NO se presenta en procesar.php sino que se devuelve al formulario automáticamente y ahí es donde se debe mostrar el mensaje de error (o bien en una página intermedia pero nunca donde envies tu formulario en el action= ... del form)

Para la redirección automática puedes usar:
header("Location: formulario.php");
exit;

Y si hay error .. puedes usar una variable de control tipo:
Código PHP:
header("Location: formulario.php?cod=error");
exit; 
y en tu formulario .. esa variable "cod" la usas como control para mostrar o no el mensaje de error correspondiente:

Código PHP:
if (isset($_GET['cod'])){
    if (
$_GET['cod']=="error"){
       echo 
"hay errores en el formulario .. reviselos";
    }

Usa más variables .. o códigos numericos/etc . para identificar el error concreto que se produció (ejemplo: tal campo no tiene valor ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 03:38.