récupération checkbox

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : récupération checkbox

par Invité » 19 déc. 2006, 19:06

bon, j'ai finalement réussi à trouver la bonne formule.
Je rappelle mon problème : extraire d'une base mysql tous les contenus des champs NOM qui ont les mêmes valeurs d'un champs INST (dont les valeurs sont passées en paramètre à partir d'un input checkbox d'un formulaire)

la requete sql est la suivante :
$query="SELECT ID,FONCTION,NOM from ma_table where FONCTION='val1' or FONCTION='val2' or FONCTION= 'etc..'  GROUP BY NOM HAVING COUNT(NOM) > 1  and COUNT(DISTINCT FONCTION)=$count ";	
$sql=mysql_query($query);
$count représente le nombre d'éléments passés en paramètre par le checkbox du formulaire (checkbox value='$fonction[]'), c'est à dire le nombre de val à partir duquel on va extraire les valeurs du champs FONCTION de la table
c'est à dire :
$count=count($tabfonction);
la formule fonctionne selon le désir de mon projet, à savoir extraire tous doublons NOM enregistrés pour l'ensemble des valeurs (uniquement ces valeurs et toutes ces valeurs) fonction passée en paramètre à la requete WHERE

je considère mon problème comme résolu !

merci à vous tous pour les pistes que vous m'avez indiquées

par Cyrano » 18 déc. 2006, 22:33

prends donc ta requête de façon logique : tu demande le nom et en même temps le nombre de noms : est-ce que ça te semble cohérent ?

Définis donc exactement les données que tu veux ressortir de ta table : Affiche nous un jeu d'essai et sur cette base montre-nous ce que tu voudrais obtenir. Tu vas voir que ça va être autrement plus simple à résoudre avec ces éléments.

par Invité » 18 déc. 2006, 22:09

ma requete sql est la suivante :
$query="SELECT ID,NOM,FONCTION, COUNT(NOM) as nombre from ma_table where  FONCTION='tata' OR FONCTION='toto' GROUP BY NOM HAVING nombre > 1 order by NOM";	
$sql=mysql_query($query);
pour moi, la formule est censée retournée tous les noms dont la fonction est toto et tata, c'est a dire ceux qui exercent les 2 fonctions..

..pour ce qui est d'expliquer plus "scientifiquement" le group by having => english translation : retourné par NOM dont le nombre d'nregistrements est supérieur à 1 (quelque chse comme cela ??!!)

mais si j'en juge par les résultats que j'obtiens, je dois me tromper ...

par Cyrano » 18 déc. 2006, 21:53

...j'ai bien besoin d'utiliser group by having avec une requete where ...
Un "group by having" :-k c'est quoi au juste dans ton esprit ? Essaye de décrire ça dans tes propres mots

par Invité » 18 déc. 2006, 21:42

décidément, sql me donne du fil à retorde..

j'ai bien besoin d'utiliser group by having avec une requete where ...

est ce que cela est possible ??

telle est la question

par Invité » 18 déc. 2006, 17:53

autre problème que je rencontre :

si dans ma condition "where", je sélection plus de 2 paramètres, j'obtiens des résultats par excès, cad des noms qui correspondent à au moins 2 paramètres pour le champs INST mais pas exclusivement à tous les paramètres

par Invité » 18 déc. 2006, 17:26

il ya un autre problème avec la syntaxe ...

mon problème consiste à afficher tous les noms (champs NOM) qui se trouvent "ici" et "ailleurs" en même temps =>ici et ailleurs sont les contenus du champs INST

la difficulté que je rencontre c'est que si un nom se trouve 2 fois "ici" (2 enregistrements pour INST='ici' avec ce nom) et que il se trouve également à "paris" (1 enregistrement avec INST='paris' pour ce nom),
je vais l'afficher dans mes résultats !

en résumé, la formule fonctionne si un même nom(du champs NOM) n'est enregistré qu'avec une seule êt même valeur pour le champs INST

problème ... :cry:

par Invité » 18 déc. 2006, 14:03

mais alors quelle est la bonne syntaxe ?

par Ajoloca » 18 déc. 2006, 13:26

Bonjour,

C'est parceque NOM='toto' couplé avec INST='ailleurs' ne se trouve qu'une fois dans la table.

par Invité » 18 déc. 2006, 13:07

en faisant une recherche sur la doc sql, j'étais parvenu à envisager quelque chose comme cela...mais tu m'as donné la bonne syntaxe ..

merci beaucoup de ton aide ..
la syntaxe que j'utilise est doc celle-ci :

$query="SELECT NOM, INST, COUNT(NOM) nombre from es.gens where (INST = 'ici' or INST = 'ailleurs') GROUP BY NOM HAVING nombre > 1 ";

cependant, avec cette syntaxte, je n'affiche qu'une seule ligne de doublons ...

je m'explique : si j'ai dans ma base NOM = toto INST=ici et NOM=toto INST=ailleurs => je vais afficher uniquement la ligne concernant INST=ici et pas celle où le champs INST=ailleurs ....

dans mon projet, je voudrais afficher les deux lignes de résultat, cad l'ensemble des lignes doublons
j'ai bien essayer de jouer sur les parenthèses ou de changer le paramètre de group by ..mais ca ne marche pas ... :cry: [/php]

par Ajoloca » 18 déc. 2006, 02:54

Bonsoir,
Pour commencer, ça
SELECT ID,NOM,INSTITUTION from table where
ça ne passera pas. table est un mot réservé MySQL
mon problème consiste à n'afficher que les doublons, cad les noms $result['NOM'] présents plus d'une fois
Pour ça tu peux le demander à MySQL dans la requête.
Je te donne un exemple, adapte-le à tes besoins
SELECT nom, count(nom) nombre FROM ma_table GROUP BY nom HAVING nombre > 1;
Exécute cette requête directement et regarde si ça correspond à ce que tu cherches.

par Invité » 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

par Truc » 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.

par Invité » 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 ...

par Invité » 17 déc. 2006, 19:38

oui mais cela ne m'aide pas