Bonjour tout le monde,
Voilà je viens vers vous aujourd'hui car je n'arrive pas a trouvé de solution à mon problème malgré de nombreuses recherches et de test.
Tout d'abord, j'ai 3 tables (ville_francaise, region, pays) c'est 3tables ont plusieurs champs.
Voici les table dans ma base des données :
Table ville_francaise (c'était ma tout première table)
Table region (la deuxieme que j'ai rajouté apres)
Table pays (la dernière ajoutée après avoir fait des expériences pour apprendre sur deux tables)
Jusque là tout va bien ! J'ai réussi a faire mes tables avec des clef primaires et secondaire.Oui je sais que, j'ai des pays étranger qui se retrouve en lien dans ma table ville_francaise et region mais c'est juste des tables factifs pour m'entrainer avant de réalisé dans la vrais BDD. De plus, c'est parce que au début je travaillais que sur deux tables et la table pays je l'ai rajouté bien après pour voir si j'arrivais avec plus que une ou deux tables. Donc je sais que par exemple la France-comté ne ce trouve pas au Portugal mais les noms on s'en fiche un peu c'est juste pour apprendre a utiliser plusieurs tables.
J'ai également réussi a faire ma requête SQL qui est :
La où sa coince c'est à partir du moment ou j'essaie de connecter ma recherche par mot clef avec ma requête. En effet, j'ai une recherche de mot clef (pas définit/donc ca peut être n'importe quelle mot dans la limite du raisonnable) que l'utilisateur va taper et en fonction de cette recherche sa doit lui ressortir toute les lignes liées à la recherche. Il y a la possibilité de recherche de 1mot à 6mots donc si il tape 0 mot sa doit rien lui sortir, par contre si il tape 1mot sa doit ressortir les lignes des tables par rapport a ce mot, si l'utilisateur tape 2 mots (truc et machin, ex), la requete doit permettre de ressortir toutes les lignes liées au mot truc d'un coté et au mot machin de l'autre coté mais également au mot truc machin ensemble.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 "SELECT * FROM ville_francaise v LEFT OUTER JOIN region r ON r.id_code_insee=v.id_code_insee LEFT OUTER JOIN pays p ON v.code_pays=p.code_pays WHERE p.nom LIKE '%%' "
Ma recherche de mot clef ce fait par un formulaire POST avec une classe 'search'.
Voici donc comment j'ai fait avec ma requête.
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 // Pour lier la recherche de mot clef à ma requête. if (!isset($_POST['search'])){ $_SESSION['motClef']= NULL; } // 1- On prepare la requete $requete=$bdd->prepare("SELECT * FROM ville_francaise v LEFT OUTER JOIN region r ON r.id_code_insee=v.id_code_insee LEFT OUTER JOIN pays p ON v.code_pays=p.code_pays WHERE p.nom LIKE '%".$_SESSION['motClef']."%'"); //Correspond a mes champs de recherche $requete->bindValue(':nom',$_SESSION['nom']); $requete->bindValue(':code_pays',$_SESSION['code_pays']); $requete->bindValue(':id_code_insee',$_SESSION['id_code_insee']); $requete->bindValue(':nom_region',$_SESSION['nom_region']); $requete->bindValue(':libelle_voie',$_SESSION['libelle_voie']); $requete->bindValue(':code_nature_voie',$_SESSION['code_nature_voie']); // 2- on exécute, avec les paramètres de la recherche $requete->execute();
Donc avec ce code j'ai tout qui s'affiche mais ma recherche par mot clef ne fonctionne pas. Je peut taper n'importe quoi j'aurai toujours le résultat ou j'ai toutes mes lignes qui ressortent.
J'ai alors fait un var_dump($requete); pour voir si il me lisait bien ma requete, et donc j'obtient :
object(PDOStatement)[4]
public 'queryString' => string 'SELECT * FROM ville_francaise v
LEFT OUTER JOIN region r ON r.id_code_insee=v.id_code_insee
LEFT OUTER JOIN pays p ON v.code_pays=p.code_pays
WHERE p.nom LIKE '%%'' (length=185)
Et j'ai essayer plein de truc qui ne fonctionne pas non plus comme :
if (!isset($_POST['search'])){ $_SESSION['motClef']= ""; } ou if (!isset($_POST['search'])){$_SESSION['motClef']= " ";} ou la même chaose sans le ' ! ' devant isset ou avec un empty ou encore en ajoutant $motClef = $_POST['search'];
j'ai même essayer d'autres bon de code comme :
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 if (isset($_POST['Rechercher'])){ $motClef = ''; if($motClef != "" && strlen($motClef)>1){ // 1- On prepare la requete $requete=$bdd->prepare("SELECT * FROM ville_francaise v LEFT OUTER JOIN region r ON r.id_code_insee=v.id_code_insee LEFT OUTER JOIN pays p ON v.code_pays=p.code_pays WHERE p.nom LIKE '%".$motClef."%'"); $requete->bindValue(':nom',$_SESSION['nom']); $requete->bindValue(':code_pays',$_SESSION['code_pays']); $requete->bindValue(':id_code_insee',$_SESSION['id_code_insee']); $requete->bindValue(':nom_region',$_SESSION['nom_region']); $requete->bindValue(':libelle_voie',$_SESSION['libelle_voie']); $requete->bindValue(':code_nature_voie',$_SESSION['code_nature_voie']); $Counter_products +=1; if($Counter_products==0){ echo "Il n'y a aucun résultat pour votre recherche ". $motClef; } } elseif(strlen ( $motClef ) == 0){ echo "Il n'y a aucun résultat pour votre recherche ".$motClef; } elseif(strlen ( $motClef ) == 1){ echo "Il n'y a aucun résultat pour votre recherche ".$motClef; } else{ echo ""; // traitement de l'erreur } // 2- on exécute, avec les paramètres de la recherche $requete->execute();
Bref je vais pas mettre tout ce que j'ai essayer car j'ai essayer de 12 façons différentes
Et rien de tout ca ne fonctionne... Je suis un peu pommé et je ne vois pu d'autre solution même en cherchant sur internet.
Alors j'espère que quelqu'un pourra m'aider avec des exemples afin que je puisse comprendre comment on fait..
Merci a tous et bonne journée.
Partager