[Résolu] probleme d'affichage

Vous avez un soucis de développement et ce n'est pas du ressort de notre support ? N'hésitez pas à soumettre vos petits soucis de développement et à vous entre aider par la même occasion.
Inconnu
Cet utilisateur a supprimé son compte et n’existe plus.
Messages : 6340
Inscription : 29 décembre 2010 à 18:15

Bonjour,

Je débute en php,
en fait je souhaite afficher la liste des eleves qui sont incrit dans la classe. A savoir que la classe sera saisi par l'utilisateur.
J'ai cette erreur et je ne comprend pas pourquoi :
Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in /home/httpd/r/a/u/raulincury-deust/raulincury-deust.franceserv.com/listeClasses.php on line 68

Voici mon code :

Code : Tout sélectionner

<?php 
    /* connection au serveur mysql */
    $connect = mysql_connect('sql.franceserv.com', 'XXXXX', 'XXXX') or die("Impossible de se connecter : " . mysql_error());
    /* connection ˆ la bdd */
    $db = mysql_select_db('raulincury-deust-db1', $connect);
    /* Si erreur connexion */
    if(!$db){ die ('Impossible d\'utiliser la base : ' . mysql_error());}
    /* dŽfinition de la requete */
    $sql = "SELECT *  FROM classes";
    /* stockage du rŽsultat */
    $result = mysql_query($sql);


    /*vérification si la valeur a été ajouté*/
    if(isset($_POST['id'])){
    /* requete on selctionne tous les valeurs de la table eleves quand la valeur saisie dans le formulaire est égale à classe*/
    $requete1= "SELECT * FROM `eleves` WHERE `classe`=".$_POST['id'];
    /*on récupère le résultat de la requete*/
    $resultat1=mysql_query($requete1);
    }
    
?>




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Collège</title>
</head>

<body>
<p><center><h1>Liste de toutes les classes</h1></center></p>

<table border="1">
<caption>Tableau des classes</caption>
<tr>
<th>Nom</th>
<th>Identifiant</th>
</tr>
<?php
    /* pour chaque classe on affiche la ligne de tableau qui lui correspond */
    while ( $ligne = mysql_fetch_array($result) ) { 
        echo "<TD> ".$ligne['nom']."</TD> 
 <TD> ".$ligne['id']."</TD> 
 </TR>";
    }
?>
</table>



<form action="listeClasses.php" method="post" name="liste des eleves">
<p>Indiquez l'id de la classe : <input name="id" type="text" size="10" /> <input name="Valider" type="submit" value="Valider" />
</form>


<table border="1">
<caption>Liste des &eacute;l&egrave;ves par classes</caption>
<tr>
<th>Nom</th>
<th>Pr&eacute;nom</th>
</tr>
<?php
/*j'affiche ma requete*/
echo $requete1;
/* ça devrait en principe afficher le resultat de ma requete*/
while ( $ligne1 = mysql_fetch_array($resultat1)){ 
echo $ligne1['nom'];}
?>
</table>
</body>
</html>


Merci de m'aider

Magali
Avatar de l’utilisateur
Elodie
Fondatrice / Responsable
Fondatrice / Responsable
Messages : 7942
Inscription : 2 avril 2010 à 20:14

Bonjour,

Vous pouvez afficher les messages d'erreurs (plus explicites) de MySQL en ajoutant un die() juste après le mysql_query() ainsi :
mysql_query($sql) OR die(mysql_error());
Ça vous évitera d’avoir des erreurs incompréhensibles au moment du mysql_fetch_array().
Vous avez une question ? Posez-la de préférence sur le forum et si ça demande un contact plus instantané, n'hésitez pas à vous rendre sur le t'chat IRC. Si votre question est personnelle, contactez-nous directement.
Inconnu
Cet utilisateur a supprimé son compte et n’existe plus.
Messages : 6340
Inscription : 29 décembre 2010 à 18:15

merci beaucoup
Inconnu
Cet utilisateur a supprimé son compte et n’existe plus.
Messages : 6340
Inscription : 29 décembre 2010 à 18:15

suite à ce OR die (mysql_error());
j'ai le même message qui apparait mais j'ai bien mon tableau qui effectue ma requete
donc je pense que mon erreur vient quand il n'y a pas de saisie de la part de l'utilisateur.




Merci de m'aider

Magali
Avatar de l’utilisateur
Elodie
Fondatrice / Responsable
Fondatrice / Responsable
Messages : 7942
Inscription : 2 avril 2010 à 20:14

La fonction isset() de PHP vérifie si la variable est définie et elle est toujours définie à NULL lorsqu'elle est vide et qu'elle est récupérée depuis un GET ou un POST.

Vous devriez utiliser la fonction !empty() à la place de isset(), par contre la valeur 0 est considérée comme empty, il faudrait combiner les deux ou retravailler la variable après son GET.

Un moyen de la retravailler avant :

if(empty($_POST['id']))
{
$_POST['id']=0;
}

Mais attention ! Actuellement votre requête est très dangereuse : si on entre dans le formulaire un bout de requête SQL que l'on nomme "injection SQL", n'importe qui peut faire ce qu'il souhaites sur votre base comme l'effacer.

Il vous faut alors utiliser la fonction mysql_real_escape_string() pour échapper la ponctuation MySQL et éviter qu'une injection se fasse.

Le mieux est de vérifier également que la valeur saisie est bien un nombre.
Vous avez une question ? Posez-la de préférence sur le forum et si ça demande un contact plus instantané, n'hésitez pas à vous rendre sur le t'chat IRC. Si votre question est personnelle, contactez-nous directement.
Inconnu
Cet utilisateur a supprimé son compte et n’existe plus.
Messages : 6340
Inscription : 29 décembre 2010 à 18:15

Merci beaucoup pour vos réponses qui m'ont beaucoup aidé.

Bonne soirée

Magali
Répondre