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
Bonjour,
J'ai actuellement un tableau en PHP qui regroupe des infos (nom entreprise, contact, tel, ...) qui sont dans une table de ma BDD. J'aimerais créer une barre de recherche afin d'afficher le résultat dans le tableau (par exemple: je tape SFR dans la recherche et j'obtiens seulement les infos en rapport avec SFR).

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
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 :
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
0
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
Voici ma page qui affiche les informations de ma BDD.

<!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>";
    }
?>
0
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
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 !

<?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
0
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
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"
0
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
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 :
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);


0
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
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.
0
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

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%' " : '';
0
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
ça fonctionne correctement !
Merci une nouvelle fois pour ton aide, j'ai pris des notes également.
0