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
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']);
}
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?