Comparer les données d'un formulaire avec celle d'une BDD

Résolu/Fermé
roms75001 Messages postés 390 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 - Modifié par Whismeril le 15/04/2015 à 13:34
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 - 17 avril 2015 à 14:01
Bonjour,

Étant étudiant en deuxième année de BTS Informatique et réseaux pour l'industrie et les services techniques (IRIS), j'ai un projet à réaliser pour l'examen de fin d'année.

Pour ma part, je dois réaliser un site web d'achat de billets d'avion. Le site doit pouvoir proposer différentes destinations, avec différents horaires, avec différentes compagnies etc. Il serait équivalent aux sites tels que https://www.govoyages.com/ ou encore https://www.kayak.fr/ .

J'ai commencé par faire mon HTML ainsi que ma base de données sous Mysql mais je suis bloqué sur le PHP. Je dois récupérer les données du formulaire préalablement remplit par l'utilisateur afin de les comparer à ma base de données et ainsi lui retourner les vols disponibles.


Voici mon code HTML :
<html>
    <head>
        <title>Choose your flight !</title> 
  <meta charset="utf-8" />
  <meta http-equiv="Content-Language" content="fr-fr" />
  <script type="text/javascript" src="calendrier.js"></script> 
  <link rel="stylesheet" media="screen" type="text/css" href="design.css" />      
 </head>
 
 <body>
 
  <?php include("header.php"); ?> 
  <?php include("menu.php"); ?>
 
  <!-- Corps -->
  <div id="corps">
   <!-- Formulaire pour trouver un vol -->  
   <div id="div_formulaire" class="div_corps">
    <caption><h1 id="titre_form"> TROUVER UN <span class="mots_clés">VOL</span> </h1></caption>
   <form method="post" action="traitement_recherche_vol2.php"><table>
 
    <tr><td class="colonne1">
     <label for="alle_retour" class="colonne1">Aller Retour</label>
     <input type="radio" name="aller_retour" checked>
    </td>
    <td class="colonne2">
     <label for="aller" class="colonne1">Aller Simple</label>
     <input type="radio" name="aller_retour">
    </td></tr>
 
    <tr><td class="colonne1">
     <label>Départ</label> : <br><input type="text" name="depart" />
    </td>
    <td class="colonne2">
     <label>Arrivée</label> : <br><input type="text" name="arrivee" />
    </td></tr>
 
    <!--Tableau qui contiendra le calendrier -->
     <td><table class="ds_box" cellpadding="0" cellspacing="0" id="ds_conclass" style="display: none;">
     <tr>
      <td id="ds_calclass"></td>
     </tr>
     </table></td> 
 
    <tr><td class="colonne1">
     <label>Date de départ :</label><br><input type="text" name="date_depart" onclick="ds_sh(this);" />
    </td>
    <td class="colonne2">   
     <label>Date de retour :</label><br><input type="text" name="date_retour" onclick="ds_sh(this);" />
    </td></tr>
    <tr><td class="colonne1">
     <label name="adultes" class="colonne1_1">Adulte(s) :</label>
     <label name="enfants" class="colonne1_2">Enfant(s) :</label>
    </td>
    <td class="colonne2">
     <label name="classe" "colonne1_1">Classe :</label>
     <label name="vol_direct" class="colonne2_2">Vol direct </label>
    </td></tr>
    <tr><td class="colonne1">
     <select name="adultes"> <!-- menu deroulant pour choisir le nombre de voyageurs -->
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
     </select>
     <select name="enfants" class="colonne1_1_2">
        <option value="1">0</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
     </select></td>
     <td class="colonne2"><select name="classe" id="classe"> 
        <option value="economique">Economique</option>
        <option value="affaire">Affaire</option>
        <option value="premiere">Première</option>
     </select>
     <input type="checkbox" name="vol_direct" class="colonne2_2">
    </td></tr>
 
    <tr><td></td>
    <td class="colonne2">
     <input type="submit" value="Rechercher un vol" name="rechercher" class="rechercher"/>
    </td></tr>
 
   </table>
   </form></div> <!-- fin de la div "formulaire" -->   
 
   <div id="image">
   <img id="monde" src="./images/monde.jpg" alt="monde"/>
   </div>
 
  <?php include("footer.php"); ?>
  </div> <!-- fin de la div "corps" -->
 </body>
</html>


Ainsi que le début de mon code PHP :

<?php
 
// On commence par récupérer les champs
if(isset($_POST['depart'])) $depart=$_POST['depart'];
else      $depart="";
 
if(isset($_POST['arrivee']))      $arrivee=$_POST['arrivee'];
else      $arrivee="";
 
if(isset($_POST['date_depart']))      $arrivee=$_POST['date_depart'];
else      $date_depart="";
 
if(isset($_POST['date_retour']))      $arrivee=$_POST['date_retour'];
else      $date_retour="";
 
if(isset($_POST['adultes']))      $arrivee=$_POST['adultes'];
else      $adultes="";
 
if(isset($_POST['enfants']))      $arrivee=$_POST['enfants'];
else      $enfants="";
 
if(isset($_POST['classe']))      $arrivee=$_POST['classe'];
else      $classe="";
 
 
 
// On vérifie si les champs sont vides
if(empty($depart) OR empty($arrivee) OR empty($date_depart) OR empty($date_retour) OR empty($adultes) OR empty($enfants) OR empty($classe))
    {
    echo '<font color="red">Attention, seul le champs <b>ICQ</b> peut rester vide !</font>';
    }
 
// Aucun champ n'est vide, on peut enregistrer dans la table
else 
{
 // Connexion à la base de donnée
 try
  {
  $bdd = new PDO ('mysql:host=localhost;dbname=databasegestionvol;charset=utf8', 'root', '');
  }
 
 catch(Exception $e)
  {
  die('Erreur : '.$e->getMessage());
  }
}
?>


Comme vous le voyez, je stock les données entrées par l'utilisateur dans des variables mais je ne sais pas comment pourrais-je les comparer à ma base de données afin de retourner à l'utilisateur les vols correspondants.

Merci d'avance

EDIT: Précision du langage dans la coloration syntaxique.

6 réponses

Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
Modifié par Thorak83 le 15/04/2015 à 17:41
Bonjour,
Sans connaitre le nom des tables, ni le nom des champs, ça va pas être simple.
Après la connexion, faire une requête SQL avec les critères récupérés.

$sql = "SELECT champ1, champ2,... From tableVols WHERE champ1 = '".$val1."' AND champ2 = '".$val2."' ORDER BY champdeTrie";
$result = $bdd->query($sql);
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
 echo $row['Champ1'];
}

C'est un exemple, a vous d'adapter
Cordialement
0
roms75001 Messages postés 390 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 7
16 avril 2015 à 11:02
Bonjour Thorak83,

Tout d'abord, merci pour votre réponse.

Veuillez m'excuser, voici le nom de mes tables ainsi que mes champs :

Table "aeroport" :


Table "vol" :


La table "aeroport" me servira à trouver le "codeIATA" de l'aéroport que l'utilisateur aura saisi (c'est à dire l'identifiant de l'aéroport).
Ainsi, avec ce "codeIATA" je pourrais trouver dans la table "vol" les vols correspondant.

Si un exemple correspondant à mes tables pourrait m'être proposé, cela me serais plus parlant.

Cordialement.
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
16 avril 2015 à 11:48
Voici
function dateusfr($dateus)
{
  $date=explode("-",$dateus);
  return $date[2]."/".$date[1]."/".$date[0];
}
function datefrus($datefr)
{
  $date=explode("/",$datefr);
  return $date[2]."-".$date[1]."-".$date[0];
}
$sql  = "SELECT * FROM vol WHERE provenance = '".$depart."' AND destination = '".$arrivee."' AND dateDepart = '".datefrus($date_depart)."' AND dateArrivee = '".datefrus($date_retour)."'";
$result = $bdd->query($sql);
echo "<table>";
echo "<th>N°Vol</th><th>IDavion</th><th>Provenance</th><th>Destination</th><th>dateDepart</th><th>dateArrivee</th><th>HeureDepart</th><th>heureArrivee</th><th>Etat</th><th>Prix</th>";
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
  echo "<tr>";
  echo "<td>".$row['numeroVol']."</td>";
  echo "<td>".$row['IDavion']."</td>";
	echo "<td>".$row['provenance']."</td>";
	echo "<td>".$row['destination']."</td>";
	echo "<td>".dateusfr($row['dateDepart'])."</td>";
	echo "<td>".dateusfr($row['dateArrivee'])."</td>";
	echo "<td>".$row['heureDepart']."</td>";
	echo "<td>".$row['heureArrivee']."</td>";
	echo "<td>".$row['Etat']."</td>";
	echo "<td>".$row['Prix']."</td>";
  echo "</tr>";
}
echo "</table>";
0
roms75001 Messages postés 390 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 7
17 avril 2015 à 09:10
Un grand merci, cela va énormément m'aider.
0
roms75001 Messages postés 390 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 7
Modifié par roms95200 le 17/04/2015 à 09:57
Après exécution du code suivant:



<?php

// On commence par récupérer les champs
if(isset($_POST['depart'])) $depart=$_POST['depart'];
else $depart="";

if(isset($_POST['arrivee'])) $arrivee=$_POST['arrivee'];
else $arrivee="";

if(isset($_POST['date_depart'])) $arrivee=$_POST['date_depart'];
else $date_depart="";

if(isset($_POST['date_retour'])) $arrivee=$_POST['date_retour'];
else $date_retour="";

if(isset($_POST['adultes'])) $arrivee=$_POST['adultes'];
else $adultes="";

if(isset($_POST['enfants'])) $arrivee=$_POST['enfants'];
else $enfants="";

if(isset($_POST['classe'])) $arrivee=$_POST['classe'];
else $classe="";


// Connexion à la base de donnée
try
{
$bdd = new PDO ('mysql:host=localhost;dbname=databasegestionvol;charset=utf8', 'root', '');
}

catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

function dateusfr($dateus)
{
$date=explode("-",$dateus);
return $date[2]."/".$date[1]."/".$date[0];
}
function datefrus($datefr)
{
$date=explode("/",$datefr);
return $date[2]."-".$date[1]."-".$date[0];
}
$sql = "SELECT * FROM vol WHERE provenance = '".$depart."' AND destination = '".$arrivee."' AND dateDepart = '".datefrus($date_depart)."' AND dateArrivee = '".datefrus($date_retour)."'";
$result = $bdd->query($sql);
echo "<table>";
echo "<th>N°Vol</th><th>IDavion</th><th>Provenance</th><th>Destination</th><th>dateDepart</th><th>dateArrivee</th><th>HeureDepart</th><th>heureArrivee</th><th>Etat</th><th>Prix</th>";
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo "<tr>";
echo "<td>".$row['numeroVol']."</td>";
echo "<td>".$row['IDavion']."</td>";
echo "<td>".$row['provenance']."</td>";
echo "<td>".$row['destination']."</td>";
echo "<td>".dateusfr($row['dateDepart'])."</td>";
echo "<td>".dateusfr($row['dateArrivee'])."</td>";
echo "<td>".$row['heureDepart']."</td>";
echo "<td>".$row['heureArrivee']."</td>";
echo "<td>".$row['Etat']."</td>";
echo "<td>".$row['Prix']."</td>";
echo "</tr>";
}
echo "</table>";

?>



Quelques erreurs sont affichées :



Cordialement
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
17 avril 2015 à 10:00
plusieurs erreurs:
regardez cette partie de code, tout est en $arrivee =....
if(isset($_POST['depart'])) $depart=$_POST['depart'];
else      $depart="";

if(isset($_POST['arrivee']))      $arrivee=$_POST['arrivee'];
else      $arrivee="";

if(isset($_POST['date_depart']))      $arrivee=$_POST['date_depart'];
else      $date_depart="";
 
if(isset($_POST['date_retour']))      $arrivee=$_POST['date_retour'];
else      $date_retour="";
 
if(isset($_POST['adultes']))      $arrivee=$_POST['adultes'];
else      $adultes="";
 
if(isset($_POST['enfants']))      $arrivee=$_POST['enfants'];
else      $enfants="";
 
if(isset($_POST['classe']))      $arrivee=$_POST['classe'];
else      $classe="";
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
17 avril 2015 à 10:05
les autres erreurs viennent de la conversion datefr en dateus
Quel est le format de saisie des dates dans le formulaire ?
0
roms75001 Messages postés 390 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 7 > Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017
Modifié par roms95200 le 17/04/2015 à 10:23
Dans mon formulaire le format de saisie est par exemple "17/04/2015" en revanche sur ma BDD le format est du type "2015-04-17"
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
17 avril 2015 à 10:24
je n'ai aucune erreur personnellement
if(isset($_POST['depart'])) 
	$depart=$_POST['depart'];
else
  $depart="";

if(isset($_POST['arrivee']))      
	$arrivee=$_POST['arrivee'];
else      
	$arrivee="";

if(isset($_POST['date_depart']))      
	$date_depart=$_POST['date_depart'];
else      
	$date_depart="";
 
if(isset($_POST['date_retour']))      
	$date_retour=$_POST['date_retour'];
else      
	$date_retour="";
 
if(isset($_POST['adultes']))      
	$adultes=$_POST['adultes'];
else      
	$adultes="";
 
if(isset($_POST['enfants']))      
	$enfants=$_POST['enfants'];
else      
	$enfants="";
 
if(isset($_POST['classe']))      
	$classe=$_POST['classe'];
else      
	$classe="";
0
roms75001 Messages postés 390 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 7
17 avril 2015 à 10:42
Je n'ai plus d'erreur mais aucune valeur m'est retourné :



ps: merci pour votre patience

Cordialement
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
17 avril 2015 à 10:52
C'est déjà bien. Surement qu'aucun critère ne correspond à la recherche.
ajouter print_r($_POST);
tout en haut du fichier et coller ici ce qu'il affiche
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
roms75001 Messages postés 390 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 7
Modifié par roms95200 le 17/04/2015 à 11:01
Voici :

Array ( [aller_retour] => on [depart] => CDG [arrivee] => FCO [date_depart] => 16/06/2015 [date_retour] => 23/06/2015 [adultes] => 1 [enfants] => 1 [classe] => economique [rechercher] => Rechercher un vol )
N°Vol IDavion Provenance Destination dateDepart dateArrivee HeureDepart heureArrivee Etat Prix
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
17 avril 2015 à 11:34
C'est normal il n'y a pas de vol correspondant à ces critères
0
roms75001 Messages postés 390 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 7 > Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017
17 avril 2015 à 11:36
Si regardez à la 3eme et 4eme ligne de ma table vol
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
17 avril 2015 à 11:36
dans votre table vol à quoi correspond date_arrivée ?
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
17 avril 2015 à 11:38
si vous remplacez la requête SQL par
$sql  = "SELECT * FROM vol WHERE provenance = '".$depart."' AND dateDepart = '".datefrus($date_depart)."'";

vous aurez tous les vols en partance
0
roms75001 Messages postés 390 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 7 > Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017
Modifié par roms95200 le 17/04/2015 à 11:52
date_arrivee correspond à la date à laquelle l'avion arrivera a destination ( elle peut être différente de la date_depart pour les longs vols )
0
roms75001 Messages postés 390 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 7
Modifié par roms95200 le 17/04/2015 à 11:50
Avec la requete
$sql  = "SELECT * FROM vol WHERE provenance = '".$depart."' AND dateDepart = '".datefrus($date_depart)."'";


le site me retourne :

0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
Modifié par Thorak83 le 17/04/2015 à 12:07
manque un D dans dateArrivee en ligne 72
pareille etat en minuscule et prix aussi
 echo "<td>".dateusfr($row['DateArrivee'])."</td>";
echo "<td>".$row['etat']."</td>";
echo "<td>".$row['prix']."</td>";
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
17 avril 2015 à 12:07
erreur de jeunesse. Soit vous mettez tous vos champs en Maj soir tout en Minuscule c'est plus simple à gérer
0
roms75001 Messages postés 390 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 7 > Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017
17 avril 2015 à 12:14
Ah oui tout a fait j'avais pas fais attention à ce petit détail.

Désormais le site me renvoi bien la ligne correspondante et tout cela sans erreur ! :)
0
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
17 avril 2015 à 12:16
Si vous voulez les aller et retour essayez ceci
$sql  = "SELECT * FROM vol WHERE (provenance = '".$depart."' AND destination = '".$arrivee."' AND dateDepart = '".datefrus($date_depart)."') OR (provenance = '".$arrivee."' AND destination = '".$depart."' AND dateDepart = '".datefrus($date_retour)."')";
0
roms75001 Messages postés 390 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 9 juillet 2017 7 > Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017
17 avril 2015 à 12:19
Ca marche !!!!
Un grand merci pour votre aide et votre patience, vous m'avez retiré une grosse épine du pied ! :)
0