Probleme : Formulaire de recherche

Eléphanteau du PHP | 34 Messages

26 août 2006, 21:17

Voila mon probleme, dés que je vais faire un formulaire de recherche avec un champ ca va parfaitement mais dés que je veux en mettre un autre voir un troisieme, le formulaire ne marche plus correctement. Je vous mets mon code si dessous, si quelqu'un pourrait m'aider merci.
<form action="index.php?p=listdb&cat=1" method="post" name="form">
Rechercher : <input name="search_nom" size="30" value="<? echo $_POST['search_nom'] ; ?>" type="text" /><br>
Affectaction : 
<? $sql_postes = mysql_query ("SELECT * FROM cer_postes ORDER BY nom_poste"); ?>

<select name="search_poste">
														<? while($contenu_postes = mysql_fetch_array ($sql_postes)) {
echo("<option value=\"".$contenu_postes['id_poste']."\"");
echo (">".$contenu_postes['nom_poste']."</option>" ) ; } ?>
</select>

<br>
Grade : 
<? $sql_grades = mysql_query ("SELECT * FROM cer_grades ORDER BY id_grade"); ?>

<select name="search_grades">

<? while($contenu_grades = mysql_fetch_array ($sql_grades)) {
echo("<option value=\"".$contenu_grades['id_grade']."\"");
echo (">".$contenu_grades['nom_grade']."</option>" ) ; } ?>

</select>
</form>

<?
if (isset($search_nom))
{
$clause_nom = " AND (nom_membre LIKE '%$search_nom%') ";
}
	
if (isset($search_poste))
{
$clause_poste = " AND (affectation_1 LIKE '$search_poste') ";
}

if (isset($search_grades))
{
$clause_grades = " AND (grade LIKE '$search_grades') ";
}
	
$resultat = mysql_query ("SELECT * FROM cer_membres WHERE 
(absence LIKE '0' OR absence LIKE '1' OR  absence LIKE '2')" . $clause_nom . $clause_poste . $clause_grades ." "); 
$total_resultats = mysql_num_rows($resultat);
	

if(empty($nb)) { $nb=0; } $par_page = 12; $after_page = $nb+$par_page; 
$previous_page = $nb-$par_page; $debut = $nb; $nombre_resultats = $nb+$par_page;

	
$resultat2 = mysql_query ("SELECT * FROM cer_membres WHERE 
(absence LIKE '0' OR absence LIKE '1' OR  absence LIKE '2')" . $clause_nom . $clause_poste . $clause_grades . " 
ORDER BY nom_membre LIMIT $debut, $par_page");?>
	
<table>
<tr>
<th>Nom</th>
<th>Grade</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>				
<? while ($membres = mysql_fetch_array ($resultat2)) 
{	
$id = $membres['id_membre']; 
?>
<tr>
<td><a href="index.php?p=players1&cat=1&id=<? echo $id ; ?>"><? echo $membres['nom_membre']; ?></a></td>
<td>
</td>
<td></td>
<td></td>
</tr>
<? } ?>
</table>

Mammouth du PHP | 991 Messages

26 août 2006, 21:23

dans un premier temps change ceci :
<?
if (isset($_POST[search_nom]))
{
$clause_nom = " AND (nom_membre LIKE '%$_POST[search_nom]%') ";
}
    
if (isset($_POST[search_poste]))
{
$clause_poste = " AND (affectation_1 LIKE '$_POST[search_poste]') ";
}

if (isset($_POST[search_grades]))
{
$clause_grades = " AND (grade LIKE '$_POST[search_grades]') ";
} 
DevOps, Symfony4, Hoa

Eléphanteau du PHP | 34 Messages

26 août 2006, 21:29

J'ai modifier mais il ne trouve aucun résultat meme pour la recherche du nom qui fonctionne seule quand il n'y a pas les autres champs de recherche.

Mammouth du PHP | 991 Messages

26 août 2006, 21:31

autre chose je pense que ta oublier les % pour les likes .
$clause_nom = " AND (nom_membre LIKE '%$_POST[search_nom]%') ";
}
    
if (isset($_POST[search_poste]))
{
$clause_poste = " AND (affectation_1 LIKE '%$_POST[search_poste]%') "; 
ta plus qu a modifier le reste des like
enfin je comprend pas ca :
$resultat = mysql_query ("SELECT * FROM cer_membres WHERE 
(absence LIKE '0' OR absence LIKE '1' OR  absence LIKE '2')" . $clause_nom . $clause_poste . $clause_grades ." "); 
$total_resultats = mysql_num_rows($resultat);
    

if(empty($nb)) { $nb=0; } $par_page = 12; $after_page = $nb+$par_page; 
$previous_page = $nb-$par_page; $debut = $nb; $nombre_resultats = $nb+$par_page;

    
$resultat2 = mysql_query ("SELECT * FROM cer_membres WHERE 
(absence LIKE '0' OR absence LIKE '1' OR  absence LIKE '2')" . $clause_nom . $clause_poste . $clause_grades . " 
ORDER BY nom_membre LIMIT $debut, $par_page");?> 
en esperant que cela t'aide
DevOps, Symfony4, Hoa

Eléphanteau du PHP | 34 Messages

26 août 2006, 21:33

JE l'avais déjà fait ce genre de modifications mais ca n'allait pas pour les grades et postes car si tu fais une recherche avec le chiffre 1 et ben il prend en compte les 11, 12 et autres... donc je pense pas que ca vient de là. Mais je bloque....

Eléphanteau du PHP | 34 Messages

26 août 2006, 21:34

en fait mes autres requetes du resultat et en,suite le resultat 2. Consiste pour faire page suivante et page précéndete.

Mammouth du PHP | 991 Messages

26 août 2006, 21:39

Ben je vois pas pourquoi ca marche pas desolé je ne connais pas trop le Mysql je suis plus dans le php ...
Mais puisque que tu cherche quelque chose de precis pourquoi tu utilise un like ...
DevOps, Symfony4, Hoa

Eléphanteau du PHP | 34 Messages

26 août 2006, 21:44

ce que je comprend pas, c'est que tout seul le champ nom va fonctionner et dés que j'ai rajouter les suivants plus rien ne fonctionne.

Eléphanteau du PHP | 34 Messages

27 août 2006, 10:14

sujet toujours d'actualités, j'ai beau me pencher dessus je comprend pas. besoin d'aide merci

Eléphanteau du PHP | 34 Messages

27 août 2006, 10:56

Bien mon champ de recherche par nom refonctionne mais par les select ca ne fonctionne pas. Je cherche toujours d'ou ca peut venir. SI quelqu'un peut me venir en aide.

Mammouth du PHP | 19672 Messages

27 août 2006, 10:57

On va simplifier un peu tout ça : tu dois construire ta requête dynamiquement, mais certains paramètres ne sont pas toujours présents selon le choix de l'internaute. Donc on va commencer par construire un tableau pour construire les clauses de tri. On fera ensuite une concaténation avec le reste. Proposition (à tester), j'ai ajouté des commentaires dans le code, lis les bien, ils sont là pour expliquer:
<form action="index.php?p=listdb&cat=1" method="post" name="form">
  Rechercher : <input name="search_nom" size="30" value="<?php echo $_POST['search_nom'] ; ?>" type="text" /><br>
  Affectaction : <select name="search_poste">
<?php
$sql_postes = mysql_query ("SELECT * FROM cer_postes ORDER BY nom_poste");
while($contenu_postes = mysql_fetch_array ($sql_postes))
{
    echo("    <option value=\"".$contenu_postes['id_poste']."\"");
    echo (">".$contenu_postes['nom_poste']."</option>" ) ;
}
?>
  </select><br>
  Grade : <select name="search_grades">
<?php
$sql_grades = mysql_query ("SELECT * FROM cer_grades ORDER BY id_grade");
while($contenu_grades = mysql_fetch_array ($sql_grades))
{
    echo("    <option value=\"".$contenu_grades['id_grade']."\"");
    echo (">".$contenu_grades['nom_grade']."</option>" ) ;
}
?>
  </select>
</form>
<?php
/* On commence par récupérer les valeurs du formulaire !!! */
$search_nom    = isset($_POST['search_nom'])    ? $_POST['search_nom']    : null;
$search_poste  = isset($_POST['search_poste'])  ? $_POST['search_poste']  : null;
$search_grades = isset($_POST['search_grades']) ? $_POST['search_grades'] : null;

/* On crée un tableau pour stocker les clauses si elles sont requises */
$t_clauses = array();
/* La clause de tri sur le nom */
if (isset($search_nom))
{
    $t_clauses[] = "nom_membre LIKE '%". $search_nom ."%'";
}
/* La clause de tri sur le poste */
if (isset($search_poste))
{
    $t_clauses[] = "affectation_1 = '". $search_poste ."'";
}
/* La clause de tri sur le grade */
if (isset($search_grades))
{
    $t_clauses[] = "grade = '". $search_grades ."'";
}
/* construction de la clause WHERE */
$clauses = (count($t_clauses) > 0) ? " AND ". implode(" AND ", $t_clauses) : null;
/* Construction de la requête */
$resultat = mysql_query ("SELECT * FROM cer_membres ".
                         "WHERE absence BETWEEN(0, 2) ". $clauses ." "); 
$total_resultats = mysql_num_rows($resultat);

if(empty($nb))
{
    $nb=0;
}
$par_page = 12;
$after_page = $nb+$par_page; 
$previous_page = $nb-$par_page;
$debut = $nb;
$nombre_resultats = $nb+$par_page;
    
$resultat2 = mysql_query ("SELECT * ".
                          "FROM cer_membres ".
                          "WHERE absence BETWEEN(0, 2) ". $clauses ." ".
                          "ORDER BY nom_membre ".
                          "LIMIT ". $debut .", ". $par_page ."");
?>
<table>
  <tr>
    <th>Nom</th>
    <th>Grade</th>
    <th>&nbsp;</th>
    <th>&nbsp;</th>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>                
<?php while ($membres = mysql_fetch_array ($resultat2)) 
{    
$id = $membres['id_membre']; 
?>
  <tr>
    <td><a href="index.php?p=players1&cat=1&id=<?php echo $id ; ?>"><?php echo $membres['nom_membre']; ?></a></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
<?php } ?>
</table>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 34 Messages

27 août 2006, 11:02

Merci je vais tester ça et je te dis quoi.

Eléphanteau du PHP | 34 Messages

27 août 2006, 11:11

Ca fonctionne pas. Il ne trouve rien.

Eléphanteau du PHP | 34 Messages

27 août 2006, 11:13

A savoir dés que je retire les lignes :
if (isset($search_poste))
{
    $t_clauses[] = "affectation_1 = '". $search_poste ."'";
}
/* La clause de tri sur le grade */
if (isset($search_grades))
{
    $t_clauses[] = "grade = '". $search_grades ."'";
}
La recherche pour le nom fonctionne.[/code]

Mammouth du PHP | 19672 Messages

27 août 2006, 11:15

Attention à un détail : on est parti avec l'opérateur "AND" : s'il ne trouve rien avec les trois clauses, c'est peut-être parce qu'il n'existe aucune ligne répondant aux trois critères en même temps. Donc il faut peut-être remplacer le "AND" par un "OR".
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: