Se connecter avec
S'enregistrer | Connectez-vous

[Résolu] Pb recherche multicritère sur une table Mysql

Dernière réponse : dans Programmation

Bonjour,

Depuis deux jous je me casse la tête sur un truc un peu idiot.

J'ai eu formulaire dont une partie fait appel a des cases a cocher :
  1. <input name="selectmarque[]" type="checkbox" value="CHEVROLET"/>CHEVROLET
  2. <input name="selectmarque[]" type="checkbox" value="CHRYSLER"/>CHRYSLER
  3. <input name="selectmarque[]" type="checkbox" value="CITROEN"/>CITROEN
  4. <input name="selectmarque[]" type="checkbox" value="DACIA"/>DACIA
  5. <input name="selectmarque[]" type="checkbox" value="FIAT"/>FIAT

Le résulat de la sélection est traité par un script de la facon suivante :
  1. $selectmarque = $_POST["selectmarque"];
  2. $nb = sizeof($selectmarque);
  3. foreach ($selectmarque as $valeur){
  4. for($i = 1; $i < $nb; $i++)
  5. {
  6. $separateur = $i != $nb - 1 ? "," : "";
  7. $chaine= "'".$valeur."'".$separateur;
  8. $expression = "idmarque IN (".$chaine.")";
  9. }
  10. }

Voila a mon problème. Normalement $expression devrait me retourner:
idmarque IN ('CHEVROLET','CHRYSLER','CITROEN') si CHEVROLET, CHRYSLER et CITROEN sont selectionné dans le formulaire.

Mais voila $expression me retrourne plutot :
idmarque IN ('CHEVROLET','CHRYSLER','CITROEN','CHEVROLET','CHRYSLER','CITROEN','CHEVROLET''CHRYSLER''CITROEN')

Je pense que le probleme viens de ma bouche For qui me definie l'affichage de $separateur mais ou precisement là je séche !
Lassé par la pub ? Créez un compte

Sympa ce smiley :o 

Pour frederpe : une solution très simple :

  1. $selectmarque = $_POST["selectmarque"];
  2.  
  3. // Je met toutes les valeurs sélectionnées entre ' '
  4. foreach( $selectmarque as $id => $value )
  5. {
  6. $selectmarque[$id] = "'" . $value . "'";
  7. }
  8.  
  9. // Je join le tout avec des virgules entre chaque élément du tableau
  10. echo "idmarque IN ( " . join( $selectmarque , " , " ) . " )";


Ca devrait aller mieux comme ça :jap: 

Citation :
Sympa ce smiley :o 

Pour frederpe : une solution très simple :

  1. $selectmarque = $_POST["selectmarque"];
  2.  
  3. // Je met toutes les valeurs sélectionnées entre ' '
  4. foreach( $selectmarque as $id => $value )
  5. {
  6. $selectmarque[$id] = "'" . $value . "'";
  7. }
  8.  
  9. // Je join le tout avec des virgules entre chaque élément du tableau
  10. echo "idmarque IN ( " . join( $selectmarque , " , " ) . " )";


Ca devrait aller mieux comme ça :jap: 



Vraiment merci pour cette solution !

Nettement plus simple que celle que j'avais envisagé et surtout qui marche :-)

Merci encore une fois !

hello
j'ai vu que tu avais apporté une réponse favorable sur un autre post.
J'ai un soucis sur une recherche multicriteres. sur un champ de recherche, je ne peux pas entrer plus d'un mot,sinon le script me retourne "o résultats"... je te joins le code actuel

  1. if(isset($_POST['recherche']))
  2. $_SESSION['recherche'] = $_POST['recherche'];
  3. $recherche = $_SESSION['recherche'];
  4.  
  5.  
  6. // Paramétrage de la requête (ne pas modifier le nom des variable)
  7. $table = "resto"; // Table à sélectionner dans la base
  8. $champ = "city"; // Champ de la table à afficher pour tester ce script
  9. $champ2 = "title";
  10. $champ3 = "id";
  11. $champ4 = "note";
  12. $sql = "SELECT city, title,id,note FROM $table WHERE $champ LIKE '%".addslashes($recherche)."%' OR $champ2 LIKE '%".addslashes($recherche)."%' ORDER BY note DESC";
  13. // Requête initiale (à compléter si nécessaire)
  14.  
  15. $parpage = 20; // Nombre d'enregistrements par page à afficher
  16.  
  17. //==============================================================================
  18. // Déclaration et initialisation des variables (ici ne rien modifier)
  19. //==============================================================================
  20.  
  21. // On définit le suffixe du lien url qui affichera les pages
  22. // $_SERVEUR['PHP_SELF'] donne l'arborescence de la page courante
  23. $url = $_SERVER['PHP_SELF']."?limit=";
  24.  
  25. $total = mysql_query($sql); // Résultat total de la requête $sql
  26. $nblignes = mysql_num_rows($total); // Nbre total d'enregistrements
  27.  
  28. // On calcule le nombre de pages à afficher en arrondissant
  29. // le résultat au nombre supérieur grâce à la fonction ceil()
  30. $nbpages = ceil($nblignes/$parpage);
  31. //==============================================================================
  32. // Exemple d'affichage HTML
  33. //==============================================================================
  34. // On teste en affichant la valeur des variables (facultatif)
  35. echo "<p align=right>Résultats: il y a ".$nblignes." restaurants ";
  36. echo "sur <b>".$nbpages." pages</b>.</p></right>\n";
  37.  
  38. // Si une valeur 'limit' est passée par url, on vérifie la validité de
  39. // cette valeur par mesure de sécurité avec la fonction validlimit()
  40. // cette fonction retourne automatiquement le résultat de la requête
  41. $result = validlimit($nblignes,$parpage,$sql);
  42.  
  43. // On affiche le résultat de la requête
  44. // On crée donc ici son propre tableau pour lequel on souhaite une pagination
  45. while ($ligne = mysql_fetch_array($result)) {
  46. echo "<div class='font'><a href=\"affichage.php?id=".$ligne[$champ3]."\">".$ligne[$champ]."\n\n".$ligne[$champ2]."\n\n".$ligne[$champ4]."/10</a></div><br />\n";
  47. }


Merci
Lassé par la pub ? Créez un compte