Bonjour tout le monde
Je viens vers vous car j'ai un soucis un peu particulier. D'un coté j'ai une recherche par mot clef qui fonctionne (testé lors d'une recherche sur la table) et de l'autre coté j'ai ma requête pour lier 3 tables qui fonctionne (je l'ai testé sur HEIDISQL).
Maintenant j'aimerais que ma recherche de mot clef fonctionne avec ma requête de mes 3 Tables afin de pouvoir effectué ma recherche correctement.
Car pour le moment ma recherche de mot clef fonctionne pour une seule table.
Avez-vous une idée?
Mes tables sont faites de la façon suivante :
Table 1 : contact
Champs : nom / prenom / numero / interaction
Table 2 : interaction
Champs: nom/ commentaire / reponse / date / lieux
Table 3: loge
Champs : numero / adresse / ville / region / pays
Table contact est ma table qui permet le lien des 3 tables entre-elles.
Voici ma requête pour affiché mes 3 tables :
Voici ma requête pour les mots clefs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $requete=$bdd->prepare("SELECT c.*, i.*, l.* FROM contact c LEFT OUTER JOIN interaction i ON 'c.nom='i.nom' LEFT OUTER JOIN loge l ON 'c.numero='l.numero' WHERE 'c.prenom' LIKE '%%' AND 'c.numero' AND 'l.adresse' ORDER BY 'i.nom' DESC"); $requete->execute();
Donc pour que ca fonctionne pour une table j'ai fait comme ceci avec les champs de ma table :
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 form method="post"> <?php $tables_req = $bdd->query("SHOW TABLES;"); $lignes_tables = $tables_req->fetchAll(); foreach($lignes_tables as $ligne) { ?> <!-- Correspond a la requête pour afficher les tables --> <input id="choix" type='submit' name='valider' value='<?php echo ucfirst($ligne[ 0 ]); ?>'> <!-- Correspond aux boutons des tables --> <?php } ?> </form> <form method="post" class="motclefs"> <!-- Formulaire pour permettre la recherche par mot clef --> <br> <table> <td> <tr> <!--NOM --> <label for="search">Recherche par le nom</label> <input id="name" type="text" name="nom"> </tr> <br><br> <tr> <!--ID --> <label for="search">Recherche par Prénom</label> <input id="firstname" type="text" name="Prenom"> </tr> <br> <tr> <!--CODE Interaction--> <label for="search">Recherche par Interaction</label> <input id="inter" type="text" name="interaction"> </tr> <br> <tr> <!--CODE Number --> <label for="search">Recherche par le Numéro</label> <input id="number" type="text" name="numero"> </tr> <br <tr> <input type="submit" name="search" value="Rechercher"> <input type="submit" name="reset" value="Réinitialiser"> </tr> <br> </td> </table> </form> <?php if(isset($_POST['valider'])){ $_SESSION['table']=$_POST['valider']; } if(isset($_SESSION['table'])){ if(isset($_POST['Sup'])){ $id=$_POST['id']; $supprimer = $_POST['Sup']; try{ $bdd->query("DELETE FROM ".$_SESSION['table']. " WHERE id_".$_SESSION['table']. "=".$id); }catch(PDOException $e ){ echo "Error: ".$e; } } // Ceci est l'action pour supprimer la ligne d'une table if(isset($_POST['Modif'])){ $id=$_POST['id']; $modifier = $_POST['Modif']; $preparation=""; foreach ($_POST as $clef => $value) { if ($clef !='valider' && $clef != 'Modif' && $clef !='id'){ $preparation=$preparation.$clef.'="'.$value.'",'; } } $preparation = substr($preparation, 0, -1); $modifier=$bdd->query("UPDATE ".$_SESSION['table']. " SET ".$preparation. " WHERE id_".$_SESSION['table']. "=".$id); } // Ceci est l'action pour modifier la ligne d'une table if(isset($_POST['Envoyer'])){ $preparation=""; $insert=""; foreach ($_POST as $clef => $value) { if ($clef !='valider' && $clef != 'Modif' && $clef !='id' && $clef !='Envoyer' && $clef !='"_$j_"' ){ $insert=$insert.$clef.","; $preparation=$preparation."'".$value."',"; } } $preparation = substr($preparation, 0, -1); $insert = substr($insert, 0, -1); $ajouter=$bdd->query('INSERT INTO '.$_SESSION['table'].'('.$insert.') VALUES('.$preparation.')'); echo "<h1>".$_SESSION['table']."</h1>"; echo "<table>";
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124 $entete=$bdd->query("SHOW COLUMNS FROM ".$_SESSION['table']); echo "<tr>"; $enteteELT=$entete->fetchAll(); for($x=0 ; $x<sizeof($enteteELT) ; $x++){ echo '<th>'.$enteteELT[$x]['Field']. '</th>'; } echo "</tr>"; //Champ 1 = Nom if(!empty($_POST['nom'])){ $_SESSION['nom']="%".$_POST['nom']."%"; } if(empty($_SESSION['nom'])) { $_SESSION['nom']="%%"; // Permet d'avoir tous les résultats su aucune recherche n'a été effectuée } //Champ 2 = Prenom if(!empty($_POST['prenom'])){ $_SESSION['prenom']="%".$_POST['prenom']."%"; } if(empty($_SESSION['prenom'])){ $_SESSION['prenom']="%%"; } //Champ 3 = Interaction if(!empty($_POST['interaction'])){ $_SESSION['interaction']="%".$_POST['interaction']."%"; } if(empty($_SESSION['interaction'])){ $_SESSION['interaction']="%%"; } //Champ 4 = Numéro if(!empty($_POST['numero'])){ $_SESSION['numero']="%".$_POST['numero']."%"; } if(empty($_SESSION['numero'])){ $_SESSION['numero']="%%"; } if(isset($_POST['reset'])){ $_SESSION[nom]="%%"; $_SESSION['prenom']="%%"; $_SESSION['interaction']="%%"; $_SESSION['numero']="%%"; } //Permet d'envoyer les requêtes (ancienne requête, une table ) $requete=$bdd->prepare('SELECT * FROM contact WHERE nom LIKE :nom AND prenom LIKE :prenom AND interaction LIKE :interaction AND numero LIKE :numero' ); //C'est à cette endroit que j'ai essayer de mettre ma requête de jointure des 3 tables mais ça ne fonctionne pas. $requete->bindValue(':nom' ,$_SESSION['nom']); $requete->bindValue(':prenom ',$_SESSION['prenom']); $requete->bindValue(':interaction' ,$_SESSION['interaction']); $requete->bindValue(':numero' ,$_SESSION['numero']); $requete->execute(); while($requeteELT=$requete->fetch(PDO::FETCH_ASSOC)){ echo "<tr>"; echo '<form method="POST" action="index.php">'; $nb_colonne=0; foreach ($requeteELT as $clef => $valeur) { $nb_colonne++; if (substr($clef, 0, 3)=='id_'){ echo "<td>".$valeur.'</td> <input type="hidden" NAME="id" value="'.$valeur.'"/>'; } else { echo "<td> <input TYPE='text' NAME='".$clef."' value='".$valeur."'></td>"; } } // boucle while qui permet la récupération de données des tables echo '<td> <input type="hidden" NAME="valider" VALUE="'.$_SESSION['table'].'"/> <input TYPE="submit" NAME="Modif" VALUE="Modifier"/> <input TYPE="submit" NAME="Sup" VALUE="Supprimer"/> </td>'; // Ces boutons permettent d'envoyer la modification ou la suppression d'une ligne de la table echo '</form>'; echo "</tr>"; } echo '<tr>'; echo '<form method="POST" action="index.php">'; // la fonction "action='..'" permet de redériger vers une page, ici on reste sur la même. echo '<input type="hidden" NAME="valider" VALUE="'.$_SESSION['table'].'"/>'; $entete=$bdd->query("SHOW COLUMNS FROM ".$_SESSION['table']); echo "<tr>"; while($enteteELT=$entete->fetch()){ if(substr($enteteELT["Field"], 0, 3)=='id_'){ echo '<td><input type="hidden" NAME="id"/></td>'; } else { echo "<td><input TYPE='text' NAME='".$enteteELT["Field"]."'></td>"; } } ?> <td> <input TYPE="submit" NAME="Envoyer" VALUE="Ajouter"/></td> <!-- permet d'ajouter une ligne sur la table </form> </tr> <?php echo "</table>"; // affiche la table } else { echo " "; // permet de voir les tables sans le détails, sans les lignes, juste le nom de la table qui apparait. }
Je ne sais pas comment faire pour que ma recherche fonctionne. En effet mon but c'est de pouvoir recherche un ou plusieurs mots clefs donc faut aussi faire en sorte que dans ma recherche on puisse rentrer un seul mot ou plusieurs pour l'effectuer correctement.
Cette recherche me permettrais d'afficher toutes les lignes voulus par rapport au(x) mot(s) clef(s).
Si quelqu'un aurai une idée sa m'arrangerai car je ne vois pas du tout comment faire là. Même en recherchant sur le net je n'ai pas trouvé de solution.
Et en débutant dans ce domaine je galère un peu !
Bonne journée à tous
Partager