Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Paso de variables entre 4 páginas PHP

Estas en el tema de Paso de variables entre 4 páginas PHP en el foro de PHP en Foros del Web. Hola a todos, Me acaban de chafar unos cuantos días de trabajo . Me han cambiado el orden de las páginas de recogida de información ...
  #1 (permalink)  
Antiguo 14/10/2015, 06:42
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Paso de variables entre 4 páginas PHP

Hola a todos,
Me acaban de chafar unos cuantos días de trabajo . Me han cambiado el orden de las páginas de recogida de información de un formulario (4 en total) y ahora estoy con mil dudas de cómo pasar los datos del formulario a la página siguiente y así sucesivamente.

La estructura es la siguiente:

PAGINA1: datos personales
Creo variable de sesión y envío los datos desde el formulario por POST a la página2

PAGINA2: test
Guardo cada campo recuperado con POST (4 en total) en variables de sesión tal que así ($_SESSION["var_nombre"] = $_POST["nombre"];).
Envío los datos del test (40 preguntas) por POST a la página3

PROBLEMA! Aquí tenía pensado enviar ya todo a la BD, pero me han cambiado el orden, así que, ¿Cómo hago para guardar 40 variables en la página3 y poder pasarlas a la página 4?

Entiendo que no tiene sentido plantarme con 60 variables de sesión, ¿no?.

Había pensado dos cosas:
  • Array de variable de sesión: He buscado info y parece que no se recomienda, ya que surgen errores a la hora del tipo de dato que guarda.
  • Fichero include: Creo que es lo que se utiliza pero no me fio de mí mismo ya que desconozco el uso correcto.

Si escojo la segunda opción, sería suficiente con esto?

Fichero: variables.php
Código PHP:
<?php
session_start
(); //iniciamos el manejo de sesiones
if(isset($_SESSION["idCuestionario"])) //si la variable de sesion "idCuestionario" existe, entonces...
{
  
// metemos todos los post en un array, quitamos el botón y vaciamos
  
$array_parte1 $_POST;
  unset(
$array_parte1['Enviar']);
  
$_POST = array();
  
} else 
//en caso la variable de sesion no exista
{
echo 
"La variable Cuestionario no ha sido declarada en la sesión actual";
}
?>

Fichero: pagina3.php

Código PHP:
<?php
include 'variables.php';
?>

Muchas Gracias!!
JC

Última edición por majete; 14/10/2015 a las 06:48
  #2 (permalink)  
Antiguo 14/10/2015, 07:07
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 10 meses
Puntos: 261
Respuesta: Paso de variables entre 4 páginas PHP

Buenas,

No había oído eso de los array dentro de sesion pueden dar problemas.

Depende de lo que te permitan o dispongas tienes varias opciones:
  • session
  • cookies
  • get - url
  • post - input hide (serializado o en json)
  • campo temporal en base de datos (serializado o en json)
  • cache Filesystem
  • cache Memcache
  • otro tipo de cache disponible

Dependiendo de la privacidad de los datos y/o de los recursos disponibles puedes optar por varias formas de persistir la información entre páginas.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #3 (permalink)  
Antiguo 14/10/2015, 07:59
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 1 mes
Puntos: 69
Respuesta: Paso de variables entre 4 páginas PHP

Y cuál sería la funcionalidad de ir pasando de página en página las respuestas del test? No entiendo qué es lobque busca tu jefe, pudiendo ir guardando directamente la información en la BD en cada página. Qué haría p ej la página 3 con las respuestas del test y la 4 que haría con esos datos?
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #4 (permalink)  
Antiguo 14/10/2015, 08:33
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Paso de variables entre 4 páginas PHP

Hola de nuevo,
Respondo por partes

Uncontroled_duck
No son datos sensibles, por lo que no tienen que estar encriptados ni nada por el estilo. Lo que no quiero es que se vean en la UL. Es información de caracter motivacional y de hábitos principalmemente.
Vi esto interesante:
Código PHP:
$_SESSION[&#8216;bloque1’][] = $_POST; 
Pero también leí en la documentación oficial de PHP esto otro. Hace referencia a problemas con el uso de strings que contienen un número y que los convierte automáticamente a entero:
http://php.net/manual/es/reserved.va...sion.php#92011


chronos682
El cuestionario se reparte en 4 páginas para que se identifiquen claramente que se recogen 4 grupos de preguntas (motivacionales, hábitos, etc.), además de por hacerlo más "navegable y amigable" en cuanto a UX y que no tengan todo en una página larguiiiiiiiisima. No acababa de encontrar una forma fácil de grabar temporalmente los datos y hacer un COMMIT al final del test para confirmar la transacción (yo y SQL nos llevamos algo mal).
La programación que tenía era de forma resumida:
  • Creo sesión en la pagina1
  • Desde la página2, recojo datos por POST (5 preguntas) y los grabo en variables de sesión (para que pueda recuperarlos cuando quiera)
  • Desde la página3, recojo nuevos datos por POST en un array (las 40 preguntas), cojo las variables de sesión guardadas y grabo todo en la BBDD.
Hasta que no llega al final, no graba nada en la BBDD, más que nada porque no me atrevo a programar algo utilizando TRANSACCIONES y por aprovechar el trabajo que ya tengo hecho que funciona al 100% (hasta el p...o cambio que me hace cambiar el planteamiento, influyendo lo menos posible).

Última edición por majete; 14/10/2015 a las 09:03
  #5 (permalink)  
Antiguo 14/10/2015, 09:06
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 1 mes
Puntos: 69
Respuesta: Paso de variables entre 4 páginas PHP

Pero no sería obligatorio usar transacciones, podrías usar una tabla temporal y ahí vas almacenando las respuestas del test y al finalizar el test recorres toda la tabla sacas todas las respuestas y las analizas o haces lo que tengas que hacer y una vez terminado borras los datos o los almacenas en otra tabla. Es que se me hace que estar pasando de a 40 variables entre páginas no es tan lógico y si son 40 preguntas por página al final tendrás que pasar 120 variables. Es mi humilde opinión puede que esté errado.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #6 (permalink)  
Antiguo 14/10/2015, 09:17
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Paso de variables entre 4 páginas PHP

¿Y para qué una tabla temporal?

Según estoy leyendo el tema inicial lo más simple sería usar sesiones.

Cita:
Array de variable de sesión: He buscado info y parece que no se recomienda, ya que surgen errores a la hora del tipo de dato que guarda.
Te equivocas, salvo que guardes datos complejos como objetos y así podría ser problemático, pero no: tu sólo intentas persistir datos de un formulario.

Los datos de un formulario siempre son strings, y no hay que temer al almacenar dichos datos en sesión.

Cita:
No había oído eso de los array dentro de sesion pueden dar problemas.
Totalmente de acuerdo.

¿A quién se le ocurren semejantes cosas?

Cita:
Entiendo que no tiene sentido plantarme con 60 variables de sesión, ¿no?.
Claro que es algo absurdo guardar dato por dato, cuando sería más simple persistir el $_POST completo:
Código PHP:
Ver original
  1. $_SESSION['post_pagina_1'] = $_POST;

Cita:
Si escojo la segunda opción, sería suficiente con esto?
No, eso no sirve, da igual si usas un include o no, el código ahí carece de propósito y no persiste nada.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 14/10/2015, 09:21
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 1 mes
Puntos: 69
Respuesta: Paso de variables entre 4 páginas PHP

No se me había ocurrido pasar toda la variable POST, así si no es tan descabellado porque solo serían 4 variables en total.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #8 (permalink)  
Antiguo 14/10/2015, 09:35
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Paso de variables entre 4 páginas PHP

Creo que lo mejor es lo que comenta pateketrueke, persistir el $_POST al completo, pero entonces no me queda claro como se comunican.
Me he dado cuenta de que vaciaba el array $_POST a cada página, para liberar espacio de memoria. Si no aplico esto:

Código PHP:
$_POST = array(); 
¿Quiere decir que se irán acumulando los datos que se recojan de cada página en esa variable?

P.D. NOOOOO... el contenido del array $_POST se sustituye cuando paso de página y me chafa los datos.

Voy a probar lo que me indicas
Código PHP:
$_SESSION['post_pagina_1'] = $_POST
Voy a ver...

Graciass!!

Última edición por majete; 14/10/2015 a las 10:16
  #9 (permalink)  
Antiguo 14/10/2015, 10:31
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Paso de variables entre 4 páginas PHP

Ufff esto se complica para luego poder acceder a esos datos. De momento lo que obtengo son 3 arrays dentro de la variable SESSION, uno dentro de otro:

Si pinto el contenido de $_SESSION obtengo

Código:
Array ( [idCuestionario] => prueba2 [post_pagina_1] => Array ( [nombre] => a [apellidos] => b [mail] => [email protected] [Enviar] => Siguiente ) [post_pagina_2] => Array ( [pregunta01] => p1 [pregunta02] => p2 [pregunta03] => p3 [Enviar] => Enviar ) ) Array ( [pregunta01] => p1 [pregunta02] => p2 [pregunta03] => p3 [Enviar] => Enviar )
  #10 (permalink)  
Antiguo 14/10/2015, 10:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Paso de variables entre 4 páginas PHP

¿Y cual es la complicación?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 14/10/2015, 10:46
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Paso de variables entre 4 páginas PHP

Bueno, si encuentro la forma correcta de reconvertir mis INSERTS de sql ninguna jejeje

Lo que tengo
Código PHP:
// meto los resultados del test y quito botón
  
$array $_POST;
  unset(
$array['Enviar']);

  
// creamos el sql de las respuestas del cuestionario
  
$sql "INSERT INTO datosPlayers (idCuestionario,idpregunta,respuesta) VALUES ";

  
// loop en el array
  
$it = new ArrayIterator$array );
  
$cit = new CachingIterator$it );
  foreach ( 
$cit as $value )
  {
        
// sumo a la query inicial
        
$sql .= "('{$_SESSION['idCuestionario']}','".$cit->key()."','" .$cit->current()."')";
        
// si hay otro valor meter coma
        
if( $cit->hasNext() )
        {
            
$sql .= ",";
        }
    } 
Lo que tengo que conseguir es adaptar la primera línea, ya que los datos ahora no vienen del array $_POST.

Saludos!
JC
  #12 (permalink)  
Antiguo 14/10/2015, 10:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Paso de variables entre 4 páginas PHP

Pues yo lo veo muy simple:
Código PHP:
Ver original
  1. // la idea es simular el post
  2. $array = $_POST;
  3.  
  4. // si guardaste el post así
  5. $_SESSION['post_pagina_1'] = $_POST;
  6.  
  7. // sencillamente inviertes la lógica
  8. $array = $_SESSION['post_pagina_1'];
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 14/10/2015, 10:56
Avatar de majete  
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Paso de variables entre 4 páginas PHP



Todo lo difícil lo haces fácil! jejeje

Por último, entiendo que no hay problema en que la variable $_SESSION tenga 70 elementos dentro en un array, no?

Muchas graciaaaas

Etiquetas: formulario, páginas, paso, variable, variables
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 09:01.