Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/01/2014, 03:01
helenp
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 15 años, 9 meses
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