Mysql_fetch_array en tableau

Fermé
amine_marc Messages postés 256 Date d'inscription dimanche 21 février 2010 Statut Membre Dernière intervention 11 avril 2016 - 3 mai 2011 à 17:24
coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 - 5 mai 2011 à 16:44
Bonjour,
je veux comparer deux entités (tableaux) dans une bdd mysql, et exactement je cherche si un élément précis (code_elv) du premier tableau s'il existe dans le deuxième tableau sachant que les tailles des deux tableaux sont différentes;
j'ai un script (ci-dessous) qui ne se fonctionne pas comme il faut:

<?php
$rq101=mysql_query("SELECT code_elv FROM absenter WHERE code_seance='$code_seance'");
$rq110=mysql_query("SELECT code_elv FROM eleve WHERE nom_annee='$annee_scl'");
while($donnees110=mysql_fetch_array($rq110))
{
while($donnees101=mysql_fetch_array($rq101)){
if($donnees101['code_elv']!=$donnees110['code_elv'])
$ab="present<br>";
else
$ab="<i>Absent</i><br>";
echo $ab;
}
}
?>

veuillez me dire où est le pb exactement?! et merci d'avance.

2 réponses

coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
3 mai 2011 à 19:37
Salut !

Pour commencer, je te conseille fortement de mettre des acolades à tes if :
if($donnees101['code_elv'] != $donnees110['code_elv']) {
   $ab="present<br>";
} else {
   $ab="<i>Absent</i><br>";
}
echo $ab; 


As-tu essayé tes requêtes SQL séparément dans MySQL ? Peut-être que ce sont elles qui ne cherchent pas les bonnes choses...

Aussi, pour éclairer ton code, je te conseille "d'isoler" tes variables du string de tes requêtes :
$rq101 = mysql_query("SELECT code_elv FROM absenter WHERE code_seance = '" . $code_seance . "';");
et
$rq110 = mysql_query("SELECT code_elv FROM eleve WHERE nom_annee = '" . $annee_scl . "';"); 


Essaie aussi de mettre une variable de référence de connexion active à la BDD comme deuxième argument dans tes mysql_query(). Peut-être qu'au moment où tu appelles la query, la connexion est déjà éteinte pour une raison quelconque...

Dis-moi si ça t'aide !
0
amine_marc Messages postés 256 Date d'inscription dimanche 21 février 2010 Statut Membre Dernière intervention 11 avril 2016 2
4 mai 2011 à 01:39
merci pour tous ces informations, mais j'ai pas pu résoudre le pb
0
coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
4 mai 2011 à 14:45
Peux-tu me dire ce qu'il fait exactement ?
Et quand tu testes uniquement une requête SQL avec des valeurs dummies dans MySQL, ça fait quoi exactement ?
0
amine_marc Messages postés 256 Date d'inscription dimanche 21 février 2010 Statut Membre Dernière intervention 11 avril 2016 2
4 mai 2011 à 18:12
rien n'est affiché (page vide) sachant que le 1ier tableau 'eleve' contient 3 valeurs et le 2ieme tableau contient une seule valeur!
0
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
5 mai 2011 à 12:43
je t'ai donné une solution a ton premier post

et coeus, il n'y a pas de point de virgule dans les requete
0
coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
5 mai 2011 à 16:44
@maka54 : faux, ce n'est pas obligatoire, mais recommandé d'en mettre. Une des méthodes les plus faciles d'injecter du code dans une requête SQL est de tirer profit de l'absence d'un point-virgule pour clore la requête.
0
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
4 mai 2011 à 16:13
c'est complètement faux ce que tu fais.

en une requete :
SELECT absenter.code_elv 
FROM absenter INNER JOIN eleve ON absenter.code_elv = eleve.code_elv 
WHERE absenter.code_seance='$code_seance' AND eleve.nom_annee='$annee_scl'


çà te sort la liste des code elv présent dans tes deux tables directement, donc seulement les absents
0