Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] si existe variable en la session no va

Estas en el tema de si existe variable en la session no va en el foro de PHP en Foros del Web. Hola, en mi sistema de reservas en la ultima pagina donde se reserva primero se comprueba disponibilidad y si no esta disponible declaro una variable ...
  #1 (permalink)  
Antiguo 17/01/2014, 03:01
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
si existe variable en la session no va

Hola,
en mi sistema de reservas en la ultima pagina donde se reserva primero se comprueba disponibilidad y si no esta disponible declaro una variable de session y el script se para y redirrecciona,
si esta disponible el script sigue e inserta la reserva y genera un id que guardo como variable en la session.
Asi:
Código PHP:
// check availability
$result mysql_query ("SELECT llegada, salida, propiedad from bookings where ( propiedad = '$propiedad' )
AND (('$llegada' BETWEEN llegada AND date_sub(salida, interval +1 day)) 
or ('$salida' BETWEEN date_sub(llegada, interval -1 day) AND salida) or (llegada <= '$llegada' AND salida >= '$salida') or (llegada >= '$llegada' AND salida <= '$salida'))"
$dbh);
if (
$row mysql_fetch_array($result)){
do {
} while (
$row mysql_fetch_array($result));
 
$_SESSION['reservas']['paso3']['nodisponible'] = 'nodisponible';
header ("Location: bookingchoices3.php?propiedad=$propiedad");
}
else{

$query "insert into bookings (id, llegada, tipo, tiporeserva, salida, tipo_sal, hora_llegada, hora_salida, propiedad, cliente, reservado)" 
"values ('$id', '$llegada', 'llegada', 'cliente', '$salida', 'salida', '$hourarrival', '$hourdeparture', '$propiedad', '$name', NOW())"
mysql_query($query); 

$query mysql_query("SELECT LAST_INSERT_ID() AS myid"$dbh); 
$lastid mysql_fetch_array($query);

// echo  $lastid["myid"];
$id $lastid["myid"];
// echo "test $id";
 
$_SESSION['reservas']['paso3']['id'] = $id;
etc 
Hay dos casos donde se ejecutará el header:

1. Si da a botón atrás la reserva ya está hecha y será rediregido con el header ya que al recargar el script va a ejecutar el header ya que ya no está disponbible,
en este caso se ha generado las variables nodisponible y id del paso 3.

2. De mientras estaba rellenando el formulario de reserva otro ha reservado las mismas fechas y al ya no estar disponible se va a ejecutar el header. Se ha generado únicamente la variable nodisponible del paso 3.

En la página de la redirección tengo esto:
Código PHP:
if(isset($_SESSION['reservas']['paso3']['id'])){
 
$ids=$_SESSION['reservas']['paso3']['id'];
$result mysql_query ("SELECT id, statement from orders WHERE statement = 'unpaid' AND booked='booked' AND id = '$ids'"$dbh);
  while (
$row mysql_fetch_array($result)){           
$sql mysql_query("DELETE FROM bookings WHERE id= '$ids'");
$sql mysql_query("UPDATE orders SET booked='deleted' WHERE id = '$ids'");
unset(
$_SESSION['reservas']['paso3']);
  }
    if(isset(
$_SESSION['reservas']['paso3']['nodisponible'])){
echo 
"<p class='red'>We are sorry, $propiedad has just been rented out and is not available for those dates anymore, please try some other dates. </p>";
unset(
$_SESSION['reservas']['paso3']);
}
//end else no disponible
}//end if isset id
if(isset($_SESSION['reservas']['paso1'])){
unset(
$_SESSION['reservas']['paso1']);
}
if(isset(
$_SESSION['reservas']['paso2'])){
unset(
$_SESSION['reservas']['paso2']);

Si lo tengo en este orden, si hago una reserva doy boton atras al ser rediregida a esta segunda pagina esto se ejecuta bien y la reserva se elimina y puedo hacerla de nuevo:
if(isset($_SESSION['reservas']['paso3']['id'])){
pero si empiezo a hacer una reserva, de mientras hago como si otra persona reservara simultáneamente esto no se ejecuta:
if(isset($_SESSION['reservas']['paso3']['nodisponible'])){
pero usando esto que viene despues si imprime el array con el nodisponible:
echo "<pre>";
print_r($_SESSION['reservas']);
echo "</pre>";

Ahora si pongo el isset variable nodisponible antes del isset variable id, entonces si se ejecuta.


Donde puede estar el fallo?

Última edición por helenp; 17/01/2014 a las 03:15
  #2 (permalink)  
Antiguo 17/01/2014, 03:37
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: si existe variable en la session no va

Asi tampoco va:
if(!isset($_SESSION['reservas']['paso3']['id']) || isset($_SESSION['reservas']['paso3']['nodisponible'])){
imprime:
Array
(
[paso3] => Array
(
[nodisponible] => nodisponible
)

)
  #3 (permalink)  
Antiguo 17/01/2014, 03:56
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: si existe variable en la session no va

No entiendo nada,
si hago lo contrario asi:
Código PHP:
 if(!isset($_SESSION['reservas']['paso3']['id']) || isset($_SESSION['reservas']['paso3']['nodisponible'])){
echo 
"<p class='red'>We are sorry, $propiedad has just been rented out and is not available for those dates anymore, please try some other dates. </p>";
unset(
$_SESSION['reservas']['paso3']);
}
//end else no disponible

if(isset($_SESSION['reservas']['paso3']['id'])){
 
$ids=$_SESSION['reservas']['paso3']['id'];
$result mysql_query ("SELECT id, statement from orders WHERE statement = 'unpaid' AND booked='booked' AND id = '$ids'"$dbh);
  while (
$row mysql_fetch_array($result)){           
$sql mysql_query("DELETE FROM bookings WHERE id= '$ids'");
$sql mysql_query("UPDATE orders SET booked='deleted' WHERE id = '$ids'");
unset(
$_SESSION['reservas']['paso3']);
  }
  }
//end if isset id 
El primer if funciona, pero el segundo no, como si no existiese la variable id.

Sin embargo si lo pongo como estaba primero y imprimo antes de la ejecución:
Código PHP:
echo "<pre>";
print_r($_SESSION['reservas']);
echo 
"</pre>"
if(isset(
$_SESSION['reservas']['paso3']['id'])){
 
$ids=$_SESSION['reservas']['paso3']['id'];
$result mysql_query ("SELECT id, statement from orders WHERE statement = 'unpaid' AND booked='booked' AND id = '$ids'"$dbh);
  while (
$row mysql_fetch_array($result)){           
$sql mysql_query("DELETE FROM bookings WHERE id= '$ids'");
$sql mysql_query("UPDATE orders SET booked='deleted' WHERE id = '$ids'");
unset(
$_SESSION['reservas']['paso3']);
  }
  }
//end if isset id
      
if(isset($_SESSION['reservas']['paso3']['nodisponible'])){
echo 
"<p class='red'>We are sorry, $propiedad has just been rented out and is not available for those dates anymore, please try some other dates. </p>";
unset(
$_SESSION['reservas']['paso3']);
}
//end else no disponible[/PHP
Imprime correctamente ambas variables:
[
paso3] => Array
        (
            [
id] => 4434
            
[nodisponible] => nodisponible
        

osea la variable id existe
estoy hecho un lio ya tantos dias, puf

pd. voy a cambiar a mysqli una vez termino con esto, al menos en estas paginas para no tocarles mas, el resto poco a poco, espero no me de quebradores de cabeza
  #4 (permalink)  
Antiguo 17/01/2014, 04:12
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años
Puntos: 6
Respuesta: si existe variable en la session no va

puf, al final era que habia que poner un else, aunque no lo entiendo,
pero bueno, funciona .....
Código PHP:
if(isset($_SESSION['reservas']['paso3']['id'])){
 
$ids=$_SESSION['reservas']['paso3']['id'];
$result mysql_query ("SELECT id, statement from orders WHERE statement = 'unpaid' AND booked='booked' AND id = '$ids'"$dbh);
  while (
$row mysql_fetch_array($result)){           
$sql mysql_query("DELETE FROM bookings WHERE id= '$ids'");
$sql mysql_query("UPDATE orders SET booked='deleted' WHERE id = '$ids'");
unset(
$_SESSION['reservas']['paso3']);
  }
  }
//end if isset id 
  
else {
if(isset(
$_SESSION['reservas']['paso3']['nodisponible'])){
echo 
"<p class='red'>We are sorry, $propiedad has just been rented out and is not available for those dates anymore, please try some other dates. </p>";
unset(
$_SESSION['reservas']['paso3']);
}
    }
//end else no disponible 

Etiquetas: formulario, mysql, select, session, sql, variable
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 14:24.