Faire une recherche par élimination

Résolu
manoula -  
 manoula -
Bonjour, tous le monde

je suis débutante en php , et j'aimerai bien quelqu'un qui m'aide pour résoudre ce problème.

j'ai une partie dans mon backoffice qui contient une liste(prmis_list.php) qui affiche tous les gens qui veulent avoir leur permis de bâtir, la table contenant tous ses informations s'appelle "permis" avec les champs suivante : CIN,identifiant,nom,adresse,date,sujet,architecte et enfin etat. Qunad je veux ajouter un permis j'insere les donnes dans une page qui s'appelle permis_ detail.php ensuite l'insertion s'affiche dans la page permis_liste.php jusqu'à ici tous va bien :)
le grand problème c 'est que ma liste est devenu très long donc j'ai décidé de faire dans la page permis_liste.php un petit moteur de recherche qui m'aide à chercher un permis bien précis bien sur par élimination , j'ai crée le formulaire qui contient cette recherche spécifique(avec un select pour spécifier la recherche soit avec le nom ou CIN ou bien autre chose) mais j'ai trouver des difficultés dans le code php :( ????

voila la page permis_liste.php
<?php  
    require("access.inc.php");  
   
 require("../lib/db_connect.inc.php");  
 require("../lib/util.php");  
   
 require_once("../lib/bd.class.php");  
   
 $connexion=db_connexion();  
    mysql_query("set names utf8");  
 $resultat =mysql_query("SELECT * FROM permis ORDER BY date_depot DESC");  
 ?>  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" lang="ar">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<meta name="description" content="Espace d'administration" />  
<link rel="stylesheet" type="text/css" href="css/administration.css" />  
<title>[Sousse] - Espace d'administration</title>  
<style type="text/css">  
<!--  
.Style1 {color: #26c}  
-->  
</style>  
</head>  

<body >  
<div id="main">  

<?php include('HautPage.php'); ?>  

<h3 class="headerstyle" align="left"> Gestion des Permis </h3>  

<p>  
<form name="ListeNews" method="post" action="Sommaire.php">  
<TABLE WIDTH="650" border="0" align="center" cellpadding="0" cellspacing="0">  
  <TR>  
    <TD ALIGN="LEFT" class="Titre16"><br>  
          
        <div class="TexteDroite"><a href="Permis_Details.php?Num=-1">Ajouter un   
          permis</a></div></TD>  
      
      
  </TR>  
  <tr>  
   <td> </td>  
  </tr>  
   <TR>  
    <TD ALIGN="center" class="Titre16"><br>   
   <span class="Style1">Chercher un permis</span><br />  
   <br />  
      Trier par :  
   <select name="recherche" size="1" style="width: 100px">  
                   <option>CIN</option>  
       <option>N° de Permis</option>  
       <option>Nom</option>  
       <option>Architecte</option>  
          </select>  
   <br /><br />  
     Saisir votre recherche:   
     <input class="TexteDroite" size="15" />  
  <input name="ok" type="submit" value="ok" />  
     <br />  
  <br />  
      
   </TD>  
      
      
  </TR>  
  <TR>  
      <TD align="left" style=" xpadding:20px">   
      <?php  $ligne = mysql_num_rows($resultat);  
    if ($ligne != 0) {  ?>  
        <table border="0" cellpadding="0" cellspacing="0" width="100%" class="Tab">  
          <thead id="thead">  
            <tr>  
       <td width="10%" align="center" valign="middle">CIN</td>  
    <td width="10%" align="center" valign="middle">Identifiant</td>  
              <td width="22%" align="center" valign="middle">Nom et Prénom</td>  
     <td width="14%" align="center" valign="middle">Adresse</td>  
     <td width="14%" align="center" valign="middle">Sujet</td>  
      <td width="14%" align="center" valign="middle">Architecte</td>  
     <td width="11%" align="center" valign="middle">Date du dépot</td>  
         <td width="8%" align="center" valign="middle">Note</td>  
              <td width="4%" align="center" valign="middle"> </td>   
              <td width="1%" align="center" valign="middle"> </td>  
            </tr>  
          </thead>  
          <tbody>  
           <?php  
     $i = 0 ;  
while ($Enreg=mysql_fetch_array($resultat)) {  
   if ($i % 2 == 0) $bgColor = "";  
  else    $bgColor = "#CCCCCC";  
  $i++;  

   ?>  
    <tr onmouseover=" this.bgColor='#ABABAB'" onmouseout="this.bgColor='<?php print $bgColor;?>';" bgcolor="<?php  print $bgColor;?>">  
        <td align="center" valign="middle"><?php print $Enreg["CIN"];?></td>  
             <td align="center" valign="middle"><?php print $Enreg["numeros_permis"];?></td>  
             <td align="center" valign="middle"><?php print $Enreg["nom"];?></td>  
     <td align="center" valign="middle"><?php print $Enreg["adresse"];?></td>  
     <td align="center" valign="middle"><?php print $Enreg["sujet"];?></td>  
     <td align="center" valign="middle"><?php print $Enreg["archit"];?></td>  
     <td align="center" valign="middle"><?php print date2string($Enreg["date_depot"]);?></td>  
     <td align="center" valign="middle"><?php print Etat($Enreg["etat"]);?></td>   
    <td align=center valign="middle"><a href="Permis_Details.php?Num=<?php print $Enreg["id"];?>"><img src="img/voir.gif" border=0></a></td>  
      
              <td width=4% align=center valign="middle"><a href="Permis_Supprime.php?Num=<?php print $Enreg["id"];?>" onClick="return confirm('Voulez-vous supprimer ce Permis ?')"><img src="img/supprimer.gif" border=0></a></td>  
      </tr><?php   
          }  
  ?>   
          </tbody>  
    </table>  
       <?php  } else { echo "  
        <b>Il n'y a aucun contact.</b> ";  
      }?>  
      </TD>  
  </TR>  
</TABLE>  
</form>  

</p>  



</div>  


</body>  
</html>  




merci d'avance

12 réponses

Résumé de la discussion

Une débutante en PHP cherche à ajouter une fonction de recherche dans une liste de permis traitée par une page Permis_liste.php pour filtrer par CIN, N° de Permis, Nom ou Architecte. Plusieurs conseils ont été apportés: remplacer les options du sélect par des valeurs correspondantes aux noms des colonnes (par exemple CIN, numeros_permis, nom, archit) et vérifier l'existence des données POST pour éviter les notices. D'autres échanges suggèrent d'isoler le code PHP du HTML, corriger le champ architecte (archit) et ajuster l'action du formulaire pour renvoyer vers Permis_liste.php et afficher directement les résultats. Une nuance utile est que l'alignement entre les noms de colonnes et les valeurs du select est clé pour que la requête filtre correctement les résultats.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. louloute300 Messages postés 347 Statut Membre 29
     
    Pour commencer:

    <select name="recherche" size="1" style="width: 100px">
    <option>CIN</option>
    <option>N° de Permis</option>
    <option>Nom</option>
    <option>Architecte</option>
    </select>

    Ca ne sert à rien en l'état:
    Par contre, je te propose de changer ca par:

    <select name="recherche" size="1" style="width: 100px">
    <option value="CIN">CIN</option>
    <option value="numeros_permis">N° de Permis</option>
    <option value="nom">Nom</option>
    <option value="archit">Architecte</option>
    </select>

    Ce serait un bon début,,, mais la page reste pardon,, un peu eu,, pas très propre (le passage sans arret entre php et html). Je te propose un sript bp plus joli...
    0
  2. louloute300 Messages postés 347 Statut Membre 29
     
    <?php

    demarage();
    affichage();

    function demarage(){
    require("access.inc.php");
    require("../lib/db_connect.inc.php");
    require("../lib/util.php");
    require_once("../lib/bd.class.php");

    mysql_connect($localhost,$root,$xxx); // changer par mot de pass ... etc
    mysql_select_db($basededonnee); // Nom de ta bdd
    }

    function affichage(){
    echo'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="ar">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="description" content="Espace d\'administration" />
    <link rel="stylesheet" type="text/css" href="css/administration.css" />
    <title>[Sousse] - Espace d\'administration</title>
    <style type="text/css">
    <!--
    .Style1 {color: #26c}
    -->
    </style>
    </head>

    <body >
    <div id="main"> ';

    include("HautPage.php");

    echo '
    <h3 class="headerstyle" align="left"> Gestion des Permis </h3><p>
    <form name="ListeNews" method="post" action="Sommaire.php">

    <TABLE WIDTH="650" border="0" align="center" cellpadding="0" cellspacing="0">
    <TR>
    <TD ALIGN="LEFT" class="Titre16"><br>

    <div class="TexteDroite"><a href="Permis_Details.php?Num=-1">Ajouter un
    permis</a></div></TD>
    </TR>
    <tr>
    <td> </td>
    </tr>
    <TR>
    <TD ALIGN="center" class="Titre16"><br>
    <span class="Style1">Chercher un permis</span><br />
    <br />
    Trier par :
    <select name="recherche" size="1" style="width: 100px">
    <option value="CIN">CIN</option>
    <option value="numeros_permis">N° de Permis</option>
    <option value="nom">Nom</option>
    <option value="archit">Architecte</option>
    </select>
    <br /><br />
    Saisir votre recherche:
    <input class="TexteDroite" size="15" name="texterecherche" />
    <input type="submit" value="ok" />
    <br />
    <br />

    </TD>

    </TR>
    <TR>
    <TD align="left" style=" xpadding:20px"> ';

    afftableau();

    echo ' </TD>
    </TR>
    </TABLE>
    </form>
    </p>
    </div>
    </body>
    </html>';
    }

    function afftableau(){

    $resultat=mysql_query("SELECT * FROM permis ORDER BY date_depot DESC");
    if (mysql_num_rows($resultat)>0){
    echo' <table border="0" cellpadding="0" cellspacing="0" width="100%" class="Tab">
    <thead id="thead">
    <tr>
    <td width="10%" align="center" valign="middle">CIN</td>
    <td width="10%" align="center" valign="middle">Identifiant</td>
    <td width="22%" align="center" valign="middle">Nom et Prénom</td>
    <td width="14%" align="center" valign="middle">Adresse</td>
    <td width="14%" align="center" valign="middle">Sujet</td>
    <td width="14%" align="center" valign="middle">Architecte</td>
    <td width="11%" align="center" valign="middle">Date du dépot</td>
    <td width="8%" align="center" valign="middle">Note</td>
    <td width="4%" align="center" valign="middle"> </td>
    <td width="1%" align="center" valign="middle"> </td>
    </tr>
    </thead>
    <tbody> ';

    $type_de_recherche=$isset($_POST['recherche'])?$_POST['recherche']:"";
    $txt_de_recherche=$isset($_POST['texterecherche'])?$_POST['texterecherche']:"";

    for($i=0;$i<mysql_num_rows($resultat);$i++){
    $Enreg=mysql_fetch_array($resultat);
    if (i%2==0){$bgColor = "";}else{$bgColor = "#CCCCCC";}
    if ($Enreg["type_de_recherche"]==$txt_de_recherche){
    echo '<tr onmouseover=" onmouseover="this.bgColor=\'#ABABAB\'" onmouseout="this.bgColor=\''.$bgColor.'\'" bgcolor="'.$bgColor.'">
    <td align="center" valign="middle">'.$Enreg["CIN"].'</td>
    <td align="center" valign="middle">'.$Enreg["numeros_permis"].'</td>
    <td align="center" valign="middle">'.$Enreg["nom"].'</td>
    <td align="center" valign="middle">'.$Enreg["adresse"].'</td>
    <td align="center" valign="middle">'.$Enreg["sujet"].'</td>
    <td align="center" valign="middle">'.$Enreg["archit"].'</td>
    <td align="center" valign="middle">'.date2string($Enreg["date_depot"])'.</td>
    <td align="center" valign="middle">'.Etat($Enreg["etat"])'.</td>
    <td align=center valign="middle"><a href="Permis_Details.php?Num='.$Enreg["id"].'><img src="img/voir.gif" border=0></a></td>
    <td width=4% align=center valign="middle"><a href="Permis_Supprime.php?Num='.$Enreg["id"].'" onClick="return confirm(\'Voulez-vous supprimer ce Permis ?\')"><img src="img/supprimer.gif" border=0></a></td>
    </tr>';
    }
    }
    echo '</tbody></table>';
    }else{
    echo "Il n'y a pas de permis";
    }

    }

    ?>
    0
    1. louloute300 Messages postés 347 Statut Membre 29
       
      Le problème de ce type de script, c'est que si l'utilisateur souhaite faire une recherche sur un nom par exemple, et que le nom n'existe pas, les titres des colonnes du tableau vont s'afficher... Il y a un autre script qui existe, bp plus simple aussi à mon avis, mais impossible à mettre en place si tu as disons plus de 100.000 lignes ds ta table... (=> trop lourd dans ce cas)

      Aussi, à ta place, je n'aurai pas mis de select, mais un simple <input type=text name=recherche> et un bouton submit à coté. Il aurait chercher directement dans toutes les colonnes de ta table le "texte_recherché";

      J'espère avoir répondu à tes attentes (PS: C'est un script que j'ai fait de tete sans testé, alors s'il y a des erreurs, dit les moi...
      0
    2. louloute300 Messages postés 347 Statut Membre 29
       
      je suis connecté si ta besoin...
      0
  3. manoula
     
    bonjour et merci pour votre réponse :)
    c maintenant que je me suis connecté je vais essayer ton script et je te dit ;)
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. manoula
     
    coucou moi aussi je suis la :) bon je suis entrain j'essaye ton script si j'ai un pb je te dirais
    0
  6. manoula
     
    ree :)

    2 msg d'arreur :

    Notice: Undefined variable: isset in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 110

    Fatal error: Call to undefined function: () in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 110

    $type_de_recherche=$isset($_POST['recherche'])?$_POST['recherche']:"";
    $txt_de_recherche=$isset($_POST['texterecherche'])?$_POST['texterecherche']:"";

    ???
    0
    1. louloute300 Messages postés 347 Statut Membre 29
       
      pardon, pas de $ avant isset
      $type_de_recherche=isset($_POST['recherche'])?$_POST['recherche']:"";
      $txt_de_recherche=isset($_POST['texterecherche'])?$_POST['texterecherche']:"";
      0
  7. manoula
     
    oui c vrai pas de pb :)

    j'ai corrigé mais ...

    Notice: Use of undefined constant i - assumed 'i' in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 115

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 116

    Notice: Use of undefined constant i - assumed 'i' in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 115

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 116

    Notice: Use of undefined constant i - assumed 'i' in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 115

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 116

    Notice: Use of undefined constant i - assumed 'i' in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 115

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 116

    Notice: Use of undefined constant i - assumed 'i' in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 115

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 116

    Notice: Use of undefined constant i - assumed 'i' in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 115

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 116

    Notice: Use of undefined constant i - assumed 'i' in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 115

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin
    0
    1. louloute300 Messages postés 347 Statut Membre 29
       
      remplacer i par $i
      Par contre, $Enreg["type_de_recherche"] à remplacer par $Enreg["$type_de_recherche"] ou encore $Enreg[$type_de_recherche] si ca marche pas
      0
  8. manoula
     
    merci bien, mais il reste Notice: Undefined index: type_de_recherche
    0
    1. louloute300 Messages postés 347 Statut Membre 29
       
      OK. ds ce cas,,, peux tu me dire quels st les n° de colonne dans ta table qui corresponde à ;

      CIN, numeros_permis, Nom et archit.
      0
  9. manoula
     
    A oui c l' id qui fait l'auto_increment
    0
    1. louloute300 Messages postés 347 Statut Membre 29
       
      Sinon il y a bien ca à faire: si
      CIN = colonne 0,
      numeros_permis = colonne 1,
      Nom = colonne 3
      archit= colonne 7.

      alors tu remplaces le select par:

      <select name="recherche" size="1" style="width: 100px">
      <option value="0">CIN</option>
      <option value="1">N° de Permis</option>
      <option value="3">Nom</option>
      <option value="7">Architecte</option>
      </select>


      et aussi:

      if ($Enreg["type_de_recherche"]==$txt_de_recherche){
      par
      if ($Enreg[$type_de_recherche]==$txt_de_recherche){

      La c'est certain que ça marche...
      0
  10. manoula
     
    désolé mais il ya des erreurs je croix c la syntax car la ligne 118 :
    if ($Enreg[$type_de_recherche]==$txt_de_recherche){ 


    Notice: Undefined index: in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    Notice: Undefined index: in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    Notice: Undefined index: in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    Notice: Undefined index: in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    Notice: Undefined index: in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    Notice: Undefined index: in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    Notice: Undefined index: in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118
    0
    1. louloute300 Messages postés 347 Statut Membre 29
       
      Undefined index => veut dire que dans ta base de donnée, l'index n'existe pas ou est mal orthographié.

      CIN, numeros_permis, Nom et archit. => Vérifie les minuscules et les majuscules...

      ou encore:

      $type_de_recherche=isset($_POST['recherche'])?$_POST['recherche']:"";

      $type_de_recherche est défini à cette ligne la^^
      Sinon, donne moi le n° de tes colonnes dans ta table, et la ca marchera direct...

      je crois que Nom s'écris nom ds ta bdd donc,,,
      dans le select, option value="nom" et pas Nom
      0
    2. louloute300 Messages postés 347 Statut Membre 29
       
      essaie de recherche par autre chose que par nom aussi...
      0
    3. louloute300 Messages postés 347 Statut Membre 29
       
      Pardon, je croix avoir compris mon pb:
      remplace ca:
      if ($Enreg["type_de_recherche"]==$txt_de_recherche){
      par:
      if ((($type_de_recherche<>"")and($Enreg["type_de_recherche"]==$txt_de_recherche))or($type_de_recherche=="")){

      Sinon, ca recherche qqch que tu n'as pas encore demander de chercher...

      (Pas évident de réparer un pb sans voir ce qu'il y a à l'écran...)
      0
    4. manoula
       
      parce avant il n'avait pas la partie recherche donc je travail sur sommaire.php
      mais mnt il après avoir ajouter la recherche il faux que sa reste sur la mm page
      0
    5. manoula
       
      oui c vrai c pas évident :)
      0
  11. manoula
     
    merci louloute300 tt les erreur sont disparut :)
    mais il y a une autre chose quand j'ai saisie ma recgerche et j'ai valider il m'a emener vers la page sommaire.php ??? il l m' a pas afficher la ligne que je veut afficher dans tt la liste ??
    est ce qu 'il faux changer l'action du form ???
    0
    1. louloute300 Messages postés 347 Statut Membre 29
       
      Oui effectivement, je n'avais pas vu.
      <form name="ListeNews" method="post">

      Ca ca irai, mais maintenant ca dépend, pourquoi voulais tu "Sommaire.php", sinon, on peut faire un bouton pour retourner au sommaire.php à toi de voir

      eeeee
      0
  12. manoula
     
    donc j'ai changer l'action par Permis_liste.php
    alors j'ai eu les erreurs suivantes

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    Notice: Undefined index: type_de_recherche in c:\program files\easyphp1-8\www\site2010\admin\permis_liste.php on line 118

    alors j'ai changer cette ligne
    if ((($type_de_recherche<>"")and($Enreg["type_de_recherche"]==$txt_de_recherche))or($type_de_recherche=="")){ 
    
    par 
    
    <code>if ((($type_de_recherche<>"")and($Enreg["$type_de_recherche"]==$txt_de_recherche))or($type_de_recherche=="")){ 
    


    pas d'erreur mais quand j'ai fé ma recherche ya rien qui s'affiche la liste est vide ??
    </code>
    0
    1. louloute300 Messages postés 347 Statut Membre 29
       
      Ok, commençons par le début:
      1) Si tu ne fait pas de recherche, est-ce qu'il y a qq ch qui apparait?

      2) As tu fait une recherche partiel ou total?
      ex:
      ds ta table, colonne "nom", il y a une case dans laquelle est écrite: "Bertrand"
      Si tu recherche "Bertrand " alors, c'est différent de "Bertrand" ou encore "bertrand"
      Le script n'acepte que la recherche totale .
      0
    2. manoula
       
      si je ne fait pas de recherche tt la liste est la elle est affichée
      et quand je fé la recherche par le mot entier il ne m'affiche rien
      0
    3. louloute300 Messages postés 347 Statut Membre 29
       
      $Enreg["$type_de_recherche"] et si tu remplaces par : $Enreg[$type_de_recherche]

      Sinon, je suis en panne d'inspiration... Au moins, on ne rencontre pas ce genre de pb avec les n° de colonne... mdr

      par contre, pr ton retour à sommaire.php:
      echo'
      <li><a href="Sommaire.php" class="LienSommaire">retour au sommaire</a></li>';
      à rajouter ou tu veux...
      0
    4. manoula
       
      pour le somaire .php pas de probleme j'en ai deja <?php include('HautPage.php'); ?> qui me fais rederige r
      mais pour la recherche rien n'a changer :(
      merci bcp pour ton aide
      0
    5. louloute300 Messages postés 347 Statut Membre 29
       
      peut être qu'en glissant ca:

      echo $Enreg[$type_de_recherche]."=?=".$txt_de_recherche;

      avant le if, tu verra mieux ce qu'il se passe...
      0