Salut à toute la communauté,
Je débute totalement et, comme tout le monde ici, j'ai besoin d'aide concernant PHP et MySQL. Si une âme charitable passait par là...
Voici mon cas :
Grâce à la validation d'un formulaire à 3 inputs ('agence' (nom de l'agence de location de voitures), 'debut' (date de début de la location souhaitée), 'fin'(date de fin de la location souhaitée), j'accède à une nouvelle page dans laquelle doit s'afficher la disponiblité des voitures à louer selon les critères préalablement choisis. Ce qui signifie que s'il l'on souhaite louer un vehicule dans telle agence à telles dates, ne s'afficheront que les vehicules TOTALEMENT libres de cette agence.
Il y a donc une jointure entre la table "vehicules" (qui regroupe tous les vehicules des differentes agences) et la table commandes (qui concerne toutes les commandes). Le but étant de conserver à l'affichage uniquement ce qui reste de la table "vehicules" moins la table "commandes " comme dans le schema ci-dessous avec la partie bleu:
J'ai réussi a retranscrire cela dans mon code grâce à un LEFT JOIN et cela marche très bien. Mais mon problème est que cela ne fonctionne qu'avec une seule commande. Dès que j'en mets une deuxieme, tout part en vrille. Je suppose qu'il faudrait faire en sorte que mes conditions présentes dans mon 'if' s'applique commande par commande. Avec une boucle peut-être ? Mais j'ai aucune idée de comment faire... Et c'est pas faute d'avoir essayé
Aussi quelqu'un saurait comment faire ? Merci par avance pour votre aide
PS : Voici mon code (je précise que la fonction execRequete est une function qui a été prédefini et qui regroupe le "$pso->query" le BindValue etc...):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 if ( !empty($_POST['agence']) && !empty($_POST['debut']) && !empty($_POST['fin']) ) { $commandes = execRequete("SELECT * FROM commandes" ); while( $commande = $commandes->fetch() ){ //on fait un explode pour retirer les tirets des dates $debut = explode("-", $_POST['debut']); $fin = explode("-", $_POST['fin']); $date_heure_depart = explode("-", $commande['date_heure_depart']); $date_heure_fin = explode("-", $commande['date_heure_fin']); // on concatene le resultat des explodes pour obtenir un entier exploitable pour les comparaisons $debut_concat = $debut[0] . $debut[1] . $debut[2]; $fin_concat = $fin[0] . $fin[1] . $fin[2]; $date_heure_depart_concat = $date_heure_depart[0] . $date_heure_depart[1] . $date_heure_depart[2]; $date_heure_fin_concat = $date_heure_fin[0] . $date_heure_fin[1] . $date_heure_fin[2]; } //conditions si les dates choisies sont avant ou apres les dates de location deja enregistrées en BDD if(($debut_concat < $date_heure_depart_concat && $fin_concat < $date_heure_depart_concat) || ($debut_concat > $date_heure_fin_concat && $fin_concat > $date_heure_depart_concat)){ //alors on affiche tous les vehicules $vehicules = execRequete("SELECT * FROM vehicules v WHERE id_agence =:id_agence", array( ':id_agence' => $_POST['agence'] )); } else{ //sinon on affiche que ceux qui n'on pas encore été loués $vehicules = execRequete("SELECT * FROM vehicules v LEFT JOIN commandes c ON v.id_vehicule = c.id_vehicule WHERE c.id_commande IS NULL AND v.id_agence =:id_agence", array( ':id_agence' => $_POST['agence'] )); } }
Partager