Formulaire moteur de recherche PHP

Fermé
Nicolas - 12 août 2021 à 15:05
 Nicolas - 12 août 2021 à 21:02
Bonjour,
Je suis un débutant dans le code, le php je me connais pas trop mais je voulais faire un site web pour aider les élèves qui ont des difficultés a chercher leur formation/école, du coup j'ai commencé a faire le site et remplir la base de données mais je n'arrive pas a comprendre le code nécessaire qui fera la communication avec la base de données.
Je m'explique en faite l'élève une fois rempli le formulaire il pourra avoir toutes les écoles en fonction de ces réponses, exemple il habite en bretagne et il veut une école en design avec une alternance.

J'ai un ami qui ma envoyé ce conseille,

" l'idée serait plutôt que toutes les checkboxes aient le meme nom et soit un tableau (name=region[]) et aussi une value="nom_de_la_region" ou si tu as une table des régions l'id de région. De cette manière tu récupères un truc du type $_GET["region"] qui sera un tableau par ex ["hauts de france", "pays de loire"] ou bien si tu travailles sur les id [3,7]
ensuite tu génères la requete en parcourant le tableau et en rajoutant des clauses à chaque fois à l'aide d'une boucle foreach "

Mais je vais être honnête avec vous, transformer ça en code je ne sais pas comment le faire est ce que vous pouvez m'aider s'il vous plaît ?


Configuration: Windows / Chrome 92.0.4515.131

2 réponses

jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
12 août 2021 à 17:29
Niveau formulaire, je te conseille d'utiliser du POST au lieu du GET
 <form action="recherche.php" method="POST"> 
 


Au niveau du code php
<?php

$regions = !empty($_POST['region']) ? $_POST['region'] : NULL;
var_dump($regions); // pour voir ce que contient ta variable regions ( en l'occurrence.. un array )

$strRegions = join("','" , $regions); // on concerti la variable en liste texte... 


Avant de continuer, je t'invite à jeter un oeil à ceci.. vu que tu fais du PDO
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Et donc
//préparation de la requête 
 $sql = "SELECT * FROM audiovisuel WHERE region IN ('".$regions."')";
//Execution de la requete
try{
  $requete = $bdd -> prepare($sql) ;
  $requete->execute() ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
}

$result = $requete->fetchall(PDO::FETCH_ASSOC);
var_dump($result ); // pour voir ce que contient ta variable result ( en l'occurrence.. un array )

if(!empty($result )){
   echo "<table> <tr><th>Formation</th> <th>Lieu</th> <th>Alternance</th> <th>Duree</th></tr>";
   foreach ($result as $row){
       echo "<tr><td>".$row['region']."</td><td>".$row['lieu']."</td> ><td>".$row['alternance']."</td> ><td>".$row['date']."</td></tr>";
   }
   echo "</table>"; 
}else{
  echo " Aucun résultat";
}

1
Je vais essayer de comprendre le pdo puis je vais essayer en faisant des tests en me basant sur vos exemples !
Merci beaucoup encore une fois !
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
12 août 2021 à 16:15
Bonjour,

Ton ami est de bons conseils.

Par contre, pour t'aider, il va d'abord falloir que tu nous montres ce que tu as commencé à faire...

NB: Pour poster ton code correctement sur le forum, tu devras utiliser les balises de code
Explications ( à lire ENTIEREMENT !! ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code


0
Le formulaire :
<div class="container">
    <h2>Localisation</h2>
    <form action="recherche.php" method="GET">
    <div class="localisation">
    <div class="er">
       <div class="region">Choisis ta région</div>
       <div class="ex"><section><input type="checkbox" name="region" id="" value="Auvergne-Rhones-Alpes">Auvergne-Rhônes-Alpes</section>
        <section><input type="checkbox" name="region[]" id="" value="Bourgogne-Franche-Comte">Bourgogne-Franche-Comté</section>
        <section><input type="checkbox" name="region[]" id="" value="Bretagne">Bretagne</section>
        <section><input type="checkbox" name="region[]" id="" value="Centre-Val-de-Loire">Centre-Val de Loire</section>
        <section><input type="checkbox" name="region[]" id="" value="Corse">Corse</section>
        <section><input type="checkbox" name="region[]" id="" value="Grand-Est">Grand Est</section>
        <section><input type="checkbox" name="region[]" id="" value="Haut-de-France">Haut-de-France</section>
        <section><input type="checkbox" name="region[]" id="" value="Ile-de-France">Ile-de-France</section>
        <section><input type="checkbox" name="region[]" id="" value="Normandie">Normandie</section>
        <section><input type="checkbox" name="region[]" id="" value="Nouvelle-Aquitaine">Nouvelle-Aquitaine</section>
        <section><input type="checkbox" name="region[]" id="" value="Occitanie">Occitanie</section>
        <section><input type="checkbox" name="region[]" id="" value="Pays-de-Loire">Pays de Loire</section>
        <section><input type="checkbox" name="region[]" id="" value="Provences-alpes-cotes-azur">Provences-Alpes-Côte</section>
        <section><input type="checkbox" name="region[]" id="">Peu m'importe</section>
        </div>
        <input type="submit" value="Envoyer">
    </div>
  


    </div>
        
    
    </div>
<h2>Domaine</h2>
<div class="domaine">
   
    <section><input type="checkbox" name="audiovisuel" id="">Audiovisuel</section>
    <section><input type="checkbox" name="communication" id="">Communication</section>
    <section><input type="checkbox" name="design" id="">Design</section>
    <section><input type="checkbox" name="gestion" id="">Gestion de Projet</section>
    <section><input type="checkbox" name="informatique" id="">Informatique</section>
    <section><input type="checkbox" name="marketing" id="">Marketing</section>
    <section><input type="checkbox" name="multimedia" id="">Multimedia</section>
    <section><input type="checkbox" name="ux" id="">UX/UI</section>
    <section><input type="checkbox" name="autres" id="">Autres</section>

</div>
<h2>Type de formation</h2>
<div class="formation">
    <section><input type="checkbox" name="initial" id="">Initial</section>
    <section><input type="checkbox" name="alternance" id="">Alternance</section>
    <section><input type="checkbox" name="all" id="">Peu m'importe</section>

</div>
<h2>Durée d'étude</h2>
<div class="duree">
    <section><input type="checkbox" name="1an" id="">1 an</section>
    <section><input type="checkbox" name="3ans" id="">3 ans</section>
    <section><input type="checkbox" name="all" id="">Peu m'importe</section>

</div>
<button>Trouver des informations</button>
</form>


Le code en php, fin ce que j'essaie de comprendre mais j'ai pas trop bien compris le fonctionnement du conseil de mon pote....
 $req = "SELECT * FROM audiovisuel WHERE region={$_GET[region]}";

$stmt = $db->query($req);
$result = $stmt->fetchall(PDO::FETCH_ASSOC);
echo "<table> <tr><th>Formation</th> <th>Lieu</th> <th>Alternance</th> <th>Duree</th></tr>";
foreach ($result as $row){
    echo "<tr><td>".$row['region']."</td><td>".$row['lieu']."</td> ><td>".$row['alternance']."</td> ><td>".$row['date']."</td></tr>";
}
echo "</table>"; 
0