Mysql_fetch_array() expects parameter 1 to be resource
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 !
69 réponses
Résumé de la discussion
Problème : un formulaire PHP doit collecter des informations, les insérer dans une table MySQL et les afficher, mais l’insertion et l’affichage échouent. Des erreurs récurrentes incluent Warning: mysql_fetch_array() expects parameter 1 to be resource et 'Champ inconnu', indiquant une insertion ratée ou des noms de colonnes incorrects. Pour remédier, plusieurs réponses recommandent strlen plutôt que empty et la vérification d’un champ existant, ainsi que de tester que les données saisies sont raisonnables. En pratique, il est conseillé de séparer le traitement du formulaire dans un fichier PHP dédié, d’utiliser MySQLi ou PDO et d’afficher le tableau via une requête SELECT adaptée.
-
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 -
Ptit up !
-
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. -
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 ! -
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 -
Entendu.
Merci ;) -
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. -
Dac, donc je laisse tout de même la partie "tableau" dans add.php
-
Oui, c'est bien ça, du moins en ce qui concerne le traitement de la réception du formulaire.
-
D'accord, du coup je dois reprendre le code de add.php , l insérer dans scdform.html puis le renommer en scdform.php...c est bien ca ?
-
C'est ça le fonctionnement que tu désires ?
Mais quand tu rentres dans add.php, tu commences par tester si le formulaire est rempli ou non. Comme il n'est pas rempli, tu rediriges vers le formulaire. Donc c'est parfaitement normal que tu sois redirigé systématiquement.
En fait, tu devrais traiter la réception du formulaire dans scdform.html (donc le rebaptiser en .php) et ne rediriger vers add.php (dont le nom ne veut plus rien dire mais pas grave) si tout va bien. -
Merci Alain ! Je vais néanmoins essayer de continuer avec mon fichier, mais merci beaucoup pour ton aide tout de même ;)
Le père , j ai essayé de mettre mes 2 fichiers sur cjoint.com mais il me dit qu il ne prend pas en charge ce genre de fichier :
Voila mes 2 fichiers si tu veux toujours jeter un coup d oeil :
add.php :
<?php
print_r ($_POST);
// On commence par récupérer les champs
if(isset($_POST['Enseignant'])) $Enseignant=trim($_POST['Enseignant']);
else $Enseignant="";
if(isset($_POST['Salle'])) $Salle=trim($_POST['Salle']);
else $Salle="";
if(isset($_POST['Date'])) $Date=trim($_POST['Date']);
else $Date="";
if(isset($_POST['Horaire'])) $Horaire=trim($_POST['Horaire']);
else $Horaire="";
if(isset($_POST['Numero'])) $Numero=trim($_POST['Numero']);
else $Numero="";
if(isset($_POST['Type'])) $Type=trim($_POST['Type']);
else $Type="";
if(isset($_POST['Titre'])) $Titre=trim($_POST['Titre']);
else $Titre="";
if(isset($_POST['Nouvelle'])) $Nouvelle=trim($_POST['Nouvelle']);
else $Nouvelle="";
if(isset($_POST['Remarque'])) $Remarque=trim($_POST['Remarque']);
else $Remarque="";
// Tous les champs doivent être remplis
if(empty($_POST['Enseignant']) || empty($_POST['Salle']) || empty($_POST['Date'])|| empty($_POST['Horaire'])|| empty($_POST['Numero']) || empty($_POST['Type']) || empty($_POST['Titre']) || empty($_POST['Nouvelle']) || empty($_POST['Remarque'])) {
print_r ($_POST);exit;}
{
// 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 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 selectionne les informations à afficher dans le tableau
$result = 'SELECT * FROM infos_tbl';
// on insère les informations du formulaire dans la table
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
// on envoie la seconde requete
$req = mysql_query($result) or die('Erreur SQL !'.$req.'<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>';
echo '<p></p>';
echo 'Pour ajouter une modification de derniere minute cliquez <a href="http://127.0.0.1/login.html">ici</a>';
echo '<p></p>';
// on affiche les données saisies 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>";
mysql_close();
// on ferme la connexion
}
?>
scdform.html :
<html>
<form method="POST" action="add.php">
<center>
<h2>Saisir les dernieres modifications de salle </h2>
<h5>("Veuillez remplir TOUS les champs")</h5>
<input type="text" name="Enseignant" size="20" value="Enseignant" onFocus="javascript:this.value=''" maxlength="25"><br>
<input type="text" name="Salle" size="20" value="Salle" onFocus="javascript:this.value=''" maxlength="5"><br>
<input type="text" name="Date" size="20" value="Date" onFocus="javascript:this.value=''" maxlength="10"><br>
<input type="text" name="Horaire" size="20" value="Horaire" onFocus="javascript:this.value=''" maxlength="7"><br>
<input type="text" name="Numero" size="20" value="Numero" onFocus="javascript:this.value=''" maxlength="10"><br>
<input type="text" name="Type" size="20" value="Type" onFocus="javascript:this.value=''" maxlength="15"><br>
<input type="text" name="Titre" size="20" value="Titre" onFocus="javascript:this.value=''" maxlength="70"><br>
<input type="text" name="Nouvelle" size="20" value="Nouvelle" onFocus="javascript:this.value=''" maxlength="10"><br>
<input type="text" name="Remarque" size="20" value="Remarque" onFocus="javascript:this.value=''" maxlength="70"><br>
<p>
<input type="submit" value="Envoyer" name="envoyer"><br>
<input type="reset" value="Effacer" /><br>
</p>
</center>
</form>
</html>
Ce que je veux :
La page add.php soit en quelque sorte ma page d accueil : l utilisateur arrive sur le tableau et cliques sur le lien " ici " pour ajouter des informations , l utilisateur et donc redirigé vers ma page de login , et une fois authentifié il arrive sur scdform.html pour saisir.... -
c'est moi qui revient si tu veux esayer mon code:
il suffit de supprimer cette partie puisque de toute façon la connexion mysql est fermée auto à la fin du script:
// on ferme la connexion si besoin
if($db) { mysql_close($db); }
de plus je viens de me rendre compte que les valeurs postées ne sont pas récupérées
<?php
//variables de travail
$affich_form=true;
$affich_tableau=false;
$msg_erreur="";
$msg_ok="";
//init des variables à vide
$Enseignant="";
$Salle="";
$Date="";
$Horaire="";
$Numero="";
$Type="";
$Titre="";
$Nouvelle="";
$Remarque="";
///// traitement du formulaire ////
if(isset($_POST['envoyer'])){ //le formulaire a été envoyé
//verif des champs vides
if(empty($_POST['Enseignant']) || empty($_POST['Salle']) || empty($_POST['Date'])|| empty($_POST['Horaire'])|| empty($_POST['Numero']) || empty($_POST['Type']) || empty($_POST['Titre']) || empty($_POST['Nouvelle']) || empty($_POST['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 les récupérer
$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 => message
$msg_ok='<font-color="green">Vos Données ont été rajoutées dans la base.</font>';
$affich_form=false; // on ne réaffiche plus le formulaire
$affich_tableau=true; // on affiche le tableau
}else{
$msg_ok='<font-color="red">Vos Données n\'ont pas pu être rajoutées dans la base, suite à un problème technique.</font>';
}
}
}
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 name="form1" method="post" action="scdform.php" >
<input type="text" name="Enseignant" id="Enseignant" value="<?php echo $Enseignant; ?>" /><br />
<input type="text" name="Salle" id="Salle" value="<?php echo $Salle; ?>" /><br />
<input type="text" name="Date" id="Date" value="<?php echo $Date; ?>" /><br />
<input type="text" name="Horaire" id="Horaire" value="<?php echo $Horaire; ?>" /><br />
<input type="text" name="Numero" id="Numero" value="<?php echo $Numero; ?>" /><br />
<input type="text" name="Type" id="Type" value="<?php echo $Type; ?>" /><br />
<input type="text" name="Titre" id="Titre" value="<?php echo $Titre; ?>" /><br />
<input type="text" name="Nouvelle" id="Nouvelle" value="<?php echo $Nouvelle; ?>" /><br />
<input type="text" name="Remarque" id="Remarque" value="<?php echo $Remarque; ?>" /><br />
<?php
//message d'erreur eventuel
if($msg_erreur !=""){ echo '<p>'.$msg_erreur.'</p>'; }
?>
<input type="submit" name="envoyer" id="envoyer" value="Envoyer" /><br />
</form>
<?php
} //fin if affich_form
// message insertion
if($msg_ok != ""){ echo '<p>'.$msg_ok.'</p>';}
if($affich_tableau){
//les données ont été rajoutées correctement on peut afficher le tableau
// on selectionne les informations à afficher dans le tableau
$sql2 = 'SELECT * FROM infos_tbl';
// on envoie la seconde requete
$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>';
echo '<p></p>';
// on affiche les données saisies 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>";
} //fin if affich tableau
?> -
Peux-tu déposer le code de tes deux fichiers (formulaire et son traitement) sur cjoint.com après avoir caché tes identifiants, bien sûr ?
-
Et pourtant :(
-
Donc, ça n'a pas affiché le deuxième print_r($_POST), ce qui veut dire que tu n'es pas entré dans le if (empty etc...
Mais pourtant, si tu remets(comme avant) le header à la place de ce second print_r, tu es redirigé ? J'ai beaucoup, beaucoup de mal à y croire. -
Autant pour moi , j ai donc refait la même manip et voila ce que ca affiche
Array ( [Enseignant] => Enseignant [Salle] => Salle [Date] => Date [Horaire] => Horaire [Numero] => Numero [Type] => Type [Titre] => Titre [Nouvelle] => Nouvelle [Remarque] => Remarque [envoyer] => Envoyer ) -
Dans ton message #54, il y avait bien des valeurs dans tes variables $_POST. Elles ont disparu dès le premier print_r($_POST) dans ton message #56 : ce n'est pas possible, tu ne fais pas la même manip dans les deux cas. Dans ton message #56, tu n'avais rien mis dans le formulaire.
-
C est bien ca, nous sommes bien d accord ;)
Voila ce que ca affiche après ajout d un autre print-r($_POST)
Array ( [Enseignant] => [Salle] => [Date] => [Horaire] => [Numero] => [Type] => [Titre] => [Nouvelle] => [Remarque] => [envoyer] => Envoyer ) Array ( [Enseignant] => [Salle] => [Date] => [Horaire] => [Numero] => [Type] => [Titre] => [Nouvelle] => [Remarque] => [envoyer] => Envoyer ) -
Et tu dis bien qu'avec ces valeurs-là pour $_POST, si tu laisses ton test avec tes "empty", ça te redirige vers scdform.html ? On est bien d'accord ? Parce que je commence à avoir du mal à comprendre ce qui peut se passer.
Si c'est bien ça, ajoute un autre print_r($_POST); à la place de "headear("Location...) Pour voir s'il n'aurait pas changé entre temps (???)
- 1
- 2
- 3
- 4
Suivant