Mysql_fetch_array en tableau

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

  • Votes
  • Date
  • Date décroissante
  1. 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 !
    1. merci pour tous ces informations, mais j'ai pas pu résoudre le pb
    2. 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 ?
    3. rien n'est affiché (page vide) sachant que le 1ier tableau 'eleve' contient 3 valeurs et le 2ieme tableau contient une seule valeur!
    4. je t'ai donné une solution a ton premier post

      et coeus, il n'y a pas de point de virgule dans les requete
    5. @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.
  2. 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