Requete sur des checkbox avec valeur cochee ou non celon criteres !

Résolu
murrigane
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006
- 25 août 2005 à 10:39
murrigane
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006
- 27 août 2005 à 13:41
Bonjour !



J'ai fait une requete pour faire une comparaison de criteres et suite a
cela cochee les checkboxes qui sont concernees par le critere en
question. Cette requete fonctionne tres bien, mais je la trouve un peu
lourde et je voudrai l'ameliorer.

Avant de mettre mon code petite explication : j'ai une table prof
(teacher), une table pour les matieres (subject) et une table pour les
matieres enseignees par chaque prof (teaching). J'ai ete obligee de
travailler comme cela du fait que chaque prof peut enseigner 6 matieres
....

Ensuite lors de la creation d'un prof, sur le formulaire il y a la
liste de toutes les matieres qu'il est possible d'enseigner et il y a
juste a cocher les ou la checkbox concernees.

Lors d'une possible modification c'est le meme principe que je veux
retrouver mais avec les checkbox des matieres deja selectionner.

Voici ma requete :

$sqlt= "SELECT idsubject,subject FROM subject";

$resultt = mysql_query($sqlt) or
die(''.$error.' :
'.$sqlt.'
'.mysql_error());

while ($teach = mysql_fetch_row($resultt))

{

echo $teach[1];


echo '
$value){

$sub = array ($value);

if (in_array($subject[0],$sub)){

print 'checked';}

else {

print '';}

}//end of the $sqls while query

}//end of the foreach

echo '>';

//end all the teacher's subject query

}



Et voici ce que j'ai tente de faire pour l'ameliorer, mais elle ne
fonctionne pas du fait que je fait tourner (je pense) la boucle sur
elle meme :

//begining of the subject's query for the teachers

$sqls="SELECT subject.idsubject,subject,teaching.idsubject FROM subject,teaching WHERE teaching.ppsno='$mod' ";

$results = mysql_query($sqls) or die(' '.$error.' : '.$sqls.'
'.mysql_error());

while ($subject =
mysql_fetch_row($results))


{

echo $subject[1];


echo ' $value)


{$sub = array
($value);


if
(in_array($subject[0],$sub)){


print
'checked';}


else {print
'';}








}

echo '>';

}

Donc voila, je vous remercie d'avance !
A voir également:

13 réponses

J_G
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
25 août 2005 à 23:15
Salut,



ça sent le sujet d'examen ! j'espère que je n'arrive pas trop tard... ;)



Je te propose un truc comme ça:



/*

Toi tu veux que, selon le prof, on sache parmis tous les cours
lesquels il enseigne. Enfin je dis "tu", mais à bien y réfléchir...
c'est franchement le sujet de cours typique! IL FALLAIT APPRENDRE LES
JOINTURES.

*/

$sql = "SELECT subject AS sub, subject.idsubject AS id,
teaching.idsubject AS teaching FROM subject OUTER JOIN teaching WHERE
subject.idsubject = teaching.idsubject";

$res = mysql_query($sql);

foreach( $row = mysql_fetch_assoc($res) {

if( isset($res['teaching'] ) and $res['teaching']!==nul ) {

$chk = "checked";

} else {

$chk = "";

}

echo ... je te laisse faire la suite

Aucune garantie de fonctionnement, c'est juste pour l'idée!



Bonn note!



echo



// La requète : on tire tous les sujets







qques remarques :


<li>trés belles écritures (français et PHP) bravo ça fait plaisir à lire</li>
<li>mysql_fetch_row, préfère mysql_fetch_assoc qui te sort un tableau associatif : ainsi tu auras $subject['idsubject'] au lieu de $subject[0]. Plus lisible... Sinon, mysql_fetch_array fait les deux en même temps...</li>
3
J_G
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
26 août 2005 à 19:50
Non, je déconne!



Bon à partir d'ici, arrète de blinder ta requète SQL. Elle va devenir illisible (si ce n'est pas déjà le cas!)



Voili ce que je propose:

// First U take informations above famillies

$sql_id = "SELECT * FROM familly";

$res = mysql_query($sql);

// Then parse the result into an array that has idfamilly as keys and familly as values

while( $arr = mysql_fetch_row( $res) ) {

$familly[$arr[idfamilly]] = $arr[familly];

}

// Now you've re-created a new Database ;)



// After all, keep-on you've done before :

$sqls="SELECT subject AS subject, subject.idsubject AS idsubject,
teaching.idsubject AS teaching, subject.idfamily AS idfamily

FROM subject LEFT JOIN teaching ON subject.idsubject=teaching.idsubject AND teaching.ppson='$mod' ORDER BY idfamilly";

// loop on result and when change idfamilly, create a new colon.

$current_familly = ""

while($res = ...) {

if($res['idfamilly']!=$current_familly) { /*create new colon*/ }

/* parse subject as you've earlier */

}



Quelque chose comme ça... en gros!
3
murrigane
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

26 août 2005 à 10:40
Merci pour tes compliments et non tu n'arrives pas trop tard



Je vais aller tester ta proposition, de ce pas ! Je reviendra par la suite sur le forum.

Par contre j'ai des nouveaux elements (comme si c'etait deja pas assez
compliquer) a faire entrer en compte, je m'explique comme ca si je
n'arrive pas a me depatouiller et si tu as une autre idee ou quelqu'un
d'autre ca me m'aiderai un p'tit peu



En plus de devoir tester si les checkboxes seront cochees ou non celon
les matieres enseignees, il faut maintenant que je les classe par
famille ! J'ai cree une table d'ailleurs a cet effet : family et j'ai
rajoute un champs dans les matieres : idfamily dans lequel il y a
justement l'idfamily de la famille a laquelle elle appartient. Comme
Biology fait parti des Sciences, French fait parti des langues, etc ....

Ensuite a l'ecran il me faudrait les faire apparaitre dans un tableau
de deux colonnes sur le nombres de lignes necessaires pour ranger tout
les familles et juste en dessous, les matieres qui y sont rattachees
avec checkboxes cochees ou non !



Depuis hier je m'arrache les cheveux dessus, un vrai truc de dingue...
0
murrigane
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

26 août 2005 à 14:51
Voila j'y suis arrivee ! Je me suis servie des JOIN, en fait je ne
connaissais pas du tout cette syntaxe c'est bien pratique en tout cas !


Sinon le reste j'ai adapte du fait que je ne suis pas arrivee a faire
fonctionner le debut de script que tu m'avais donne. J'ai fait pas mal
de changement et essayer avec d'autre variante... Mais non, au final
j'ai fait ceci qui fonctionne apparement correctement :



$sqls= "SELECT subject AS subject, subject.idsubject AS idsubject, teaching.idsubject AS teaching

FROM subject LEFT JOIN teaching ON subject.idsubject=teaching.idsubject";

$qs = mysql_query($sqls) or die(' '.$error.' : '.$sqls.'
'.mysql_error());

while ($subject = mysql_fetch_row($qs)){

echo $subject[0];

echo ' $value){

$sub = array($value);

if (!in_array($subject[2],$sub)){

print 'checked';}

else {print '';}

}

echo '>';

}

mysql_free_result ($qs);



Ce serai pas mal qu'ils integrent des balises de code sur le forum, ca ferait plus propre ....



Bon etape deux, j'integre les familles !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J_G
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
26 août 2005 à 15:17
Salut,



Bravo! Ca fait toujours du bien de passer un cap dans la construction d'une appli.

J'avais taper mon code à l'emporte pièce, assez tard, désolé qu'il t'ai posé quelques soucis...



Je viens de lire ton problème sur les familles, ça à l'air un peu plus
facile. que le problème précédant. Et n'oubli pas que si tu n'arrive
pas à tout faire avec une seule requète SQL, il est toujours possible
de décomposer et d'utiliser des boucles pour arriver au même resultat.



(C'est que je suis obligé de faire aujourd'hui, bicoze la SQL d'Access... c'est vraiment de la merde en boîte!!!!!!!!!!!!!!)



Bonne continuation.
0
murrigane
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

26 août 2005 à 15:46
Je crois que ce qui me pose le plus de probleme concernant l'appli en
question c'est qu'au depart ca devait etre un truc simple, mais
finalement je m'appercois que je suis en train de faire un portail !

Bon par contre je suis un peu furax, parce qu'apparement ils vont
refiler mon projet a une boite pour qu'il soit developpe a partir
d'access et VB , parce que je leur avait que j'etais pas sur de pouvoir avoir fini en septembre, hors j'ai bien progresser depuis juillet !

Bref, c'etait un petit apparte pour dire que je suis vraiment en colere
et que j'ai l'impression de perdre mon temps, parce qu'en plus faut que
je continus de bosser sur le projet malgre le fait que l'autre boite se
met a bosser sur la version VB. (Visual Basic)

Et je suis d'accord avec toi, Access c'est de la merde en boite !!!!



Bon pour mon soucis de famille je m'emmele les pinceaux comme c'est pas
permis ... J'ai fait un truc a la noix qui ne fonctionne absolument pas
:

Voila mon horreur sur laquelle je tourne en rond depuis ce matin !



$sqls= "SELECT subject AS subject, subject.idsubject AS idsubject,
teaching.idsubject AS teaching, family.idfamily AS idfamily,
family.family AS family

FROM subject,family LEFT JOIN teaching ON subject.idsubject=teaching.idsubject and subject.idfamily=family.idfamily";

$qs = mysql_query($sqls) or die(' '.$error.' : '.$sqls.'
'.mysql_error());

while ($subject = mysql_fetch_row($qs)){



$nb=$subject[4];

for($i=1;$i<$nb;$i++){

$familysub = mysql_fetch_assoc($qs);

$familysub= array();

$tablo[]=$familysub;

$nbcol=3;

$nb=count($tablo);

print '';

$family = &$tablo[$i][4];

$idfamily = &$tablo[$i]['idfamily'];

printf ('%1$s, ', $family,$idfamily );

if ( ( $i % $nbcol ) == 0 )

{ print
'----
';}

else {print '</center>
';}




}

echo $subject[0];

echo ' $value){

$sub = array($value);

if (!in_array($subject[2],$sub)){

print 'checked';}

else {print '';}

}

echo '>';

}





mysql_free_result ($qs);
0
murrigane
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

26 août 2005 à 15:48
Petite precision :



$family = &$tablo[$i][4];

$idfamily = &$tablo[$i]['idfamily'];



J'ai utilise deux variantes pour tester dans le print si cela s'affichait, mais aucune des deux ne fonctionne !!

Bah voila quoi
0
J_G
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
26 août 2005 à 16:09
oki,



pas le temps tout de suite, je verrai ça de chez moi avec mes zolis outils PHP!



PS: Y'a encore des types qui développent en VB ! Il faudrait abolir ce
genre de techno... J'ai le même soucis dans ma boîte : on utilise des
vielles techno propriétaires (Microsoft) dont les versions changent
régulièrement sans prévenir ni être compatible avec l'ancien. Du coup
t'as toujours un train de retard, t'es toujours en train de débugger
tes migrations. Pour une fois fini recommencer! De plus, les outils de
développement coûtent une fortune, donc personne n'a de licence légale.




Mais impossible de faire entendre raison ! Non, l'enfouissement dans la
pieuvre Microsoft. Les gens pensent encore qu'il faut installer une
Linux Debian ou ressortir les vieux goupils du placard pour faire du
C++, du Java, de la base de données, ... sans utiliser Visual C++, ou
je ne sais quelle autre usine à gaz.





Ouf... ça fait du bien



Bon je m'occupe de ton soucis dans qques heures.

A+
0
murrigane
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

26 août 2005 à 17:38
Ah tu vois toi aussi tu avais besoin de vider tout ca !! mdr

Une chose est sûre (ah j'ai retrouvé mon clavier Azerty je vais pouvoir mettre mes accents !), mon application en Php & Mysql, elle permet d'updater les tables de n'importe où, ce qui était un des voeux emis par le personnel du centre où je bosse ! De plus y a pas de problème de version non plus et elle devrait être flexible alors que son programme finalement j'en ai pas l'impression et ils leur prennent apparement la modique somme comprise entre 5000 et 7500 ? pour cet horreur !
Mais bon evidement les gens n'y connaissent rien alors, pour eux du moment que ca fonctionne... C'est bien là qu'ils sont ingrat mais bon le sujet pourrait durer des lustres !

En tout cas je te remercie de te pencher sur mes problèmes de boucles, c'est vraiment très gentil de ta part.
Je voulais signaler pour l'horreur un peu plus haut que je n'ais pas inclus la boucle du foreach() dans le for() parce que je voulais déjà verifier si justement la boucle for me renverrai les bonnes informations avec la structure de tableau. D'autre part je sais pas trop si foreach et for travaillent super bien ensemble ...

Voila pour les dernières petites précisions sur le sujet !
Et encore merci !
0
J_G
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
26 août 2005 à 18:51
re-salut, je suis re-là!



Dis ? Je me pose une ch'tite question :

Qu'est devenu le : WHERE teaching.ppsno='$mod' de ton premier bout de code ?



Pour te paraphraser :

Tu cherches à afficher un prof précis ($mod). A coté toutes les
matières disponibles, organisées par famille. Et parmis c'est matières,
reconnaitre celle qui sont enseignées par le-dit prof. C'est ça ???



ou



Tu cherche à afficher tous les profs. Puis pour chaque profs, la liste
des matières organisée par famille. Et parmis ces matières, savoir
lesquels sont enseignées par le prof auquelle elles font références... ?

Cherches-tu toujours à aff
0
murrigane
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

26 août 2005 à 19:18
Re !

Ah oui, le WHERE teaching.ppsno='$mod' Je l'ai completement zappé ! Je l'avais enlevé quand j'ai poursuivit mon histoire de boucle parce que j'avais une erreur de requete et du coup j'ai oublié de le remettre après .. Forcément j'en ai un p'tit peu besoin !
Sinon, ce code est destiné à être placé sur un formulaire de modification de fiche de prof, donc éffectivement ce que je cherche à faire c'est :
Affiché un prof précis et toute les matières qui peuvent être enseignées, classées par famille dans un tableau comme ceci


Famille langue
Francais
Anglais
Allemand
Et je voudrais que sur chaque matière il y ait des checkboxes et que soit cochées celle dont le prof enseigne les matières. Comme il risque d'il y avoir plusieurs famille ce que j'aimerai c'est pouvoir générer un tableau dont je defini le nombre de colonne : $nbcol=2 ou 3 peut importe c'est pour la gestion de la presentation

Voila ! :)
En bref, c'est ce que tu avais paraphrasé en premier
0
J_G
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
26 août 2005 à 19:32
Bon!

Et tu me payes combien ?
0
murrigane
Messages postés
88
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
19 mai 2006

27 août 2005 à 13:41
Thank you very much indeed !!

Je vais aller bosser sur ce que tu m'as proposé !

Encore merci pour ton coup de main
0