Mysql_fetch_array() expects parameter 1 to be resource

Fermé
sylvain83 Messages postés 62 Date d'inscription mardi 25 septembre 2012 Statut Membre Dernière intervention 30 avril 2014 - 25 sept. 2013 à 09:42
sylvain83 Messages postés 62 Date d'inscription mardi 25 septembre 2012 Statut Membre Dernière intervention 30 avril 2014 - 11 nov. 2013 à 11:46


Salut a tous,
voila j'ai pour projet de créer un formulaire qui récoltera des informations, pour les insérer dans une table pour ensuite les afficher dans un tableau...j'ai donc essayer de coder en PHP et voila ce que ca a donné :

<?php
// On commence par récupérer les champs
if(isset($_POST['Enseignant'])) $Enseignant=$_POST['Enseignant'];
else $Enseignant="";

if(isset($_POST['Salle'])) $Salle=$_POST['Salle'];
else $Salle="";

if(isset($_POST['Date'])) $Date=$_POST['Date'];
else $Date="";

if(isset($_POST['Horaire'])) $Horaire=$_POST['Horaire'];
else $Horaire="";

if(isset($_POST['Numero'])) $Numero=$_POST['Numero'];
else $Numero="";

if(isset($_POST['Titre'])) $Titre=$_POST['Titre'];
else $Titre="";

if(isset($_POST['Nouvelle'])) $Nouvelle=$_POST['Nouvelle'];
else $Nouvelle="";

if(isset($_POST['Remarque'])) $Remarque=$_POST['Remarque'];
else $Remarque="";

{
// connexion à la base
$db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());
// sélection de la base

mysql_select_db('phpmyadmin',$db) or die('Erreur de selection '.mysql_error());

// on écrit la requête sql
$sql = "INSERT INTO infos_tbl(id, Enseignant, Salle, Date, Horaire, Numero, Titre, Nouvelle, Remarque) VALUES('','$Enseignant','$Salle','$Date','$Horaire','$Numero','$Titre','$Nouvelle','$Remarque')";

// on insère les informations du formulaire dans la table
$result = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

// on affiche le résultat pour le visiteur
echo 'Vos infos on ete ajoutees.';

// on affiche les données saisies dans un tableau
echo"<table><tr><th>ID</th><th>Enseignant</th><th>Salle</th><th>Date</th><th>Horaire</th><th>Numero</th><th>Type</th><th>Titre</th><th>Nouvelle</th><th>Remarque</th></tr>" ;
while($row = mysql_fetch_array($result))
{
echo "<tr><td>".$row['Enseignant'] . "</td><td> ". $row['Salle'] . "</td><td> ". $row['Date'] . "</td><td> ". $row['Horaire'] . "</td><td> ". $row['Numero'] . "</td><td> ". $row['Type']. "</td><td> ". $row['Titre']. "</td><td> ". $row['Nouvelle']. "</td><td> ". $row['Remarque']. "</td><td></tr>";
}
echo "</table";

mysql_close();
// on ferme la connexion
}
?>


Le problème est que je recois a chaque fois le message d'erreur : "Vos infos on ete ajoutees.
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP-12.1\www\add.php on line 45
ID Enseignant Salle Date Horaire Numero Type Titre Nouvelle Remarque "

Auriez vous une idée ? Je recherche un peu partout sur le net et sur les forums , et étant un novice en PHP j avoue être un peu perdu...merci d avance pour votre aide !
A voir également:

69 réponses

Utilisateur anonyme
9 oct. 2013 à 10:53
Oui, c'est bien ça, du moins en ce qui concerne le traitement de la réception du formulaire.
0
sylvain83 Messages postés 62 Date d'inscription mardi 25 septembre 2012 Statut Membre Dernière intervention 30 avril 2014 1
9 oct. 2013 à 10:57
Dac, donc je laisse tout de même la partie "tableau" dans add.php
0
Utilisateur anonyme
9 oct. 2013 à 11:04
Tu la mets où tu veux.
Ce n'est pas une question de programmation, c'est une question de bon sens.
Tu ne peux pas garder un script qui te redirige vers un autre si un formulaire n'est pas rempli, et vouloir que ce script te serve de page d'accueil alors que par définition, le formulaire n'est pas rempli au départ.
Tu devrais peut-être essayer le code d'Alain_42 si tu ne vois pas ce que je veux dire.
0
sylvain83 Messages postés 62 Date d'inscription mardi 25 septembre 2012 Statut Membre Dernière intervention 30 avril 2014 1
9 oct. 2013 à 11:11
Entendu.
Merci ;)
0

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

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 oct. 2013 à 15:23
j'ai une solution à te proposer:
- une page acceuil.php sur laquelle on arrive qui va afficher le tableau avec l'existant, plus un bouton poiur faire un ajout
- ce bouton va lancer la page formulaire scdform.php qui va faire aussi le traitement, saisie incomplète et l'insertion,
-en fin d'insertion on redirige vers la page acceuil.php (avec un message informant l'utilisateur si insertion ok ou pas
- cette page va afficher à nouveau le tableau et la nouvelle ligne apparaitra aussi dedans

acceuil.php:
<?php
// connexion à la base
$db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());
// sélection de la base
mysql_select_db('phpmyadmin',$db) or die('Erreur de selection '.mysql_error());
// on selectionne les informations à afficher dans le tableau
$sql2 = 'SELECT * FROM infos_tbl';
$req = mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());
// on affiche le titre du tableau pour la page dernière minute
echo '<b>CHANGEMENT(S) DE "DERNIERE MINUTE" DE L HORAIRE DES COURS 2013-2014</b>';
// on va rajouter un bouton qui va ouvrir la page formulaire de saisie pour faire un ajout (tu peux modifier son libellé)
echo '<p>
<input type="button" name="ajouter" value="Nouvelle saisie" onclick="document.location.href=\"scdform.php\";" />
</p>';
///
//message eventuel insertion réussie ou pas
if(isset($_GET['insert'])){
switch($_GET['insert']){
case 'ok':
echo '<font-color="green">Vos Données ont été rajoutées dans la base.</font>';
break;
case 'nok':
'<font-color="red">Vos Données n\'ont pas pu être rajoutées dans la base, suite à un problème technique.</font>';
break;
}
}
//
// on affiche les données existantes dans un tableau
echo "<table border cellpadding=15>
<tr>
<th>Enseignant</th>
<th>Salle</th>
<th>Date</th>
<th>Horaire</th>
<th>Numero</th>
<th>Type</th>
<th>Titre</th>
<th>Nouvelle</th>
<th>Remarque</th>
</tr>" ;
while($row = mysql_fetch_array($req, MYSQL_ASSOC))
{
echo "<tr>
<td>".$row['Enseignant'] . "</td>
<td> ". $row['Salle'] . "</td>
<td> ". $row['Date'] . "</td>
<td> ". $row['Horaire'] . "</td>
<td> ". $row['Numero'] . "</td>
<td> ". $row['Type']. "</td>
<td> ". $row['Titre']. "</td>
<td> ". $row['Nouvelle']. "</td>
<td> ". $row['Remarque']. "</td>
</tr>";
}
echo "</table>";

?>


scdform.php:
<?php
//variables de travail
$affich_form=true;
$msg_erreur="";

//init des variables à leur valeur par défaut (affichage du label dans l'input)
$Enseignant="Enseignant";
$Salle="Salle";
$Date="Date";
$Horaire="Horaire";
$Numero="Numero";
$Type="Type";
$Titre="Titre";
$Nouvelle="Nouvelle";
$Remarque="Remarque";

///// traitement du formulaire ////
if(isset($_POST['envoyer'])){ //le formulaire a été envoyé
//verif des champs vides ou laissés avec la valeur par défaut "Enseignant" "salle" etc...
if(empty($_POST['Enseignant']) || $_POST['Enseignant']=="Enseignant" || empty($_POST['Salle']) || $_POST['Salle']=="Salle" || empty($_POST['Date']) || $_POST['Date']=="Date"
|| empty($_POST['Horaire']) || $_POST['Horaire']=="Horairet" || empty($_POST['Numero']) || $_POST['Numero']=="Numero" || empty($_POST['Type']) || $_POST['Type']=="Type"
|| empty($_POST['Titre']) || $_POST['Titre']=="Titre" || empty($_POST['Nouvelle']) || $_POST['Nouvelle']=="Nouvelle" || empty($_POST['Remarque']) || $_POST['Remarque']=="Remarque") {
$msg_erreur='<font-color="red">Vous devez remplir tous les champs !</font>';
}else{
//tous les champs sont remplis on peut insérer
// connexion à la base
$db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());
// sélection de la base
mysql_select_db('phpmyadmin',$db) or die('Erreur de selection '.mysql_error());
/////// IL FAUT TOUT D'ABORD RÉCUPÉRER LES VALEURS SAISIES DANS LE FORMULAIRE
$Enseignant=mysql_real_escape_string($_POST['Enseignant']);
$Salle=mysql_real_escape_string($_POST['Salle']);
$Date=mysql_real_escape_string($_POST['Date']);
$Horaire=mysql_real_escape_string($_POST['Horaire']);
$Numero=mysql_real_escape_string($_POST['Numero']);
$Type=mysql_real_escape_string($_POST['Type']);
$Titre=mysql_real_escape_string($_POST['Titre']);
$Nouvelle=mysql_real_escape_string($_POST['Nouvelle']);
$Remarque=mysql_real_escape_string($_POST['Remarque']);

// on crée la requête sql
$sql = "INSERT INTO infos_tbl(id, Enseignant, Salle, Date, Horaire, Numero, Type, Titre, Nouvelle, Remarque) VALUES('','$Enseignant','$Salle','$Date','$Horaire','$Numero', '$Type','$Titre','$Nouvelle','$Remarque')";
// on insère les informations du formulaire dans la table
$insert=mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
if($insert){
//l'insertion a réussi => on redirige vers la page acceuil.php avec message
header('Location:acceuil.php?insert=ok');
}else{
//l'insertion a échoué => on redirige vers la page acceuil.php avec message
header('Location:acceuil.php?insert=nok');
}
}
}

if($affich_form){
//on affiche le formulaire (premier affichage ou si erreur)
//ci dessous value="<?php ... permet de réafficher en cas d'erreur les valeurs précedement saisies
//action="" form appelle la même page
?>
<form method="POST" action="">
<center>
<h2>Saisir les dernières modifications de salle </h2>
<h5>("Veuillez remplir TOUS les champs")</h5>
<input type="text" name="Enseignant" size="20" value="<?php echo $Enseignant; ?>" onFocus="javascript:this.value=''" maxlength="25"><br />
<input type="text" name="Salle" size="20" value="<?php echo $Salle; ?>" onFocus="javascript:this.value=''" maxlength="5"><br />
<input type="text" name="Date" size="20" value="<?php echo $Date; ?>" onFocus="javascript:this.value=''" maxlength="10"><br />
<input type="text" name="Horaire" size="20" value="<?php echo $Horaire; ?>" onFocus="javascript:this.value=''" maxlength="7"><br />
<input type="text" name="Numero" size="20" value=<?php echo $Numero; ?>" onFocus="javascript:this.value=''" maxlength="10"><br />
<input type="text" name="Type" size="20" value="<?php echo $Type; ?>" onFocus="javascript:this.value=''" maxlength="15"><br />
<input type="text" name="Titre" size="20" value="<?php echo $Titre; ?>" onFocus="javascript:this.value=''" maxlength="70"><br />
<input type="text" name="Nouvelle" size="20" value="<?php echo $Nouvelle; ?>" onFocus="javascript:this.value=''" maxlength="10"><br />
<input type="text" name="Remarque" size="20" value="<?php echo $Remarque; ?>" onFocus="javascript:this.value=''" maxlength="70"><br />
<p>

<?php
//message d'erreur saisie eventuel
if($msg_erreur !=""){ echo '<p>'.$msg_erreur.'</p>'; }
?>
<input type="submit" name="envoyer" id="envoyer" value="Envoyer" /><br />
<input type="reset" value="Effacer" /><br />
</p>
</center>
</form>
<?php
} //fin if affich_form



0
sylvain83 Messages postés 62 Date d'inscription mardi 25 septembre 2012 Statut Membre Dernière intervention 30 avril 2014 1
15 oct. 2013 à 16:46
Merci Alain avec ce fichier et quelques modifications c'est parfait !
J'en profite ausi pour remercier le père qui m'a bien aidé ;)
Merci à tous !
0
sylvain83 Messages postés 62 Date d'inscription mardi 25 septembre 2012 Statut Membre Dernière intervention 30 avril 2014 1
4 nov. 2013 à 09:23
Salut tous le monde ! Le retour :) ....
En fait j ai voulu mettre mon code sur un serveur mais j'ai eu droit à quelques messages d erreur "critique : les données reçues ne sont pas vérifiées. Des injections
SQL sont possibles. Les données provenant de sources non sûres doivent
absolument être filtrées et vérifiées avant d'être utilisées."

Ce que je ne comprends pas c'est que les valeurs saisies sont echappées (mysql_escape_string) et le nombre de caractères saisissables est limité (maxlength) , que puis je faire d'autre ? Utiliser un FILTER_VALIDATE_INT); ?

Merci à tous par avance,

S.
0
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
5 nov. 2013 à 11:48
Salut,
PDO et ses requêtes préparés pour les injections SQL, au lieu des fonction mysql_*.
htmlentities() pour les failles XSS.
Les filtres, les expressions régulières, isset(), empty() ...etc pour l'intégrité des données.

En gros c'est ça.
0
sylvain83 Messages postés 62 Date d'inscription mardi 25 septembre 2012 Statut Membre Dernière intervention 30 avril 2014 1
5 nov. 2013 à 14:12
;) merci je vais regarder ca
0
sylvain83 Messages postés 62 Date d'inscription mardi 25 septembre 2012 Statut Membre Dernière intervention 30 avril 2014 1
5 nov. 2013 à 10:29
Ptit up !
0
sylvain83 Messages postés 62 Date d'inscription mardi 25 septembre 2012 Statut Membre Dernière intervention 30 avril 2014 1
11 nov. 2013 à 11:46
Voila quelques modifications apportées dans le but d'éviter les injections malheureusement je rencontre quelques problèmes :

<?php
//variables de travail
$affich_form=true;
$msg_erreur="";

//init des variables à leur valeur par défaut (affichage du label dans l'input)
$Enseignant="Enseignant";
$Salle="Salle";
$Date="Date";
$Horaire="Horaire";
$Numero="Numero";
$Type="Type";
$Titre="Titre";
$Nouvelle="Nouvelle";
$Remarque="Remarque";

///// traitement du formulaire ////
if(isset($_POST['envoyer'])){ //le formulaire a été envoyé
//verif des champs vides ou laissés avec la valeur par défaut "Enseignant" "salle" etc...
if(empty($_POST['Enseignant']) || $_POST['Enseignant']=="Enseignant" || empty($_POST['Salle']) || $_POST['Salle']=="Salle" || empty($_POST['Date']) || $_POST['Date']=="Date"
|| empty($_POST['Horaire']) || $_POST['Horaire']=="Horairet" || empty($_POST['Numero']) || $_POST['Numero']=="Numero" || empty($_POST['Type']) || $_POST['Type']=="Type"
|| empty($_POST['Titre']) || $_POST['Titre']=="Titre" || empty($_POST['Nouvelle']) || $_POST['Nouvelle']=="Nouvelle" || empty($_POST['Remarque']) || $_POST['Remarque']=="Remarque") {
$msg_erreur='<font-color="red">Vous devez remplir tous les champs !</font>';
}else{
//tous les champs sont remplis on peut insérer
// connexion à la base
$pdo = new PDO('mysql:host=localhost;dbname=phpmyadmin','root','');
//$db = mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());
// sélection de la base
//mysql_select_db('phpmyadmin',$db) or die('Erreur de selection '.mysql_error());
/////// IL FAUT TOUT D'ABORD RÉCUPÉRER LES VALEURS SAISIES DANS LE FORMULAIRE
$Enseignant=$pdo->quote($_POST['Enseignant']);
$Salle=$pdo->quote($_POST['Salle']);
$Date=$pdo->quote($_POST['Date']);
$Horaire=$pdo->quote($_POST['Horaire']);
$Numero=$pdo->quote($_POST['Numero']);
$Type=$pdo->quote($_POST['Type']);
$Titre=$pdo->quote($_POST['Titre']);
$Nouvelle=$pdo->quote($_POST['Nouvelle']);
$Remarque=$pdo->quote($_POST['Remarque']);
//$Enseignant=mysql_real_escape_string($_POST['Enseignant']);
//$Salle=mysql_real_escape_string($_POST['Salle']);
//$Date=mysql_real_escape_string($_POST['Date']);
//$Horaire=mysql_real_escape_string($_POST['Horaire']);
//$Numero=mysql_real_escape_string($_POST['Numero']);
//$Type=mysql_real_escape_string($_POST['Type']);
//$Titre=mysql_real_escape_string($_POST['Titre']);
//$Nouvelle=mysql_real_escape_string($_POST['Nouvelle']);
//$Remarque=mysql_real_escape_string($_POST['Remarque']);

// on crée la requête sql
//$sql = "INSERT INTO infos_tbl(id, Enseignant, Salle, Date, Horaire, Numero, Type, Titre, Nouvelle, Remarque) VALUES('','$Enseignant','$Salle','$Date','$Horaire','$Numero', '$Type','$Titre','$Nouvelle','$Remarque')";
$sql->exec ("INSERT INTO infos_tbl(id, Enseignant, Salle, Date, Horaire, Numero, Type, Titre, Nouvelle, Remarque) VALUES('','$Enseignant','$Salle','$Date','$Horaire','$Numero', '$Type','$Titre','$Nouvelle','$Remarque')");
// on insère les informations du formulaire dans la table
//$insert=mysql_query($sql) or die('Erreur SQL !'.$pdo.'<br>'.mysql_error());
if($sql){
//l'insertion a réussi => on redirige vers la page accueil.php avec message
header('Location:http://127.0.0.1/accueil.php?insert=ok');
}else{
//l'insertion a échoué => on redirige vers la page accueil.php avec message
header('Location:http://127.0.0.1/accueil.php?insert=nok');
}
}
}

if($affich_form){
//on affiche le formulaire (premier affichage ou si erreur)

?>
<form method="POST" action="">
<center>
<h2>Saisir les dernières modifications de salle </h2>
<h5>("Veuillez remplir TOUS les champs")</h5>
<input type="text" name="Enseignant" size="20" value="<?php echo $Enseignant; ?>" onFocus="javascript:this.value=''" maxlength="25"><br />
<input type="text" name="Salle" size="20" value="<?php echo $Salle; ?>" onFocus="javascript:this.value=''" maxlength="5"><br />
<input type="text" name="Date" size="20" value="<?php echo $Date; ?>" onFocus="javascript:this.value=''" maxlength="10"><br />
<input type="text" name="Horaire" size="20" value="<?php echo $Horaire; ?>" onFocus="javascript:this.value=''" maxlength="7"><br />
<input type="text" name="Numero" size="20" value=<?php echo $Numero; ?>" onFocus="javascript:this.value=''" maxlength="10"><br />
<input type="text" name="Type" size="20" value="<?php echo $Type; ?>" onFocus="javascript:this.value=''" maxlength="15"><br />
<input type="text" name="Titre" size="20" value="<?php echo $Titre; ?>" onFocus="javascript:this.value=''" maxlength="70"><br />
<input type="text" name="Nouvelle" size="20" value="<?php echo $Nouvelle; ?>" onFocus="javascript:this.value=''" maxlength="10"><br />
<input type="text" name="Remarque" size="20" value="<?php echo $Remarque; ?>" onFocus="javascript:this.value=''" maxlength="70"><br />
<p>

<?php
//message d'erreur saisie eventuel
if($msg_erreur !=""){ echo '<p>'.$msg_erreur.'</p>'; }
?>
<input type="submit" name="envoyer" id="envoyer" value="Envoyer" /><br />
<input type="reset" value="Effacer" /><br />
</p>
</center>
</form>
<?php
} //fin if affich_form

Mon message d'erreur :
Notice: Undefined variable: sql in C:\Program Files\EasyPHP-12.1\www\formsecure.php on line 53

Fatal error: Call to a member function exec() on a non-object in C:\Program Files\EasyPHP-12.1\www\formsecure.php on line 53

Je pense que ca vient de ma ligne 56 de test mais je ne suis pas sur, si vous pouviez m'aiguiller...merci d'avance

S
0