Faire une recherche dans la BDD
Résolu/Fermé
Dilidim
Messages postés
106
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
25 janvier 2017
-
13 janv. 2015 à 11:49
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 13 janv. 2015 à 17:08
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 13 janv. 2015 à 17:08
A voir également:
- Faire une recherche dans la BDD
- Recherche musique - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Recherche adresse - Guide
3 réponses
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
13 janv. 2015 à 11:56
13 janv. 2015 à 11:56
Bonjour,
Et quelle est ton souci ?
Si tes données sont dans ta BDD ... je pense qu'avant de les afficher tu vas les y chercher...
Donc pour faire ta recherche.. il suffit que tu modifies ta requête actuelle en y ajoutant dans la clause WHERE ... l'info recherchée...
Par exemple .. si tu as un champ "entreprise" dans ta table....
tu n'auras qu'à faire :
Là j'ai mis en dur SFR .. mais tu peux le remplacer par une variable provenant de ton champ de recherche....
L'idéal.. pour ne pas avoir à rafraichir la page complète à chaque recherche serait de passer par de l' AJAX.
Quoi qu'il en soit... sans savoir à quoi ressemble tes Tables .. ni même comment tu as codé ta page (celle qui contient ton tableau) ... nous ne pourrons pas t'aider d'avantage.
PS: Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Et quelle est ton souci ?
Si tes données sont dans ta BDD ... je pense qu'avant de les afficher tu vas les y chercher...
Donc pour faire ta recherche.. il suffit que tu modifies ta requête actuelle en y ajoutant dans la clause WHERE ... l'info recherchée...
Par exemple .. si tu as un champ "entreprise" dans ta table....
tu n'auras qu'à faire :
SELECT * From taTable WHERE entreprise like '%SFR%'
Là j'ai mis en dur SFR .. mais tu peux le remplacer par une variable provenant de ton champ de recherche....
L'idéal.. pour ne pas avoir à rafraichir la page complète à chaque recherche serait de passer par de l' AJAX.
Quoi qu'il en soit... sans savoir à quoi ressemble tes Tables .. ni même comment tu as codé ta page (celle qui contient ton tableau) ... nous ne pourrons pas t'aider d'avantage.
PS: Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Dilidim
Messages postés
106
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
25 janvier 2017
Modifié par Dilidim le 13/01/2015 à 12:16
Modifié par Dilidim le 13/01/2015 à 12:16
Voici ma page qui affiche les informations de ma BDD.
Et voici ma page traitement.php qui ajoute des infos dans ma BDD via un formulaire.
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>ActiLine</title> <link rel="stylesheet" href="style/style.css" /> </head> <body> <nav> <ul id="menu_horizontal"> <li><a href="index.php">Accueil</a></li> <li><a href="listeclient.php">Liste des clients</a></li> <li><a href="">Agenda</a></li> </ul> </nav> <form method="get" action="recherche.php"> Recherche : <input type="text" name="q"/> <input type="submit" value="Cherche"/> </form> <a onclick="open('formulaire.php', 'popup', 'scrollbars=1,resizable=1,height=600,width=750');return false;"> <input type="button" action='formulaire.php' value="Ajouter"> </a> <input type="button" onclick='window.location.reload(false)' value="Rafraichir"/> <table> <?php $host = "localhost"; $user = "root"; $pass ="root"; $bdd ="Test"; @mysql_connect($host,$user,$pass) or die("Impossible de se connecter"); @mysql_select_db("$bdd") or die("Impossible de se connecter"); $NbrCol = 6; $requet="SELECT id, nom_e, nom_cl, fixe, contrat FROM client_tb"; if($resulta=mysql_query($requet)){ echo "<th>ID</th><th>Entreprise</th><th>Contact</th><th>Téléphone<th>Contrat</th>"; while($ligne=mysql_fetch_row($resulta)){ echo "<tr>"; foreach($ligne as $value){ echo "<td>".$value."</td>"; } echo "</tr>"; } } mysql_close(); ?> </table> </body> <footer> <div id="heure"></div> <script "type=text/javascript"> setInterval(function(){ document.getElementById('heure').innerHTML = new Date().toLocaleTimeString(); }, 1000); </script> <?php $date = date("d/m/Y"); Print("$date"); ?> </footer> </html>
Et voici ma page traitement.php qui ajoute des infos dans ma BDD via un formulaire.
<?php error_reporting(E_ALL & ~E_NOTICE); $cnx = mysql_connect( "localhost", "root", "root" ); $db = mysql_select_db( "Test" ); function getPost($variableName,$defaultValue=''){ return isset($_POST[$variableName])?$_POST[$variableName]:$defaultValue; } if(isset($_POST)){ $nom_e = getPost("nom_e"); $nom_cl = getPost("nom_cl"); $fonc = getPost("fonc"); $civ = getPost("civ"); $groupe = getPost("groupe"); $contrat = getPost("contrat"); $fixe = getPost("fixe"); $mob = getPost("mob"); $fax = getPost("fax"); $mail = getPost("mail"); $web = getPost("web"); $adr = getPost("adr"); $ville = getPost("ville"); $cp = getPost("cp"); $sql = "INSERT INTO client_tb (nom_e, nom_cl, fonc, civ, groupe, contrat, fixe, mob, fax, mail, web, adr, ville, cp ) VALUES ('$nom_e','$nom_cl','$fonc','$civ','$groupe','$contrat','$fixe','$mob','$fax','$mail','$web','$adr','$ville','$cp')"; $requete = mysql_query($sql, $cnx) or die( mysql_error()."<br>REQUETE:<pre>".$sql."</pre>"); if($requete) { echo("<br>L'insertion a été correctement effectuée"); } else { echo("<br>L'insertion à échouée"); } } else { echo "<pre>Aucune donnée présente dans _POST </pre>"; } ?>
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
Modifié par jordane45 le 13/01/2015 à 13:04
Modifié par jordane45 le 13/01/2015 à 13:04
Tu n'as pas besoin d'appeller une autre page et faire la recherche directement dans la même page ( ta page qui affiche les informations de ta BDD)
ça devrait donner quelque chose de ce genre :
// Cette partie là devrait être placée
// dans une page à part que tu n'aurais
// qu'à include lorsque tu en as besoin !
Et donc avec l'include de la page de connexion à ta bdd
NB : Tu remarqueras que j'ai placé "volontairement" le traitement PHP au début de la page ... plutôt que de le glisser en plein milieu.
Seul la boucle d'affichage est restée à sa place.....
C'est plus facile à deboguer en cas de soucis..... car le fait de placer ça et là du code PHP ( requête.. traitement de POST ou GET ...) rend la lecture du code source plus compliqué.
Le fait de séparer le code PHP de l'HTML rend sa compréhension plus simple ....
Cordialement,
Jordane
ça devrait donner quelque chose de ce genre :
// Cette partie là devrait être placée
// dans une page à part que tu n'aurais
// qu'à include lorsque tu en as besoin !
<?php //-----------------------------------------------------------------------------// // Fichier de connexion à la bdd : connexion_bdd.php //------------------------------------------// $host = "localhost"; $user = "root"; $pass ="root"; $bdd ="Test"; @mysql_connect($host,$user,$pass) or die("Impossible de se connecter"); @mysql_select_db("$bdd") or die("Impossible de se connecter"); //-----------------------------------------------------------------------------// ?>
Et donc avec l'include de la page de connexion à ta bdd
<?php // connexion à la BDD : require_once("connexion_bdd.php"); // récupération de la variable Q ( je m'assure qu'elle existe avant... // et qu'elle n'est pas vide ) $q = isset($_GET['q']) && !empty($_GET['q'])?$_GET['q']:NULL; // création du WHERE $strWhere = $q ? " WHERE nom_e like '%$q%' " : ''; // Requête : $requet="SELECT id, nom_e, nom_cl, fixe, contrat FROM client_tb " .$strWhere ; $resulta=mysql_query($requet) or die("Erreur ! <br>". $requet); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>ActiLine</title> <link rel="stylesheet" href="style/style.css" /> </head> <body> <nav> <ul id="menu_horizontal"> <li><a href="index.php">Accueil</a></li> <li><a href="listeclient.php">Liste des clients</a></li> <li><a href="">Agenda</a></li> </ul> </nav> <form method="get" action=""> <label for="q">Recherche :</label><input type="text" id="q" name="q"/> <input type="submit" value="Cherche"/> </form> <?php $NbrCol = 6; if($resulta){ echo "<th>ID</th><th>Entreprise</th><th>Contact</th><th>Téléphone<th>Contrat</th>"; while($ligne=mysql_fetch_row($resulta)){ echo "<tr>"; foreach($ligne as $value){ echo "<td>".$value."</td>"; } echo "</tr>"; } } mysql_close(); ?> </table> </body> <footer> <div id="heure"></div> <script "type=text/javascript"> setInterval(function(){ document.getElementById('heure').innerHTML = new Date().toLocaleTimeString(); }, 1000); </script> <?php $date = date("d/m/Y"); Print("$date"); ?> </footer> </html>
NB : Tu remarqueras que j'ai placé "volontairement" le traitement PHP au début de la page ... plutôt que de le glisser en plein milieu.
Seul la boucle d'affichage est restée à sa place.....
C'est plus facile à deboguer en cas de soucis..... car le fait de placer ça et là du code PHP ( requête.. traitement de POST ou GET ...) rend la lecture du code source plus compliqué.
Le fait de séparer le code PHP de l'HTML rend sa compréhension plus simple ....
Cordialement,
Jordane
Dilidim
Messages postés
106
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
25 janvier 2017
Modifié par Dilidim le 13/01/2015 à 15:38
Modifié par Dilidim le 13/01/2015 à 15:38
Merci pour tes conseils, j'en prends note.
Peux tu m'expliquer la ligne 15 ? J'ai eu une erreur en testant ton code :
"Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO
Erreur !
SELECT id, nom_e, nom_cl, fixe, contrat FROM client_tb"
Peux tu m'expliquer la ligne 15 ? J'ai eu une erreur en testant ton code :
"Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO
Erreur !
SELECT id, nom_e, nom_cl, fixe, contrat FROM client_tb"
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
>
Dilidim
Messages postés
106
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
25 janvier 2017
13 janv. 2015 à 16:18
13 janv. 2015 à 16:18
Cette erreur ne vient pas de mon code....
ça vient du fait que tu utilises l'extension Mysql pour te connecter à ta BDD ....
Il te dit qu'elle est obsolète et qu'il vaut mieux passer par l'extension Mysqli ou PDO.
https://dev.mysql.com/doc/apis-php/en/apis-php-function.mysql-query.html
Perso.. je préfère PDO:
http://studio.jacksay.com/tutoriaux/php/connection-mysql-avec-pdo
Pour ce qui est du message :
Cela vient du fait que ta requête n'est pas bonne....
L'as tu testé dans ta BDD ?
Modifies ta ligne comme ceci :
ça vient du fait que tu utilises l'extension Mysql pour te connecter à ta BDD ....
Il te dit qu'elle est obsolète et qu'il vaut mieux passer par l'extension Mysqli ou PDO.
https://dev.mysql.com/doc/apis-php/en/apis-php-function.mysql-query.html
Perso.. je préfère PDO:
http://studio.jacksay.com/tutoriaux/php/connection-mysql-avec-pdo
Pour ce qui est du message :
Erreur !
SELECT id, nom_e, nom_cl, fixe, contrat FROM client_tb"
Cela vient du fait que ta requête n'est pas bonne....
L'as tu testé dans ta BDD ?
Modifies ta ligne comme ceci :
$resulta=mysql_query($requet) or die("Erreur ! <br>".mysql_error()."<br>Requête =<br>". $requet);
Dilidim
Messages postés
106
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
25 janvier 2017
13 janv. 2015 à 16:54
13 janv. 2015 à 16:54
J'ai modifier juste connexion_bdd.php et ça fonctionne.
Si je veux ajouter nom_cl comme critère de recherche dans le where ?
Je remarque également qu'une fois une recherche effectuer il n'est pas possible revenir au tableau de départ en actualisant la page mais en faisant précédent sur le navigateur.
Si je veux ajouter nom_cl comme critère de recherche dans le where ?
Je remarque également qu'une fois une recherche effectuer il n'est pas possible revenir au tableau de départ en actualisant la page mais en faisant précédent sur le navigateur.
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
>
Dilidim
Messages postés
106
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
25 janvier 2017
13 janv. 2015 à 16:59
13 janv. 2015 à 16:59
il n'est pas possible revenir au tableau de départ en actualisant la page mais en faisant précédent sur le navigateur.
Il te suffit de ne rien mettre dans l'input puis de recliquer sur le bouton....
Sinon.. tu peux aussi de mettre un LIEN du style "Afficher tout" qui relance la page...
<a href="" >Afficher tout </a>
Si je veux ajouter nom_cl comme critère de recherche dans le where
EN plus de l'autre ou à la place ??
Si c'est à la place .. tu as juste à changer
$strWhere = $q ? " WHERE nom_e like '%$q%' " : '';
Par
$strWhere = $q ? " WHERE nom_cl like '%$q%' " : '';
Si c'est en plus... (et que c'est avec le même critère de recherche ) :
$strWhere = $q ? " WHERE nom_e like '%$q%' OR nom_cl like '%$q%' " : '';
Dilidim
Messages postés
106
Date d'inscription
jeudi 22 avril 2010
Statut
Membre
Dernière intervention
25 janvier 2017
13 janv. 2015 à 17:07
13 janv. 2015 à 17:07
ça fonctionne correctement !
Merci une nouvelle fois pour ton aide, j'ai pris des notes également.
Merci une nouvelle fois pour ton aide, j'ai pris des notes également.