récupération checkbox

gaby
Invité n'ayant pas de compte PHPfrance

17 déc. 2006, 14:21

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 déc. 2006, 14:59

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:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 déc. 2006, 15:03

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 :)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

17 déc. 2006, 15:35

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 ?

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

17 déc. 2006, 15:41

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.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 déc. 2006, 16:19

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"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

17 déc. 2006, 17:06

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'

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 déc. 2006, 18:33

C'est la fonction du "OR" ça :-k

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

17 déc. 2006, 19:25

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

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

17 déc. 2006, 19:29

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 ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 déc. 2006, 19:37

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'
Modifié en dernier par Truc le 17 déc. 2006, 19:38, modifié 1 fois.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

17 déc. 2006, 19:38

oui mais cela ne m'aide pas

Invité
Invité n'ayant pas de compte PHPfrance

17 déc. 2006, 20:40

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 ...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 déc. 2006, 22:14

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

17 déc. 2006, 22:24

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