Ver Mensaje Individual
  #17 (permalink)  
Antiguo 10/11/2006, 12:01
santhy
 
Fecha de Ingreso: febrero-2006
Mensajes: 134
Antigüedad: 19 años
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;
}

?>