Methode POST

Petit nouveau ! | 5 Messages

20 avr. 2010, 18:29

Bonjour je commence le php et j'ai un problème avec la méthode post.
Je ne comprends pas pourquoi mon code ne marche pas, j'espère que vous pourrez m'éclairer.

Merci!

Code : Tout sélectionner

<html><body> <form method=POST action="message_fichier.php"> Nom : <input type="text" name="Nom" ><br> Prenom : <input type="text" name="Prenom"><br> Message : <textarea name="message" rows="4" cols="25"> Votre message ici. </textarea><br> <input type="submit" name="ecriture" value="Ecrire"> <input type="submit" name="lecture" value="Lire"> <body> <?php $Nom=$_POST['Nom']; $Prenom=$_POST['Prenom']; $Message=$_POST['message']; $date =date("d-m-Y"); $heure =date("H:i"); $Fichier = fopen('C:\Program Files\EasyPHP-5.3.2\test.txt',"a"); if (isset($_REQUEST['ecriture'])) { if (($Nom=="")||($Prenom=="")||($Message=="")){ if($nom=="") { echo "Veuillez saisir le nom de l'utilisateur<BR>\n"; } if($prenom=="") { echo"Veuillez saisir le prénom de l'utilisateur<BR>\n"; } if($Message==""){ echo "Veuillez saisir le message<BR>\n"; } } fwrite($Fichier, "\n"); fwrite($Fichier,"$Nom|$Prenom|$Message|$date|$heure"); // on écrit les donnees fclose($Fichier); } ?> </body> </form></body></html>
Il apparait que :

Notice: Undefined index: Nom in C:\Program Files\EasyPHP-5.3.2\www\PHP ES\message_fichier.php on line 14

Notice: Undefined index: Prenom in C:\Program Files\EasyPHP-5.3.2\www\PHP ES\message_fichier.php on line 15

Notice: Undefined index: message in C:\Program Files\EasyPHP-5.3.2\www\PHP ES\message_fichier.php on line 16

Tout mes autres programmes fonctionnent et là je ne vois vraiment pas.... :|
Merci d'avance!
Il existe deux types de personne: Les Gardois et ceux qui rêvent de l'être!

ViPHP
ViPHP | 5462 Messages

20 avr. 2010, 18:36

parce que POST['Nom'] n'existe pas
$Nom = isset($_POST['Nom']) ? $_POST['Nom'] : ''; 

ViPHP
AB
ViPHP | 5818 Messages

20 avr. 2010, 19:04

Comme l'a dit stealth35 ces variables n'existent pas tant que tu n'as pas envoyé le formulaire.

Au passage le if (isset($_REQUEST['ecriture'])) c'est vraiment le moins sécurisé et le moins fiable que l'on puisse faire.
Pourquoi pas if (isset($_POST['ecriture'])) ?

Petit nouveau ! | 5 Messages

20 avr. 2010, 19:40

Oui en effet, ce serait mieux.
Mais comment faire pour que cela soit bon?
Dois-je les déclarer autre part?
Il existe deux types de personne: Les Gardois et ceux qui rêvent de l'être!

ViPHP
AB
ViPHP | 5818 Messages

20 avr. 2010, 20:41

En reprenant ton code, un exemple mieux structuré :
<?php                               

if (isset($_POST['ecriture'])) 
{

$Nom=$_POST['Nom'];
$Prenom=$_POST['Prenom'];
$Message=$_POST['message'];
$date =date("d-m-Y");
$heure =date("H:i");

$alerte = null;

if (($Nom=="")||($Prenom=="")||($Message==""))
  {
      if($nom=="") 
     {
     $alerte .= "Veuillez saisir le nom de l'utilisateur<br />";
     }
     
    if($prenom=="") 
    {
     $alerte .= "Veuillez saisir le prénom de l'utilisateur<br />";
     }

     if($Message=="")
     {
     $alerte .= "Veuillez saisir le message<br />";
      }
  }
else
 {
    $Fichier = fopen('C:\Program Files\EasyPHP-5.3.2\test.txt',"a");
    fwrite($Fichier, "\n");
    fwrite($Fichier,"$Nom|$Prenom|$Message|$date|$heure"); // on écrit les donnees
    fclose($Fichier);
  }
}

?>
<html>
<body>   

<form method="post" action="#">
Nom :     <input type="text" name="Nom" ><br>
Prenom  : <input type="text" name="Prenom"><br> 
Message : <textarea name="message" rows="4" cols="25">
Votre message ici.
</textarea><br>
<input type="submit" name="ecriture" value="Ecrire">
<input type="submit" name="lecture" value="Lire">
</form>

<?php if (isset($alerte)) echo '<div>'.$alerte.'</div>';?>
</body>
</html>

Petit nouveau ! | 5 Messages

20 avr. 2010, 23:20

Merci bien, je comprends mieux à présent. :P
Il existe deux types de personne: Les Gardois et ceux qui rêvent de l'être!

Eléphant du PHP | 428 Messages

20 avr. 2010, 23:26

En reprenant ton code, un exemple mieux structuré :
<?php                               

if (isset($_POST['ecriture'])) 
{

$Nom=$_POST['Nom'];
$Prenom=$_POST['Prenom'];
$Message=$_POST['message'];
$date =date("d-m-Y");
$heure =date("H:i");

$alerte = null;

if (($Nom=="")||($Prenom=="")||($Message==""))
  {
      if($nom=="") 
     {
     $alerte .= "Veuillez saisir le nom de l'utilisateur<br />";
     }
     
    if($prenom=="") 
    {
     $alerte .= "Veuillez saisir le prénom de l'utilisateur<br />";
     }

     if($Message=="")
     {
     $alerte .= "Veuillez saisir le message<br />";
      }
  }
else
 {
    $Fichier = fopen('C:\Program Files\EasyPHP-5.3.2\test.txt',"a");
    fwrite($Fichier, "\n");
    fwrite($Fichier,"$Nom|$Prenom|$Message|$date|$heure"); // on écrit les donnees
    fclose($Fichier);
  }
}

?>
<html>
<body>   

<form method="post" action="#">
Nom :     <input type="text" name="Nom" ><br>
Prenom  : <input type="text" name="Prenom"><br> 
Message : <textarea name="message" rows="4" cols="25">
Votre message ici.
</textarea><br>
<input type="submit" name="ecriture" value="Ecrire">
<input type="submit" name="lecture" value="Lire">
</form>

<?php if (isset($alerte)) echo '<div>'.$alerte.'</div>';?>
</body>
</html>

Salut AB, pourquoi n'utilises tu pas empty et/ou isset pour tester les variables ?
Ex.: if($Message=="") { ==> if (empty ($Message)) {

A+

ViPHP
AB
ViPHP | 5818 Messages

21 avr. 2010, 00:20


Salut AB, pourquoi n'utilises tu pas empty et/ou isset pour tester les variables ?
Ex.: if($Message=="") { ==> if (empty ($Message)) {

A+
Parce que j'ai repris le maximum du code initial, c'est à dire j'ai voulu faire le moins de modifs possible pour qu'il soit fonctionnel mais en organisant mieux la structure. Ainsi SpeedHunter qui débute en php voit mieux la progression.

Mais effectivement on pourrait faire un peu mieux en faisant
//...
$Nom=trim($_POST['Nom']);
$Prenom=trim($_POST['Prenom']);
$Message=trim($_POST['message']);
//...
if(empty ($Message) || empty ($Prenom) || empty ($Nom)) { 
Et aussi plutôt que fopen fwrite fclose, avec php5 on peut faire Exemple 2 du manuel
$file = 'people.txt';
// Une nouvelle personne à ajouter
$person = "Jean Dupoond\n";
// Ajoute le contenu de la variable $person au fichier designé par la variable $file.
file_put_contents($file, $person, FILE_APPEND);