Mysql_fetch_array en tableau

amine_marc Messages postés 286 Statut Membre -  
coeus Messages postés 3296 Statut Membre -
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

  1. coeus Messages postés 3296 Statut Membre 120
     
    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
    1. amine_marc Messages postés 286 Statut Membre 2
       
      merci pour tous ces informations, mais j'ai pas pu résoudre le pb
      0
    2. coeus Messages postés 3296 Statut Membre 120
       
      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
    3. amine_marc Messages postés 286 Statut Membre 2
       
      rien n'est affiché (page vide) sachant que le 1ier tableau 'eleve' contient 3 valeurs et le 2ieme tableau contient une seule valeur!
      0
    4. maka54 Messages postés 721 Statut Membre 80
       
      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
    5. coeus Messages postés 3296 Statut Membre 120
       
      @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
  2. maka54 Messages postés 721 Statut Membre 80
     
    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