Autor Tema: PhP. Ejemplo uso sesiones y variables de sesión session_start var_dump($_SESSION  (Leído 3478 veces)

javaquery

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 125
    • Ver Perfil
Primero pondré el enunciado, es un poco largo:

1.   Realizar una aplicación que simule el funcionamiento de un parking que dispone de las siguientes plazas: 14 para coches pequeños y 10 para coches grandes. Usa dos arrays para representar el parking. Las posiciones de los arrays representarán las plazas, y almacenarán información de si la plaza está ocupada o no (puedes usar un valor numérico, como 0 para plaza libre, 1 para plaza ocupada).
Los coches se aparcarán de la siguiente forma: cuando entra en el parking, se identifica al coche como grande o pequeño. Los coches grandes aparcan en la primera plaza grande que encuentren. En cambio, los coches pequeños aparcaran en la primera plaza pequeña que encuentren, pero, de no encontrar ninguna, intentarán aparcar en la primera plaza grande libre que vean.
La aplicación tendrás las siguientes páginas:
•   Página inicial donde se mostrarán las siguientes opciones:
o   Aparcar coche.
o   Retirar coche.
o   Ver estado del parking.
Cada una de las opciones anteriores nos llevará a una página donde se ejecutarán las operaciones necesarias para llevar a cabo la opción seleccionada por el usuario. Éstas se detallan a continuación.
•   Aparcar coche: mediante un formulario se indicará si el coche es grande o pequeño. A continuación se procederá a aparcar usando el mecanismo que se ha explicado previamente. Obtendremos un mensaje que nos indicará si el coche se ha aparcado (no es necesario indicar la plaza), o si el parking está lleno.
•   Retirar coche: mediante un formulario se indicará de qué parking se quiere retirar el coche (parking grande o parking pequeño) y la plaza que ocupa el vehículo. El programa mostrará un mensaje indicando si se ha retirado el coche, o si no se encontraba ningún coche en la plaza indicada.
•   Ver estado del parking: se mostrará por pantalla el estado de cada plaza del parking, indicando si está libre u ocupada.

Consideraciones: recuerda que para pasar datos no incluidos en un formulario de una página a otra puedes usar sesiones.


El ejercicio lo he dividido en 3 archivos:

index.php
Código: [Seleccionar]
<!DOCTYPE HTML>
<html lang="es">
<head>
  <meta charset="UTF-8">
<title>Parking De Coches</title>
</head>
<body>
<form method="post" action="procesos.php">
  <p>Seleccione una operacion y tamaño del coche</p>
Coche <select name ="tamano">
      <option value="grande">grande</option><br>
      <option value="pequeno">pequeno</option><br>
      </select>
      <br>
Operacion <select name="opcion">
          <option value="aparca" >Aparcar coche</option>
          <option value="retira" >Retirar coche</option>
          </select>
      <input type="submit" value="enviar" name="estado"/>
    <br>
   Plaza: <input type ="text" name = "plaza">
</form>
 <a href ="estado.php">Estado Parking</a>
</body>
</html>




archivo procesa.php
Código: [Seleccionar]
<?phpconst PLAZA_LIBRE = 0;const PLAZA_OCUPADA = 1;const NUM_COCHES_GRANDES = 10;const NUM_COCHES_PEQUENOS = 14;const MENSAJE = "COCHE APARCADO";const MENSAJE_NO_DISPONIBLE ="NO HAY SITIO EN EL PARKING";$tamano = $_POST['tamano'];$opcion = $_POST['opcion'];function construir_array($tamano){	$arr = [];	$count = ($tamano == 'grande') ? NUM_COCHES_GRANDES : NUM_COCHES_PEQUENOS;	for ($i = 0; $i< $count; $i++) {		$arr[$i] = PLAZA_LIBRE;	}		return $arr;}function libre($tamano){	    $arr = ($tamano == 'grande') ? $_SESSION['grande'] : $_SESSION['pequeno'];    return array_search(PLAZA_LIBRE, $arr);}function aparcar($tamano){if(FALSE != ($seccion = libre($tamano))) {	$_SESSION[$tamano][$seccion] =PLAZA_OCUPADA;	echo MENSAJE;}else{	MENSAJE_NO_DISPONIBLE;}}function retirar ($tamano, $plaza){	if (array_key_exists($plaza, $_SESSION[$tamano])){		$_SESSION[$tamano][$plaza] = PLAZA_LIBRE;		return true;	}	return false;}if (!isset($_SESSION)){	session_start();}	//CREO LOS ARRAYS PARA GUARDAR LOS DATOSif (!isset($_SESSION['pequeno'])){	$_SESSION['pequeno'] = construir_array('pequeno');}if (!isset($_SESSION['grande'])){	$_SESSION['grande'] = construir_array('grande');}//PROCEDO A EJECUTAR LA ACCIONif (isset($tamano)) {	if ($opcion == 'aparca'){		aparcar($tamano);	}else if ($opcion ==='retira') {		$plaza = isset($_POST['plaza']) ? $_POST['plaza'] : null;		if (!isset($plaza) || empty($plaza)){			echo 'ingresa la plaza del coche a retirar';		}else{			if (retirar($tamano, $plaza)) {				echo 'El coche de la plaza Numero '.$plaza.' se retiro bien';			}else{				echo '[ERROR] al retirar el coche de la plaza numero '.$plaza;			}					}	}else{		echo '[ERROR] la opcion no es valida.';	}}echo '<br><br>';echo '<a href = "index.php">VOLVER</a>';?>

archivo estado.php
Código: [Seleccionar]
<?php if (!isset($_SESSION)) {session_start();} echo '<a href="index.php"><VOLVER</a>'; echo '<h1>REFERENCIAS: <h1>'; echo '<h3>0 ===> PLAZA_LIBRE</h3>';echo '<h3>1 ===> PLAZA_OCUPADA</h3>'; echo '<h1>COCHES GRANDES</h1>'; echo '<pre>';var_dump($_SESSION['grande']);echo '</pre>'; echo '<h1>COCHES PEQUEÑOS</h1>'; echo '<pre>';var_dump($_SESSION['pequeno']);echo '</pre>';?>


El problema lo tengo que cuando voy a aparcar un coche ya sea grande o pequeño al darle al boton enviar no me muestra nada. En cambio si retiro un coche si me muestra un mensaje que se retiro con exito¿alguien puede ayudarme? tengo que entregarlo como muy tarde el lunes y me esta volviendo loco el ejercicio, gracias.

Un saludo
   

« Última modificación: 05 de Junio 2017, 17:57 por Ogramar »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:solicito ayuda en este ejercicio
« Respuesta #1 en: 28 de Marzo 2017, 23:33 »
Hola javaquery.

No se si te valdrá la respuestas a estas alturas, pero ahí te la dejo.

procesos.php
Código: [Seleccionar]
<?phpsession_start();const PLAZA_LIBRE = 0;const PLAZA_OCUPADA = 1;const NUM_COCHES_GRANDES = 10;const NUM_COCHES_PEQUENOS = 14;const MENSAJE = "COCHE APARCADO";const MENSAJE_NO_DISPONIBLE ="NO HAY SITIO EN EL PARKING";$tamano = $_POST['tamano'];$opcion = $_POST['opcion'];function construir_array($tamano){	$arr = [];	$count = ($tamano == 'grande') ? NUM_COCHES_GRANDES : NUM_COCHES_PEQUENOS;	for ($i = 0; $i< $count; $i++) {		$arr[$i] = PLAZA_LIBRE;	}	return $arr;}function libre($tamano){	$arr = ($tamano == 'grande') ? $_SESSION['grande'] : $_SESSION['pequeno'];    return array_search(PLAZA_LIBRE, $arr); }function aparcar($tamano){	echo "estoy aquí; ".libre($tamano);	$seccion = libre($tamano);	if(!empty($seccion)) {		$_SESSION[$tamano][$seccion] = PLAZA_OCUPADA;		echo MENSAJE;	}else{		echo MENSAJE_NO_DISPONIBLE;	}}function retirar($tamano, $plaza){	if (array_key_exists($plaza, $_SESSION[$tamano])){		$_SESSION[$tamano][$plaza] = PLAZA_LIBRE;		return true;	}	return false;}/**Si es la primera vez que se ejecuta el código, se crearán dos arrys,  *uno que representa las plazas de aparcamiento pequeñas y otro que  *representará las plazas grandes.  */if (!isset($_SESSION['pequeno'])){	$_SESSION['pequeno'] = construir_array('pequeno');	$_SESSION['grande'] = construir_array('grande');}//PROCEDO A EJECUTAR LA ACCIONif (isset($tamano)) {	if ($opcion == 'aparca'){		aparcar($tamano);	}else if ($opcion ==='retira') {		$plaza = isset($_POST['plaza']) ? $_POST['plaza'] : null;		if (!isset($plaza)){			echo 'ingresa la plaza del coche a retirar';		}else{			if (retirar($tamano, $plaza)) {				echo 'El coche de la plaza Numero '.$plaza.' se retiro bien';			}else{				echo '[ERROR] al retirar el coche de la plaza numero '.$plaza;			}					}	}else{		echo '[ERROR] la opcion no es valida.';	}}echo '<br><br>';echo '<a href = "index.php">VOLVER</a>';?>

estado.php
Código: [Seleccionar]
<?phpsession_start();echo '<a href="pruebas.php"><VOLVER</a>';echo '<h1>REFERENCIAS: <h1>';echo '<h3>0 ===> PLAZA_LIBRE</h3>';echo '<h3>1 ===> PLAZA_OCUPADA</h3>';echo '<h1>COCHES GRANDES</h1>';echo '<pre>';var_dump($_SESSION['grande']);echo '</pre>';echo '<h1>COCHES PEQUEÑOS</h1>';echo '<pre>';var_dump($_SESSION['pequeno']);echo '</pre>';echo '<br><br>';echo '<a href = "index.php">VOLVER</a>';?>


Saludos. ;D

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".