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

  • Auteur de la discussion frederpe
  • Date de début

frederpe

Expert
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 :
Code:
<input name="selectmarque[]" type="checkbox" value="CHEVROLET"/>CHEVROLET
<input name="selectmarque[]" type="checkbox" value="CHRYSLER"/>CHRYSLER
<input name="selectmarque[]" type="checkbox" value="CITROEN"/>CITROEN
<input name="selectmarque[]" type="checkbox" value="DACIA"/>DACIA
<input name="selectmarque[]" type="checkbox" value="FIAT"/>FIAT
Le résulat de la sélection est traité par un script de la facon suivante :
Code:
$selectmarque = $_POST["selectmarque"];
$nb = sizeof($selectmarque);
foreach ($selectmarque as $valeur){
for($i = 1; $i < $nb; $i++)
        {
          $separateur = $i != $nb - 1 ? "," : "";
$chaine= "'".$valeur."'".$separateur;
$expression = "idmarque IN (".$chaine.")";
}
}
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 !
 

Orni

Habitué
Sympa ce smiley :o

Pour frederpe : une solution très simple :

[cpp]
$selectmarque = $_POST["selectmarque"];

// Je met toutes les valeurs sélectionnées entre ' '
foreach( $selectmarque as $id => $value )
{
$selectmarque[$id] = "'" . $value . "'";
}

// Je join le tout avec des virgules entre chaque élément du tableau
echo "idmarque IN ( " . join( $selectmarque , " , " ) . " )";

[/cpp]

Ca devrait aller mieux comme ça :merci:
 

frederpe

Expert
Sympa ce smiley :o

Pour frederpe : une solution très simple :

[cpp]
$selectmarque = $_POST["selectmarque"];

// Je met toutes les valeurs sélectionnées entre ' '
foreach( $selectmarque as $id => $value )
{
$selectmarque[$id] = "'" . $value . "'";
}

// Je join le tout avec des virgules entre chaque élément du tableau
echo "idmarque IN ( " . join( $selectmarque , " , " ) . " )";

[/cpp]

Ca devrait aller mieux comme ça :merci:


Vraiment merci pour cette solution !

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

Merci encore une fois !
 

chanteur06

Nouveau membre
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

Code:
if(isset($_POST['recherche']))
$_SESSION['recherche'] = $_POST['recherche'];
$recherche = $_SESSION['recherche']; 


// Paramétrage de la requête (ne pas modifier le nom des variable)
$table = "resto"; // Table à sélectionner dans la base
$champ = "city"; // Champ de la table à afficher pour tester ce script
$champ2 = "title";
$champ3 = "id";
$champ4 = "note";
$sql = "SELECT city, title,id,note FROM $table WHERE $champ LIKE '%".addslashes($recherche)."%' OR $champ2 LIKE '%".addslashes($recherche)."%' ORDER BY note DESC";
 // Requête initiale (à compléter si nécessaire)

$parpage = 20; // Nombre d'enregistrements par page à afficher

//==============================================================================
// Déclaration et initialisation des variables (ici ne rien modifier)
//==============================================================================

// On définit le suffixe du lien url qui affichera les pages
// $_SERVEUR['PHP_SELF'] donne l'arborescence de la page courante
$url = $_SERVER['PHP_SELF']."?limit=";

$total = mysql_query($sql); // Résultat total de la requête $sql
$nblignes = mysql_num_rows($total); // Nbre total d'enregistrements

// On calcule le nombre de pages à afficher en arrondissant
// le résultat au nombre supérieur grâce à la fonction ceil()
$nbpages = ceil($nblignes/$parpage);
//==============================================================================
// Exemple d'affichage HTML
//==============================================================================
// On teste en affichant la valeur des variables (facultatif)
echo "<p align=right>Résultats: il y a ".$nblignes." restaurants ";
echo "sur <b>".$nbpages." pages</b>.</p></right>\n";

// Si une valeur 'limit' est passée par url, on vérifie la validité de
// cette valeur par mesure de sécurité avec la fonction validlimit()
// cette fonction retourne automatiquement le résultat de la requête
$result = validlimit($nblignes,$parpage,$sql);

// On affiche le résultat de la requête
// On crée donc ici son propre tableau pour lequel on souhaite une pagination
while ($ligne = mysql_fetch_array($result)) {
  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";
}

Merci
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 136
Messages
6 718 120
Membres
1 586 398
Dernier membre
mookie767
Partager cette page
Haut