Je n'arrive pas à récupérer le textarea

Je n'arrive pas à récupérer le textarea - PHP - Programmation

Marsh Posté le 31-08-2008 à 18:20:49    

BOnjour !
 
Voilà, j'ai fais un formulaire qui comporte un textarea et j'aimerais renvoyer son contenu par mail.
 
Voilà le code :
 
index.php :

Code :
  1. <form method=POST action=mail.php >
  2. Votre message : <textarea COLS=50 ROWS=6 name=message></textarea>
  3. <input type=submit value=Envoyer>
  4. </form>


 
mail.php :

Code :
  1. mail("mail@example.com", "mail depuis le site", "Le mail envoyé depuis le site\nMessage : $message" );


 
 
Voilà mon code simplifié, le mail est envoyé mais le Message renvoi vide ("Message :     [?]       " ).
 
Ou est mon erreur ?
Merci à vous :)

Reply

Marsh Posté le 31-08-2008 à 18:20:49   

Reply

Marsh Posté le 31-08-2008 à 18:24:26    

Déjà fait du code HTML valide :

Code :
  1. <form action="mail.php" method="post">
  2.   <div>
  3.     <label for="mail_msg">Votre message</label><br>
  4.     <textarea id="mail_msg" name="message" cols="50" rows="6"></textarea>
  5.   </div>
  6.   <div>
  7.     <input type="submit" value="Envoyer">
  8.   </div>
  9. </form>


Ca pique moins les yeux.

 

Ensuite côté PHP, vaut mieux pas utiliser les fonctionnalités de register_globals en utilisant directement une variable correspondant au name du champ (sécurité, pas portable, etc.), mais plutôt via $_POST :

Code :
  1. mail('mail@example.com', 'Mail depuis le site',
  2.  'Le mail envoyé depuis le site' . "\n" . $_POST['message']);


Manque encore la gestion d'erreur si le message est vide :)


Message édité par FlorentG le 31-08-2008 à 18:24:54
Reply

Marsh Posté le 31-08-2008 à 19:37:29    

SUPER, ça marche ! Merci :)
Je l'ai mis en
$message=$_POST['message'];
 
et dans mail je met simplement $message.
ça marche aussi :)
 
Avant de créer le topic j'avais fais  
$message= htmlspecialchars($_POST['message']);
mais ça ne marchait pas....
 
Pour la gestion d'erreur, pour ceux que ça intéresse, je viens d'ajouté :
 

Code :
  1. <?php
  2. $message=$_POST[message];
  3. if ($message ==("" ))
  4. {
  5. echo "<script>alert('Merci de saisir un message.\\nThanks to type a text.\\n:)')</script>";
  6. echo "<script>history.back()</script></p>";
  7. }
  8. else
  9. {
  10. // traitement du formulaire ...
  11. // affiche merci blablabla
  12. }
  13. }
  14. ?>

Reply

Marsh Posté le 31-08-2008 à 22:12:04    

N'utilise pas de javascript pour les erreurs :) Déjà ça ne fonctionne pas si JS désactivé (ça arrive), et le message d'erreur ne restant pas, ça peut être du coup plus difficile pour corriger (si on se souvient pas de tout). Là ça va y'a un seul champ, mais pour un plus gros formulaire c'est pas cool [:sadnoir] Et rajoute au passage un texte en cas de succès :)
 
Une solution propre est de faire 2 fichiers séparés : un avec juste le formulaire, l'autre avec le traitement/validation.
 
Genre t'as un fichier formulaire.php :

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  3. <head>
  4.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.  <title></title>
  6. </head>
  7. <body>
  8.  <h1>Formulaire de contact</h1>
  9. <?php
  10. if($ok) {
  11. ?>
  12.  <p>
  13.   Le message a été envoyé avec succès, nous nous efforcerons d'y répondre
  14.   dans les plus brefs délais
  15.  </p>
  16. <?php
  17. } else {
  18. ?>
  19.  <form action="mail.php" method="post">
  20.   <div class="errors">
  21. <?php
  22.    foreach($errors as $error) {
  23. ?>
  24.    <p><?php echo $error; ?></p>
  25. <?php
  26.    }
  27. ?>
  28.   </div>
  29.   <div>
  30.    <label for="mail_msg">Votre message</label><br>
  31.    <textarea id="mail_msg" name="message" cols="50" rows="6"><?php echo htmlspecialchars($message) ?></textarea>
  32.   </div>
  33.   <div>
  34.    <input type="submit" value="Envoyer">
  35.   </div>
  36.  </form>
  37. <?php
  38. }
  39. ?>
  40. </body>
  41. </html>


 
Et à côté le mail.php qui fait le traitement :

Code :
  1. <?php
  2.  
  3. $errors  = array();
  4. $message = '';
  5. $ok      = false;
  6.  
  7. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  8.  
  9.    $message = $_POST['message'];
  10.  
  11.    if(strlen($message) === 0) {
  12.  
  13.        $errors[] = 'Merci de saisir un message<br />Thanks to type a text';
  14.  
  15.    } else {
  16.  
  17.        mail('mail@example.com', 'Mail depuis le site', $message);
  18.        $ok = true;
  19.    }
  20.  
  21. }
  22.  
  23. require 'form.php';


 
Et là c'est top :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed