A voir également:
- Moteur recherche php/sql
- Safari moteur de recherche - Télécharger - Navigateurs
- Recherche musique - Guide
- Pourquoi mon moteur de recherche change tout seul ✓ - Forum Google Chrome
- Easy php - Télécharger - Divers Web & Internet
- Google recherche par image - Guide
14 réponses
Utilisateur anonyme
27 juin 2012 à 11:49
27 juin 2012 à 11:49
Bonjour
Si j'ai bien compris ton problème, il suffit de ne pas mettre and autre=0 and autre2=0
Construis ton where dans une boucle en n'incluant que les conditions cochées, au lieu de mettre au départ toutes les conditions et de leur associer 0 ou 1
Si j'ai bien compris ton problème, il suffit de ne pas mettre and autre=0 and autre2=0
Construis ton where dans une boucle en n'incluant que les conditions cochées, au lieu de mettre au départ toutes les conditions et de leur associer 0 ou 1
Utilisateur anonyme
27 juin 2012 à 17:13
27 juin 2012 à 17:13
Non, false ce n'est pas 0 et true ce n'est pas 1.
true et false sont de booleens, 0 et 1 des nombres. Ce n'est pas la même chose.
Dans le contexte ou tu les utilises, c'est à dire pour créer un chaîne, true est bien remplacé par 1 mais false est remplacé par... rien du tout, et non pas par 0. Donc ta requête n'aurait pas du tout la tête que tu crois.
j'ai abrégé car je voulais pas faire un post trop long. Tu as bien fait, merci
true et false sont de booleens, 0 et 1 des nombres. Ce n'est pas la même chose.
Dans le contexte ou tu les utilises, c'est à dire pour créer un chaîne, true est bien remplacé par 1 mais false est remplacé par... rien du tout, et non pas par 0. Donc ta requête n'aurait pas du tout la tête que tu crois.
j'ai abrégé car je voulais pas faire un post trop long. Tu as bien fait, merci
Merci pour ta réponse.
En fait le nombre de service sélectionné est variable. donc le seul moyen que j'ai trouvé c'est de mettre tous les service dans la requête sql en mettant les "autre = 0"
En fait le nombre de service sélectionné est variable. donc le seul moyen que j'ai trouvé c'est de mettre tous les service dans la requête sql en mettant les "autre = 0"
Utilisateur anonyme
27 juin 2012 à 13:58
27 juin 2012 à 13:58
C'est bien ce que je te dis : ce n'est pas le bon moyen. Il ne faut pas mettre les "autre = 0", il ne faut pas mettre les "autre" du tout.
Montre ton code pour que je le modifie
Montre ton code pour que je le modifie
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voilà la partie de mon code avec la requête sql.
$sql_so = $connexion->prepare("SELECT * FROM societe WHERE ess_cg LIKE '%".$mod0."%' or ess_gb LIKE '%".$mod1."%' or ess_gf LIKE '%".$mod2."%' or ess_ga LIKE '%".$mod3."%' or ess_gc LIKE '%".$mod4."%' or ess_gp LIKE '%".$mod5."%' or ess_gi LIKE '%".$mod6."%' or ess_pro LIKE '%".$mod7."%' or ess_liasse LIKE '%".$mod8."%' or ess_tps LIKE '%".$mod9."%' or ess_metier LIKE '%".$mod10."%' "); $sql_so->execute(array()) or die(print_r($sql_so->errorInfo())); $donnees_so = $sql_so->fetch();
Utilisateur anonyme
27 juin 2012 à 14:38
27 juin 2012 à 14:38
Où sont les = 0 ou 1 de ta requête de départ ?
Tous tes %$mod0%,%$mod1 etc.. correspondent à des checkbox ou non ? Ils peuvent valoir autre chose que 0 o u 1 ?
Tous tes %$mod0%,%$mod1 etc.. correspondent à des checkbox ou non ? Ils peuvent valoir autre chose que 0 o u 1 ?
les $mod ont pour valeur 0 ou 1
Je reprends les valeur des "mod" à partir de la checkbox
voici la code où je crée les variables $mod
Chaque %".$mod1."% équivaut correpond à la valeur 0 ou 1
Je reprends les valeur des "mod" à partir de la checkbox
voici la code où je crée les variables $mod
$i = $_POST['i']; if($i == 0) { for ($j = 0; $j < 45; $j++) { ${'mod'.$j} = false; // $mod crée if(isset($_POST['mod'.$j.''])) { $_POST['mod'.$j.''] = true; } } extract($_POST); // j'extrais les $_post pour que ça devienne des $mod, et ça ecrase les anciennes valeurs
Chaque %".$mod1."% équivaut correpond à la valeur 0 ou 1
Utilisateur anonyme
Modifié par le père. le 27/06/2012 à 15:55
Modifié par le père. le 27/06/2012 à 15:55
D'après le code que tu viens de mettre, chaque $mod vaut true ou false, en non pas 0 ou 1.
De toutes manières, comme tu maîtrises la valeur de tes variables, pourquoi mettre un LIKE avec des % ? Ça me semble totalement absurde.
Et tu sembles initialiser $mod1 à $mod45, alors qu'il n'y a que 11 variables dans ta requête...
M'enfin...
Sans utiliser de variables intermédiaires $mod :
De toutes manières, comme tu maîtrises la valeur de tes variables, pourquoi mettre un LIKE avec des % ? Ça me semble totalement absurde.
Et tu sembles initialiser $mod1 à $mod45, alors qu'il n'y a que 11 variables dans ta requête...
M'enfin...
Sans utiliser de variables intermédiaires $mod :
$tbchamps=array(); $tbnomschamps=array('ess_cg','ess_gb','ess_gf','ess_ga','ess_gc','ess_gp','ess_gi','ess_pro','ess_liasse','ess_tps','ess_metier'); for ($k=0; $k<=10; $k++) { if (isset($_POST['mod'.$k])) $tbchamps[]=$tbnomschamps[$k]; } $condition=''; if (count($tbchamps)>0) $condition=" WHERE ".implode(' OR ',$tbnomschamps); // AND ou OR ? à toi de voir $sql_so = $connexion->prepare("SELECT * FROM societe".$condition;
Merci beaucoup, je vais essayé d'appliquer ta méthode.
En ce qui concerne le code avec les $mod il y en a bien 45, j'ai abrégé car je voulais pas faire un post trop long.
concernant le 0 et 1
false = 0
true = 1
non ?
En ce qui concerne le code avec les $mod il y en a bien 45, j'ai abrégé car je voulais pas faire un post trop long.
concernant le 0 et 1
false = 0
true = 1
non ?
$tbchamps=array(); $tbnomschamps=array('ess_cg','ess_gb','ess_gf','ess_ga','ess_gc','ess_gp','ess_gi','ess_pro','ess_liasse','ess_tps','ess_metier', 'mono_cg','mono_gb', 'mono_gf', 'mono_ga', 'mono_gc', 'mono_gp', 'mono_gi', 'mono_pro', 'mono_liasse', 'mono_tps', 'mono_metier', 'r5_cg', 'r5_gb', 'r5_gf', 'r5_ga', 'r5_gc', 'r5_gp', 'r5_gi', 'r5_pro', 'r5_liasse', 'r5_tps', 'r5_metier', 'r20_cg', 'r20_gb', 'r20_gf', 'r20_ga', 'r20_gc', 'r20_gp', 'r20_gi', 'r20_pro', 'r20_liasse', 'r20_tps', 'r20_metier'); for ($k=0; $k<=45; $k++) { if (isset($_POST['mod'.$k])) $tbchamps[]=$tbnomschamps[$k]; } $condition=''; if (count($tbchamps)>0) { $condition=" WHERE ".implode(' and ',$tbnomschamps); // AND ou OR ? à toi de voir } $sql_so = $connexion->prepare("SELECT * FROM societe".$condition); ;
J'ai appliqué ton code,
Lorsque je mets ' OR ' toutes les société avec un service souscrit est affiché (qu'importe le service coché dans la checkbox)
et si je mets ' AND ' j'ai aucun résultat.
alors j'ai essayé de mettre la condition en faisant
$condition=" WHERE ".implode(' and ',$tbnomschamps) "='1'";
mais ça plante tout, et il m'affiche
Parse error: parse error in C:\wamp\www\repertoire\cible_recherche.php on line 613
j'ai essayé en modifié la requete sql au lieu de la variable $condition
$sql_so = $connexion->prepare("SELECT * FROM societe".$condition "= '1'");
cela me donne aussi une erreur.
En fait dans ton code original, je vois pas à quel moment tu dis "selectionner quand le service = 1"
Pourrais-tu m'éclairer, s'il te plait
Utilisateur anonyme
28 juin 2012 à 17:41
28 juin 2012 à 17:41
1 - Je ne mets pas "=1" car ce n'est pas utile. Dans la mesure où, par exemple, ess_cg et ess_gb ne peuvent valoir que 1 ou 0, il est équivalent d'écrire :
... WHERE ess_cg=1 AND ess_gb=1
ou
... WHERE ess_cg AND ess_gb
2 -
3 - Si le comportement est celui-ci, c'est à cause de deux erreurs combinées : je n'ai pas repris le bon tableau pour l'implode (tu aurais pu le voir toi même) et il y a 44 champs et non pas 45, donc la boucle trouve toujours qu'il manque un champ, donc c'est toujours faux avec le AND
d'où la correction :
... WHERE ess_cg=1 AND ess_gb=1
ou
... WHERE ess_cg AND ess_gb
2 -
$condition=" WHERE ".implode(' and ',$tbnomschamps) "='1'";ne peut pas marcher, il manque un point avant le "=1" et en plus ça ne fait pas ce que tu crois : ça rajoute un seul =1 à la fin de la requête, pas après chaque champ.
3 - Si le comportement est celui-ci, c'est à cause de deux erreurs combinées : je n'ai pas repris le bon tableau pour l'implode (tu aurais pu le voir toi même) et il y a 44 champs et non pas 45, donc la boucle trouve toujours qu'il manque un champ, donc c'est toujours faux avec le AND
d'où la correction :
for ($k=0; $k<count($tbnomschamps); $k++) { if (isset($_POST['mod'.$k])) $tbchamps[]=$tbnomschamps[$k]; } $condition=''; if (count($tbchamps)>0) { $condition=" WHERE ".implode(' and ',$tbchamps); // AND ou OR ? à toi de voir }
Merci beaucoup pour ton aide, ça marche impec' !
En ce qui concerne
$condition=" WHERE ".implode(' and ',$tbnomschamps) "='1'";
j'ai testé, en sql directement
SELECT * FROM societe where ess_cg AND ess_gp = "1";
et ça me donne le même résultat que
SELECT * FROM societe where ess_cg = "1" AND ess_gp = "1";
j'en ai conclue que les 2 méthodes se valent.
En ce qui concerne
$condition=" WHERE ".implode(' and ',$tbnomschamps) "='1'";
j'ai testé, en sql directement
SELECT * FROM societe where ess_cg AND ess_gp = "1";
et ça me donne le même résultat que
SELECT * FROM societe where ess_cg = "1" AND ess_gp = "1";
j'en ai conclue que les 2 méthodes se valent.
Utilisateur anonyme
28 juin 2012 à 21:21
28 juin 2012 à 21:21
que les 2 méthodes se valent.
Bien sûr puisque ess_cg est équivalent à ess_cg=1
Toujours dans la mesure où ess_cg ne peut valoir que 0 ou 1.
Mais c'est un peu absurde de ne pas mettre =1 sur tous les champs sauf le dernier.
Bien sûr puisque ess_cg est équivalent à ess_cg=1
Toujours dans la mesure où ess_cg ne peut valoir que 0 ou 1.
Mais c'est un peu absurde de ne pas mettre =1 sur tous les champs sauf le dernier.