Page 1 sur 2

récupération checkbox

Posté : 17 déc. 2006, 14:21
par gaby
Bonjour,

un petit problème que je n'arrive pas à résoudre ...

Voilà, j'ai un formulaire dans lequel il ya des checkbox :
<input type="checkbox" name="insti[]" value="var1">
<input type="checkbox" name="insti[]" value="var2">
etc..

je peux naturellement cocher plusieurs cases..
je veux ensuite récupérer les lignes enregistrées dans ma base mysql en fonction des cases cochées

sur mon script select, voilà ce que je fais :
if(!empty($tabinst)) 
{
   foreach($tabinst as $cle => $valeur) 
  { 
      $rechercheinst="INST = '$valeur'";
  }
}
else
{
   $rechercheinst="(INST!='' OR INST='')";
}
//cette ligne de code est destinée à traiter le cas où je ne sélectionne rien dans les checkbox...j'écris la même chose pour tous les paramètres du formulaire

puis mon select :
$query="SELECT ID,CHAMPS 1, CHAMPS2, INST from matable where $recherchechamps1 and $recherchechaps2 and $rechercheinst";

je sohaite donc afficher toutes les lignes enregistrées correspondant aux choix de mes checkbox (les lignes avec var1 and les lignes avec var2 etc...)

cependant, je n'affiche que les lignes correspondant à une seule variable cochée...par exemple, si je coche toto et tata, je n'affiche que les enregistrements correspondant à tata...

qu'est ce qui cloche ?

merci par avance de votre aide

Posté : 17 déc. 2006, 14:59
par Truc
Modération :
gaby, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Et une bonne indentation n'est pas de trop non plus :wink:

Posté : 17 déc. 2006, 15:03
par Truc
Ce qui cloque est au niveau de cette ligne :
$rechercheinst="INST = '$valeur'";
qui est sensée se répéter N fois il faut donc ajouter les nouvelles valeurs aux précédentes ici tu écrases et ne gardes donc que la dernière.

Ce que tu peux faire est d'ajouter les valeurs dans un tableau :
$rechercheinst[]="INST = '$valeur'";
Puis repasser le tout sous forme de chaine de caractères avec un implode() :
$rechercheinst = implode(' OR ',$rechercheinst);
Affiche "$rechercheinst" après ça pour vérifier la syntaxe :)

Posté : 17 déc. 2006, 15:35
par Invité
merci !

ca marche très bien..

autre chose : je voudrais également pouvoir afficher de manière exclusive, c'est à dire tous les enregistrements correspondant à la fois à ma var1 (du checkbox) et à ma var2 (du checkbox)

j'ai essayé de passer dans implode(' AND ', $rechercheinst) ..mais cela ne me renvoit aucun résultat (alors qu'il y en a)

comment faut-il faire ?

Posté : 17 déc. 2006, 15:41
par mere-teresa
Modération :
gaby, si tu as une autre question ouvre un nouveau sujet, cela te permettra d'avoir plus de réponses.

En plus, tu pourras mettre Résolu dès que ton problème évoqué ici sera réglé.

Merci de prendre le temps de lire les règlements.

Posté : 17 déc. 2006, 16:19
par Truc
mère-T a la main légère sur les modèles :lol:
on va tout de même rester sur ce topic (pour l'instant)
j'ai essayé de passer dans implode(' AND ', $rechercheinst) ..mais cela ne me renvoit aucun résultat (alors qu'il y en a)

As tu affiché la requête générée pour voir ce que ça donne ?

ça doit ressembler à

Code : Tout sélectionner

SELECT ..... AND INST = 'valeur_1' AND INST = 'valeur_2'
Donc pas possible qu'un champ soit égal à "valeur_1" et en même temps à "valeur_2"

Posté : 17 déc. 2006, 17:06
par Invité
j'ai regardé dans les fac sql mais je ne trouve pas ...

je veux faire quelque chose du type

select NOM from matable where le contenu du champs NOM est le même lorsque INST='var1' et/ou INST='var2'

Posté : 17 déc. 2006, 18:33
par Truc
C'est la fonction du "OR" ça :-k

Posté : 17 déc. 2006, 19:25
par Invité
si je passe :

select NOM from matable where INST='var1' OR INST='var2' ...

je récupère toutes les lignes NOM correspondants à INST (var1 et var2)


moi, ce que je veux, c'est récupérer les enregistrements INST où le champs NOM est commun
ex : NOM='toto' INST='ici'
NOM='tata" INST='ailleurs'
NOM='toto' INST='la bas'
NOM='titi' INST='ici'
je veux savoir dans quel INST, on trouve toto

Posté : 17 déc. 2006, 19:29
par mere-teresa

Code : Tout sélectionner

select NOM from matable where INST='toto'
As-tu un outil comme le MySQL Query Browser (site mysql.com), PHPMyAdmin ou Eskuel qui te permet de faire directement des requêtes sur ta base et d'en voir le résultat ?

Posté : 17 déc. 2006, 19:37
par Truc
je veux savoir dans quel INST, on trouve toto
Je fait peut être une over-dose d'SQL mais pour ça il serait plus rapide d'ajouter une clause sur le nom.

Code : Tout sélectionner

SELECT INST from matable where NOM='toto'

Posté : 17 déc. 2006, 19:38
par Invité
oui mais cela ne m'aide pas

Posté : 17 déc. 2006, 20:40
par Invité
le problème consiste à n'afficher que les doublons du champs NOM, dans le cas ou la variable postée (pour NOM)=""

il y aurait bien une astuce :

quand je récupère le contenu du champs NOM => $nom=$result['NOM'];
j'ai pensé à passer un tableau du genre $name=array($nom) => qui contient tous les topics du champs récupéré

puis il faudrait parcourir le tableau pour n'afficher ensuite que les valeurs $nom qui sont présentes plus d'une fois dans le tableau
mais je ne sais pas comment faire ...

Posté : 17 déc. 2006, 22:14
par Truc
J'ai l'impression que tu construis une usine à gaz :?

Pour qu'on comprenne bien, donne nous un jeu d'essai, des données de la table et ce que tu voudrais obtenir en sortie.

Posté : 17 déc. 2006, 22:24
par Invité
voila un extrait du script

if($nom!="") {$recherchenom="NOM like '%$nom%'";}else{$recherchenom="(NOM!='' OR NOM='')";}// $nom vient d'un champs de saisie
if(!empty($tabinstitution)) {foreach($tabinstitution as $cle => $valeur) { $rechercheinstitution[]="INSTITUTION='$valeur'";}}else{$rechercheinstitution="(INSTITUTION!='' OR INSTITUTION='')";}

echo"<table border='1'><tr>
$query="SELECT ID,NOM,INSTITUTION from table where $recherchenom  and ($rechercheinstitution) order by '$affichage'";	
$sql=mysql_query($query);

while($result=mysql_fetch_array($sql))
{
$id=$result['ID'];
$nom=$result['NOM'];
$institution=$result['INSTITUTION'];

echo"<tr><td> $nom</td><td>$institution</td></tr>";
}
echo"</table>";
mon problème consiste à n'afficher que les doublons, cad les noms $result['NOM'] présents plus d'une fois