Foros del Web » Programando para Internet » PHP »

traspasar variables de un pagina a otra y a otra

Estas en el tema de traspasar variables de un pagina a otra y a otra en el foro de PHP en Foros del Web. Buenas, haber tengo una duda ya que tenga que llenar una base de datos con cierta informacion pero el dilema es el siguiente: primero debo ...
  #1 (permalink)  
Antiguo 09/11/2006, 11:19
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años, 1 mes
Puntos: 7
traspasar variables de un pagina a otra y a otra

Buenas,

haber tengo una duda ya que tenga que llenar una base de datos con cierta informacion pero el dilema es el siguiente:

primero debo ingresar la informacion de alumno
segundo debero ingresar la informacion del tutor
tercero debo ingresar la informacion del padre
Cuarto debo ingresar la informacion del madre
quinto debe ingresar la info del alumno,tutor, padre y madre a la BD

como esta tanta info, por cada evento voy a hacer una pagina con su formulario.

la persona que realiza esta accion es una persona que tiene un perfil en particular...

si se dan cuenta tengo que pasar la info del alumno hasta la pagina de la madre...

es por ello mi pregunta, cual es una buena forma de hacerlo, solo tendria que pasar todos los datos pagina por pagina...
habia pensado como este usuario es un usuario especial , crearle en la session un arreglo para contener todos esos datos, aunque no se como crear un array en la session.

ademas no se cuanta info puedo transportar de una pagina a otra.
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:
  #2 (permalink)  
Antiguo 09/11/2006, 12:38
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Pues por el momento se me ocurren tres opciones:
1.- Crea campos tipo hidden asignandoles sus repctivos valores:
Código PHP:
<input type="hidden" name="alumno">
<
input type="hidden" name="tutor">
<
input type="hidden" name="padre"
El hidden de la madre ya no lo puse porque es el último que ingresas y no tiene caso porque para cuando quieras guardar los datos de la madre pues de una sóla vez puedes ya guardar los datos en la bd.
2.- Otra opción sería que pongas un botón de guardar datos en cada página de ingresar datos y estos los vas guardando en un documento .txt por decir algo y cuando ya sea hora de guardar los datos en la bd estos los jalas del documento de texto.
3.- Podrías utilizar AJAX, tenemos un foro dedicado a esto y todo lo puedes hacer en la misma página. Si te interesa esta última opción puedes consultas las FAQ´S de AJAX para que sepas como hacerlo.

Espero que esto te sirva de algo. Suerte

Última edición por Erikfrancisco; 09/11/2006 a las 12:58
  #3 (permalink)  
Antiguo 09/11/2006, 12:43
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años, 1 mes
Puntos: 7
aca pensamos en otra solucion, no se si mas de fondo, pero la idea no era poner en la pantalla un solo gran formularios, asi que vamos hacer una tabla que contenga los datos temporalmente.

y cuando termine de ingresar esa infor, tome cada id, y la pasa a la tabla correspondiente...

de todas las formas que pensamos fue la mas facil y buena que encontramos
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:
  #4 (permalink)  
Antiguo 09/11/2006, 14:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por FNX_NET Ver Mensaje
aca pensamos en otra solucion, no se si mas de fondo, pero la idea no era poner en la pantalla un solo gran formularios, asi que vamos hacer una tabla que contenga los datos temporalmente.

y cuando termine de ingresar esa infor, tome cada id, y la pasa a la tabla correspondiente...

de todas las formas que pensamos fue la mas facil y buena que encontramos
Y para qué una "tabla" .. usa una sesión que para eso están.

En la sesión almacenas los N formularios que tengas que implementar para completar tu proceso, .. todo lo vas "hechando" a tu variable de sesión y al final del proceso lees tu variable de sesión con todos sus datos acomulados y lo procesas como corresponde.

De hecho es tan simple como que cada script de proceso de cada formulario . .haga algo tipo:

Código PHP:
<?
session_start
();
$_SESSION['formulario_completo']=$_POST;
// Si, si .. se añadiría alguna variabel de más como un tal "submit" pero eso es lo de menos .. no tienes tantos formularios.
Así también puedes validar perfectamente que el proceso sea el que tu definas, ese decir, que pase por el anterior paso antes de llegar a donde tenga que ir ...

Conoces o usas sesiones? www.php.net/session

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 09/11/2006, 14:23
 
Fecha de Ingreso: noviembre-2006
Ubicación: República Dominicana
Mensajes: 17
Antigüedad: 17 años, 5 meses
Puntos: 1
Creo que la mejor solución es usar varibles de session ya que estas mantiene el valor hasta que las destruyes o hasta que caduque el tiempo de vida de estas variables, yo encontre la solucion a un problema similar a este usando variables de session. Suerte.
  #6 (permalink)  
Antiguo 09/11/2006, 19:25
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años, 1 mes
Puntos: 7
mmmm, lo que pasa es que si pasa algo entre en ingreso o si falta info, asi que penso que seria bueno tener esta info en una DB, pero lo de pasar los form, no es mala idea
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:
  #7 (permalink)  
Antiguo 10/11/2006, 08:59
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años, 1 mes
Puntos: 7
bueno, la idea de don cluster me convencion, me gustaria mas info en el sentido de si pasa algo como destruyo esa variable y como recupero la varibles..
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:
  #8 (permalink)  
Antiguo 10/11/2006, 09:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por FNX_NET Ver Mensaje
bueno, la idea de don cluster me convencion, me gustaria mas info en el sentido de si pasa algo como destruyo esa variable y como recupero la varibles..
Ese manejo es própio del sistema de sesiones de PHP y ajuste de este.

Te invito a ver la documentación oficial de sesiones de PHP.
www.php.net/session

También tienes documentación en las FAQ's de este foro, y si usas el buscador del mismo veras infinidad de temas que hablan de lo mismo. Con esa base algo más clara sobre el tema, ahí si quieres pregunta dudas más concretas.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 10/11/2006, 09:27
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años, 1 mes
Puntos: 7
Ojales xD.. lo veo y te aviso.
auqne entre y no vi naaa, pero lo vere con mas atencion
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:
  #10 (permalink)  
Antiguo 10/11/2006, 09:54
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años, 1 mes
Puntos: 7
Código PHP:
<?
session_start
();
$_SESSION['formulario_completo']=$_POST;
// Si, si .. se añadiría alguna variabel de más como un tal "submit" pero eso es lo de menos .. no tienes tantos formularios
Bueno, como no encontre naaa, tendre que preguntar, como miercoles, o como retorno lo valores, ya que supongo que a los textfield les tendre que poner nombre diferente para que las variables no se sobrescriban, pero bueno no hay que ser muy vivo para saber eso enrealidad.

pero como lo hago para retornar una variable determinada en este caso el nombre del alumno

$StrNomAlum = $_session['formulario_completo']['NomAlum']

ya que supongo que $_session['formulario_completo'] es un contendor de variables, como un arreglo de cierta forma

ya que al hacer esto $_SESSION['formulario_completo']=$_POST; todo lo que pase al otro form por post se ira a la variable session


verdad no es verdad, como decia la gitana
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:
  #11 (permalink)  
Antiguo 10/11/2006, 10:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por FNX_NET Ver Mensaje
Ojales xD.. lo veo y te aviso.
auqne entre y no vi naaa, pero lo vere con mas atencion
Si, necesitas verlo con más atención.

El tema de las "sesiones" en PHP se basa en teoría, configuración de PHP que rije esa teoría .. un par de conceptos (SID, donde se almacenan los dtos .. etc) y pocas funciones/código (session_start(), $_SESSION ..). Realmente no es tan "complicado" si sigues los pasos que mencioné y en ese orden .. sino cuando las cosas no te funcionen ahí te tocará ver esa teoría (que es lo que suele pasar).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 10/11/2006, 10:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por FNX_NET Ver Mensaje
Código PHP:
<?
session_start
();
$_SESSION['formulario_completo']=$_POST;
// Si, si .. se añadiría alguna variabel de más como un tal "submit" pero eso es lo de menos .. no tienes tantos formularios
Bueno, como no encontre naaa, tendre que preguntar, como miercoles, o como retorno lo valores, ya que supongo que a los textfield les tendre que poner nombre diferente para que las variables no se sobrescriban, pero bueno no hay que ser muy vivo para saber eso enrealidad.

pero como lo hago para retornar una variable determinada en este caso el nombre del alumno

$StrNomAlum = $_session['formulario_completo']['NomAlum']

ya que supongo que $_session['formulario_completo'] es un contendor de variables, como un arreglo de cierta forma

ya que al hacer esto $_SESSION['formulario_completo']=$_POST; todo lo que pase al otro form por post se ira a la variable session


verdad no es verdad, como decia la gitana
Y ya te leistes la teoría? ..

Si, $_SESSION es un array .. En mi ejemplo lo que se crea es un array bidimensional (ya que $_POST es otro array) y lo asocio en el array $_SESSION bajo un indice cualquiera (asociativo):

El acceso a un elemento concreto o a todos se hace como cualquier array bidimensional asociativo.

Código PHP:
<?
session_start
(); // esto es importante!!! es parte de la teoría que no te quedó claro al parecer!.

$StrNomAlum $_SESSION['formulario_completo']['NomAlum'];

// o para recorrer todo lo que tengas en tu array
foreach($_SESSION['formulario_completo'] as $variable=>$valor){
   echo 
$variable." = ".$variable."<br>";
}
?>
En definitiva .. el proceso sería:

formulario1.php --> procesa1.php
el "action de tu formulario" lo envias a procesa1.php .. ahí ingresas los datos a la sesión en curso como te indiqué. (previa validación o lo que requieras hacer más).

procesa1.php ---> formulario2.php
procesa1.php redirecciona al siguiente formulario ..

Código PHP:
header ("Location: formulario2.php");
exit; 
Y así con el resto de la secuiencia.

Por supuesto de esta forma puedes ir validando que no entre directo a la secuencia "formulario3.php" si no pasé por el "1" primero por ejemplo ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 10/11/2006, 10:10
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años, 1 mes
Puntos: 7
claro, osea yo ocupo la variable session para guardar la id de usuarios, y para validar si esta logeado, pero es no es mas que un
$_SESSION['id'] = $row['IdUser'];

pero eso de
$_SESSION['formulario_completo']=$_POST;
me suena abstracto ya que no se como invocar una variable que esta dentro de post, ya que es un formulario, que como dijeron aca es mas grande de formulario de caja de compensacion, aunque no se pork, pero seguire buscando
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:
  #14 (permalink)  
Antiguo 10/11/2006, 10:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
pero eso de
$_SESSION['formulario_completo']=$_POST;
me suena abstracto ya que no se como invocar una variable que esta dentro de post, ya que es un formulario, que como dijeron aca es mas grande de formulario de caja de compensacion, aunque no se pork, pero seguire buscando
Bueno .. te suena abstracto por qué no conoces tal vez que $_POST es un array y que contiene -todas- las variables de tu formulario .. es decir .. todos los elementos del formulario que envian datos (input .. etc).

Así que lo que se hace simplemente es crear un array por decirlo así "dentro de otro array" (anidado). Pero de una . .sin tener que andar haciendo:

$_SESSION['NomAlum'] = $_POST['NomAlum'];

Y así con todas ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #15 (permalink)  
Antiguo 10/11/2006, 10:27
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años, 1 mes
Puntos: 7
a me funko, viste que mi teoria es algo viable, y no habia encontrado nada
esto es solo modo prueba

<?php
session_start();
$_SESSION['formularioAlumno']=$_POST;

$StrNomAlum = $_SESSION['formularioAlumno']['TxtPnom'];
echo $StrNomAlum;
?>

y funciono, deberia haber seguido la fuerza, pero insisto en la pagina del php que me enviaste no salia naaa, bueno algo explicito
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:
  #16 (permalink)  
Antiguo 10/11/2006, 10:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por FNX_NET Ver Mensaje
a me funko, viste que mi teoria es algo viable, y no habia encontrado nada
esto es solo modo prueba

<?php
session_start();
$_SESSION['formularioAlumno']=$_POST;

$StrNomAlum = $_SESSION['formularioAlumno']['TxtPnom'];
echo $StrNomAlum;
?>

y funciono, deberia haber seguido la fuerza, pero insisto en la pagina del php que me enviaste no salia naaa, bueno algo explicito
Claro que no sale "naaa" .. por qué tu problema no es con sesiones sino con "tipos de datos", es decir, saber que $_SESSION es un array (asociativo) .. que $_POST es otro array asociativo y como se accede a un elemento de un array asociativo bidimensional. Así de simple.

Lo que tú nunca dejastes claro es que ya "usabas" sesiones .. bueno luego quedó claro que las usabas pero realmente no sé si hasta la fecha ves claro su potencialidad para sacarle provecho .. por qué esto de usar las sesiones sólo para validar usuarios es un mito .. si lo ves bien ... una sesión por sus propiedades sirve para muchas cosas que habitualmente se resuelven con más esfuerzo por otros médios.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #17 (permalink)  
Antiguo 10/11/2006, 12:01
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 2 meses
Puntos: 10
Vamos a ver un ejemplo práctico del uso de sesiones:
Código PHP:
<?php // 1ª pagina 
if(!isset($_SESSION)) session_start(); // iniciamos sesion si php no la inicia automaticamente
if(@$_GET['paso'] == 2) {
$_SESSION['formulario'] = $_POST// Hacemos un "dump" del POST, que incluye todo el formulario, en la siguiente pagina se ve mejor
$_SESSION['paso'] = 2// Ponemos el 2º paso por si hace falta
header("Location: pagina2.php");

?>
<html>
<head>
<!-- loquesea -->
</head>
<body>
<!-- lo que vaya aqui -->
<form id="test" action="?paso=2" method="post">
<input type="text" id="nombre" value="introduce un nombre" />
<!-- otros campos -->
<input type="submit" id="submit" value="Enviar y continuar" />
</form>
<!-- otras cosas -->
</body>
Y en la segunda pagina
Código PHP:
<?php /* pagina2.php */
if(!isset($_SESSION)) session_start(); // en caso de que PHP no inicie la sesion la iniciamos nosotros manualmente
?>
<html>
<head>
<!-- loquesea -->
</head>
<body>
<!-- lo que vaya aqui -->
<?php
// Vamos a mostrar el post DE LA PAGINA ANTERIOR, para que veas como es esto, luego lo haremos en una 3ª pagina

// Mostramos el nombre, que es el unico dato ^_^:
echo $_SESSION['formulario']['nombre'] . "<br />";

// Si fuesen varios, que es para lo que sirve la linea no comentada de arriba, podriamos obtenerlos todos asi:
foreach($_SESSION['formulario'] as $desc => $valor) {
echo 
"{$desc} = {$valor}\r\n<br />"// o sino
// echo "{$desc} = {$_SESSION['formulario'][$desc]}";
}
?>
Metemos otro dato al post ^_^
<form id="segundoform" action="pagina3.php" method=post>
<input type="text" id="apellidos" value="introduce apellidos" /><?php if($_GET['error'] == 'apellidosNULL')) echo "¡¡APELLIDOS NO PUEDE ESTAR VACIO!!"?>
<input type="submit" id="submit" value="Enviar" />
</form>
<!-- etc -->
</body>
</html>
Y en la 3ª pagina
Código PHP:
<?php /* pagina3.php */ 
if(!isset($_SESSION)) session_start();
if(empty(
$_POST['apellidos'])) header("Location: pagina2.php?error=apellidosNULL");

$_SESSION['formulario'] = array_merge($_SESSION['formulario'], $_POST); // Añadimos lo nuevo a lo viejo para mantener todo ordenadito ;-)
?>
<html>
<head>
</head>
<body>
<?php
// Mostramos toda la sesion y luego solo el formulario, de dos formas para que veas todo lo que se puede hacer, o almenos parte de ello
print_r($_SESSION);// Mostramos todos los datos _SESSION a lo basto ^_^
echo "<hr />"// linea horizontal
print_r($_SESSION['formulario']);
echo 
"<hr />Otro metodo:<br />";
// Creamos una funcion mostrar()
function mostrar($array '_SESSION') {
global ${
$array}; // hacemos que el array (p. ej. $_SESSION si se usan los valores por defecto) tome sus valores localmente
foreach(${$array} as $clave => $valor) {
if(
is_array(${$array}[$clave])) mostrar($array.'[\'{$clave}\']');
echo 
$valor."<br />";
return 
1;
// END_FOREACH
// END_FUNC
mostrar('_SESSION');// mostrar $_SESSION, notese que falta el $
echo ('<hr />');
mostrar('_SESSION["formulario"'); // La otra forma de mostrar el formulario

?>
</body>
</html>
Estos scripts no los he probado y no sé si funcionan, así que pruébalos y si no van pregunta qué puede estar mal, lo he escrito a simple vista, puede haber errores, pero la teoría es esa, desde que metes algo en la sesión permanece ahí.
Puedes ver también que da igual donde trates el archivo, en la misma pagina (véase pág.1) o en la siguiente (véase págs.2-3), claro que depende de como lo pongas tendrás que hacer o no un header("location: "); al lugar donde deba ir, o ponerlo todo en la misma pagina, ordenado por pasos (véase pág.1, que manda al get->paso=2, pero haciendolo todo en el pagina1, sin necesidad de paginas secundarias, lo que es un gasto de energia del servidor, pero bueno, hay gente que lo prefiere así -.-)
Código PHP:
<?php
if($_SESSION['paso'] == 1) {
?><COSAS EN HTML />
<?php
} else if($_SESSION['paso'] == 2) {
// ...
}

//// O ponerlo en estilo
switch($_SESSION['paso']) {
  case 
1:
  echo 
$html_caso1;
  break;
  case 
2:
  echo 
$html_caso2;
  break;
  
// ...
  
default:
  echo 
"Pon algo";
  break;
}

?>
  #18 (permalink)  
Antiguo 10/11/2006, 13:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Creo que el array_merge() no sería necesario atendiendo que el "dump" de variables que hacemos al array de sesión son asociativos y de nombres diferentes (habría que probarlo).

Esta validación:
if(!isset($_SESSION)) session_start();

Siempre te dará que no existe $_SESSION .. Para poder acceder al contenido -real- de $_SESSION debes inicar antes el uso de sesiones con session_start().

Lo que si que puedes validar es algo tipo:

<?
session_start();
if($_SESSION['paso'] == 2){

Como ya lo haces o un isset() aplicado a $_SESSION['forumulario']


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #19 (permalink)  
Antiguo 18/11/2006, 11:14
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 2 meses
Puntos: 10
Entonces como hago sin el array_merge?
Si pongo $_SESSION['formulario'] = $_POST; se borrarían los valores anteriores...

Por lo de que if(!isset($_SESSION)) session_start();

no siempre se ejecutará y además te deja incluir el archivo con include() (si pones session_start dos veces, al final yo tuve el problema de que mi session_id() estaba vacío o.O) y te olvidas de que en el php.ini se puede configurar una directiva (session.auto_start, creo) en on para que no sea necesario iniciar las sesiones
  #20 (permalink)  
Antiguo 18/11/2006, 12:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Entonces como hago sin el array_merge?
Si pongo $_SESSION['formulario'] = $_POST; se borrarían los valores anteriores...
Tienes razón .. Ok.

Cita:
Por lo de que if(!isset($_SESSION)) session_start();
no siempre se ejecutará y además te deja incluir el archivo con include() (si pones session_start dos veces, al final yo tuve el problema de que mi session_id() estaba vacío o.O) y te olvidas de que en el php.ini se puede configurar una directiva (session.auto_start, creo) en on para que no sea necesario iniciar las sesiones
No entendí bien tu argumento .. Por mi parte sólo cometo que es necesario un session_start() (y no más) al principio de tu script .. o mejor dicho antes de pretender ver el valor del array superglobal: $_SESSION.

Te propongo un ejemplo de posible falla de seguridad .. imagina situación: register_globals a ON ...

tu_script.php?_SESSION=valor

Ya pasaría por tu validación como "que existe" (isset()) pues aprovechando de que "register_globals a ON" no hace discriminación con la variable o método por el que llega .. la introducí por el URL, esto sumado a que session_start() estaría -despues- de esa validación .. podría ser una combinación no muy segura.



El uso de "session.auto_start" afectaría a todo el servidor y aplicación que en el corra. Creo que es más sano usar el inico de sesiones (session_start() en el momento que se necesite .. no por defecto en todo script PHP que ese servidor ejecute).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #21 (permalink)  
Antiguo 18/11/2006, 13:04
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 2 meses
Puntos: 10
Cita:
Iniciado por Cluster Ver Mensaje
No entendí bien tu argumento .. Por mi parte sólo cometo que es necesario un session_start() (y no más) al principio de tu script .. o mejor dicho antes de pretender ver el valor del array superglobal: $_SESSION.

Te propongo un ejemplo de posible falla de seguridad .. imagina situación: register_globals a ON ...

tu_script.php?_SESSION=valor

Ya pasaría por tu validación como "que existe" (isset()) pues aprovechando de que "register_globals a ON" no hace discriminación con la variable o método por el que llega .. la introducí por el URL, esto sumado a que session_start() estaría -despues- de esa validación .. podría ser una combinación no muy segura.
Tienes razón, para eso se usa normalmente o bien
Código PHP:
if(!isset($_SESSION) && bool(ini_set(register_globals)) == 0
o aún mejor:
Código PHP:
if(!isset($_SESSION) || empty(session_id()))
session_start(); 
Cita:
Iniciado por Cluster Ver Mensaje
El uso de "session.auto_start" afectaría a todo el servidor y aplicación que en el corra. Creo que es más sano usar el inico de sesiones (session_start() en el momento que se necesite .. no por defecto en todo script PHP que ese servidor ejecute).

Un saludo,
Ya, pero cuando tú no puedes controlar ese valor??
Esto es para que sea más compatible con todos los servidores, al igual que usar <?php en lugar de <? o <% (si use_short_tags o use_asp_tags están off respectivamente, <? o <% no son reconocidos por PHP, sólo <?php y <script language="php">)
Saludos

PD: Se me acaba de ocurrir que para prevenir el lapaginaquesea.php?_SESSION=valor se podría utilizar algo como
Código PHP:
<?php
if($_REQUEST[_SESSION]) {
if(
is_array($_REQUEST[_SESSION])) {
foreach(
$_REQUEST[_SESSION] as $clave => $valor) {
$_SESSION[$clave] = 'VALOR DESHABILITADO ^_^';
//E_FOREACH
}//E_is_array?
}//E_$_Req[_SESSION]

?>
Que te parece?
  #22 (permalink)  
Antiguo 18/11/2006, 14:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por santhy Ver Mensaje
Tienes razón, para eso se usa normalmente o bien
Código PHP:
if(!isset($_SESSION) && bool(ini_set(register_globals)) == 0
o aún mejor:
Código PHP:
if(!isset($_SESSION) || empty(session_id()))
session_start(); 


Ya, pero cuando tú no puedes controlar ese valor??
Esto es para que sea más compatible con todos los servidores, al igual que usar <?php en lugar de <? o <% (si use_short_tags o use_asp_tags están off respectivamente, <? o <% no son reconocidos por PHP, sólo <?php y <script language="php">)
Saludos

PD: Se me acaba de ocurrir que para prevenir el lapaginaquesea.php?_SESSION=valor se podría utilizar algo como
Código PHP:
<?php
if($_REQUEST[_SESSION]) {
if(
is_array($_REQUEST[_SESSION])) {
foreach(
$_REQUEST[_SESSION] as $clave => $valor) {
$_SESSION[$clave] = 'VALOR DESHABILITADO ^_^';
//E_FOREACH
}//E_is_array?
}//E_$_Req[_SESSION]

?>
Que te parece?
Simplemente:

<?
session_start();

a partir de ahí $_SESSION toma el valor de sesión iniciada. Por eso insisto tanto en iniciar -antes- el uso de sesiones con session_start() para comprobar su real valor y no otro suplantado o adulterado.

Fijate los ejemplos de php.net sobre sesiones .. no hay ninguno que haga un session_start() despues de alguna validación o acceso a $_SESSION

www.php.net/session
Cita:
Ejemplo 2. Registrar una variable con $_SESSION.

Código PHP:
<?php
session_start
();
// Use $HTTP_SESSION_VARS con PHP 4.0.6 o inferior
if (!isset($_SESSION['count'])) {
   
$_SESSION['count'] = 0;
} else {
   
$_SESSION['count']++;
}
?>
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #23 (permalink)  
Antiguo 18/11/2006, 15:27
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 18 años, 2 meses
Puntos: 10
Ok
Pues no sé donde habré yo visto eso entonces, xD
En serio, en algún sitio lo he visto, yo no me lo he inventado.
Pero... ¿donde?
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 13:25.