verification d'une periode avant enregistrement

Eléphanteau du PHP | 19 Messages

19 oct. 2013, 03:52

Bonjour à tous, merci pour votre aide cela en rapport avec les post précédents

j'ai une soucis au niveau d'un script, j'explique je suis chargé de créer une apps qui permet la gestion des hotels

mon soucis se trouve au niveau de la reservation des chambres et cela lors de la verification d'une periode de reservation avant enregistrement. mon probleme est que on une chambre ne doit pas faire l'objet de deux reservations a la même periode je vous en prie aidez-moi.

voilà mon script:


<?php
if(isset($_POST['Enregistrer']))
{
if(isset($_POST['id_client']) and isset($_POST['id_chambre']) and isset($_POST['datedeb']) and isset($_POST['datefin']) and isset($_POST['prix']))
{

//connexion et selection
$cnx=mysql_connect("", "
", "");
$bd=mysql_select_db("", $cnx);
//choix des variables:

$idclient=mysql_real_escape_string($_POST['id_client']);
$idchambre=mysql_real_escape_string($_POST['id_chambre']);
$datedeb=mysql_real_escape_string($_POST['datedeb']);
$datefin=mysql_real_escape_string($_POST['datefin']);
$nbre=mysql_real_escape_string($_POST['nbre']);
$datenreg= date("Y-m-d");
$prix=mysql_real_escape_string($_POST['prix']);
$montant=$nbre*$prix;


//verification de la disponibilité des chambres

$sql="SELECT count(*) FROM reservation WHERE id_chambre=$idchambre AND
($datedeb >= datedeb AND $datedeb < datefin)
OR
($datefin > datedeb AND $datefin <= datefin)
OR
($datedeb < datedeb) AND (datedeb < $datefin)
OR
($datedeb = datedeb) AND (datefin = $datefin)
OR ($datedeb = datedeb)";

$result=mysql_query($sql, $cnx) or die('Error SQL!<br/>'.$sql.'<br/>'.mysql_error());
$verif=mysql_fetch_array($result);
if($verif[0]==0)
{
//enregistrement de la reservation du client
$sql='INSERT INTO reservation VALUES("", "'.$idclient.'", "'.$idchambre.'", "'.$datedeb.'", "'.$datefin.'", "'.$nbre.'", "'.$datenreg.'", "'.$prix.'", "'.$montant.'")';
$reserv=mysql_query($sql, $cnx) or die('Error SQL!<br/>'.$sql.'<br/>'.mysql_error()) ;

}
else
{
$erreur="la chambre est occupée durant cette periode";
}
}
else
{
$erreur='Veuillez remplir le formulaire';
}
}
merci d'avance.

Mammouth du PHP | 504 Messages

19 oct. 2013, 11:28

Slt,

Et c'est quoi le probleme??

Tu as quoi comme erreur PHP ou mysql ?

Déjà dans cette requete, je mettrai une parenthèse supplémentaire pour les dates (toutes les conditions da dates doivents etre rassemblé et pas vérifié une à une.
SELECT count(*) FROM reservation WHERE id_chambre=$idchambre AND (
)
Ensuite il sa'git de vérifier si la chambre est prise ou non à une date donnée avec comme champ dans ta base datedeb et datefin:
- $datedeb <= datedeb AND $datefin <= datefin
- $datedeb <= datedeb AND $datefin >= datefin
- $datedeb >= datedeb AND $datefin >= datefin
- $datedeb >= datedeb AND $datefin <= datefin

Donc:
SELECT count(*) FROM reservation WHERE id_chambre=$idchambre AND (
($datedeb <= datedeb AND $datefin <= datefin) OR
($datedeb <= datedeb AND $datefin >= datefin) OR
($datedeb >= datedeb AND $datefin >= datefin) OR
($datedeb >= datedeb AND $datefin <= datefin)
)
Peut etre manque t il des conditions sur les dates, à toi de les rajouter.

Eléphanteau du PHP | 19 Messages

19 oct. 2013, 11:52

le probleme est que:
lorsque j'ajoute une reservation concernant la même chambre et la même periode il n'ya pas d'erreur et de client peuvent se voir attribuer la même chambre a la même periode du coup y a des doublons ki se font dans ma base

Mammouth du PHP | 504 Messages

19 oct. 2013, 12:01

tu as essayé la requete que je t'ai donné ? tu as bien les meme format de date dans tes $_post et ta base?

Eléphanteau du PHP | 19 Messages

19 oct. 2013, 12:23

merci probleme resolu

Eléphanteau du PHP | 19 Messages

28 oct. 2013, 11:28

merci Damien_55 il me manquait que les parentheses

Eléphanteau du PHP | 19 Messages

05 nov. 2013, 17:28

bonsoir
je reviens encore sur cette affaire de verification d'une periode avant enregistrement

il se trouve que les message d'erreur prevue ne s'affichent pas
je ne peux pas faire des reservation sur la chambre à une differente verifiction.
et je veux aussi afficher toutes les données que j'ai posté. Aidez-moi SVP. Merci.


voici le code:

<?php
//verification de la validation du gerant:
if(isset($_POST['Enregistrer']))
{
//verification des donnée saisies
if(isset($_POST['id_client']) and isset($_POST['id_chambre']) and isset($_POST['datedeb']) and isset($_POST['datefin']) and isset($_POST['prix']))
{
//connexion et selection de la base données:
$cnx=mysql_connect("localhost", "root", "");
$bd=mysql_select_db("hotelgest", $cnx);

//definition des variables:

$idclient=mysql_real_escape_string($_POST['id_client']);
$idchambre=mysql_real_escape_string($_POST['id_chambre']);
$datedeb=mysql_real_escape_string($_POST['datedeb']);
$datefin=mysql_real_escape_string($_POST['datefin']);
$nbre=mysql_real_escape_string($_POST['nbre']);
$datenreg= date("Y-m-d");
$prix=mysql_real_escape_string($_POST['prix']);
$montant=$nbre*$prix;

//verifions la disponibilité des chambres:

$sql='SELECT count(*) FROM reservation WHERE id_chambre="'.$idchambre.'" AND 
(("'.$datedeb.'" <= datedeb AND "'.$datefin.'" <= datefin)
OR
("'.$datedeb.'" <= datedeb AND "'.$datefin.'" >= datefin) 
OR
("'.$datedeb.'" >= datedeb AND "'.$datefin.'" >= datefin) 
OR
("'.$datedeb.'" >= datedeb AND "'.$datefin.'" <= datefin))';	

$query= mysql_query($sql, $cnx) or die('Error SQL!<br/>'.$query.'<br/>'.mysql_error());
$verif=mysql_fetch_array($query);

if($verif[0]==0)
{
$sql1='INSERT INTO reservation VALUES("", "'.$idclient.'", "'.$idchambre.'", "'.$datedeb.'", "'.$datefin.'","'.$nbre.'", "'.$datenreg.'", "'.$prix.'", "'.$montant.'")';
$sql2='INSERT INTO facture VALUES("", "'.$montant.'", "'.$datenreg.'", "'.$idclient.'")';
$sql3='SELECT * FROM reservation, facture, client WHERE idclient="'.$idclient.'" AND facture_date="'.$datenreg.'"';
$reserv=mysql_query($sql1, $cnx);
$enregfact=mysql_query($sql2, $cnx);
$recu=mysql_query($sql3);
echo "<script type=\"text/javascript\"> alert('Eregistrement réussie');window.location='validation.php';</script>";

while ($row=mysql_fetch_assoc($recu))
{
echo"<fieldset>
<center><legend>RECU</legend></center>";
echo stripslashes($row['client_nom']);
echo stripslashes($row['client_pren']);
echo"</fieldset>";

}

exit();
}
else
{
echo'Cette Chambre est occupée pendant cette periode';
}
}
else
{
echo'Veuillez remplir le formulaire!';
}
}
?>
le seul message d'erreur qui s'affiche est "Cette Chambre est occupée pendant cette periode"