Probleme : Formulaire de recherche

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme : Formulaire de recherche

par Alfala Bucro » 27 août 2006, 13:39

j'ai trouver une solution annexe. Merci de ton aide en tt cas

par Alfala Bucro » 27 août 2006, 11:59

en effet :)

par Cyrano » 27 août 2006, 11:56

Fais afficher la requête générée avant exécution et teste-là directement dans phpMyAdmin, ça devrait t'aider pas mal.

par Alfala Bucro » 27 août 2006, 11:55

Je comprend, je comprend mais ca veut pas fonctionner. Je vais creuser mais y a un truc qui manque....

par Cyrano » 27 août 2006, 11:43

Tu n'es décidément pas logique et je parie que tu as remplacé le "AND" entre la clause d'absence et les clauses dynamiques : c'est l'autre "AND" dans la fonction implode() qu'il faut remplacer et non la première.

Essaye d'avoir un raisonnement logique et essaye de formuler la question en français avant de traduire ça en SQL, ça devrait ressembler à quelque chose comme ceci:

Code : Tout sélectionner

"Me retourner toutes les lignes depuis la table cer_membres Où ( le champ absence a une valeur entre 0 et 2 ET ( Le nom "est proche de" '". $la_variable_nom ."' OU Le grade est '". $la_variable_grade ."' OU Le poste est '". $la_variable_poste ."' ) )"
En d'autre termes, on vérifie que l'absence est dans une fourchette entre 0 et 2 ET qu'au moins une des condition suivantes est vraie, donc on regroupe les trois clauses suivantes séparées par un "OR", mais pour une question de précédence des opérateurs, on devra ajouter des parenthèses. La construction sera donc modifiée comme ceci:
$clauses = (count($t_clauses) > 0) ? " AND (". implode(" OR ", $t_clauses) .")" : null;
Est-ce que tu comprends mieux le fonctionnement de cette façon ?

par Alfala Bucro » 27 août 2006, 11:35

Il doit y avoir un souci avec le AND et le OR ... mais je vois pas la

par Alfala Bucro » 27 août 2006, 11:17

sauf que là, il me prend plus en compte mes demandes au point de vue d'absence...

par Cyrano » 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".

par Alfala Bucro » 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]

par Alfala Bucro » 27 août 2006, 11:11

Ca fonctionne pas. Il ne trouve rien.

par Alfala Bucro » 27 août 2006, 11:02

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

par Cyrano » 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>

par Alfala Bucro » 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.

par Alfala Bucro » 27 août 2006, 10:14

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

par Alfala Bucro » 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.