2009-12-13 7 views
2

Essayer de créer mon propre formulaire de contact avec php. Y a-t-il une façon meilleure/plus propre d'aborder cela?php formulaire de contact code propre

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1 /DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<title>Contact Form Practice</title> 


</head> 

<body> 


<form method="POST" action="mailer.php"> 
Name: 
<br> 
<input type="text" name="name" size="19"><br> 
<br> 
Your Email Adress: 
<br> 
<input type="text" name="email" size="19"><br> 
<br> 
Message: 
<br> 
<textarea rows="9" name="message" cols="30"></textarea> 
<br> 
<br> 
<input type="submit" value="Submit" name="submit"> 
</form> 



</body> 
</html> 

php --------------- ----------------

<?php 
if(isset($_POST['submit'])) { 

$to = "[email protected]"; 
$subject = "Contact"; 
$name_field = $_POST['name']; 
$email_field = $_POST['email']; 
$message = $_POST['message']; 

$body = "From: $name_field\n E-Mail: $email_field\n Message:\n $message"; 

echo "Data has been submitted to $to!"; 
mail($to, $subject, $body); 

} else { 

echo "4! OH! 4!"; 

} 
?> 
+2

L'écho de l'adresse de messagerie du destinataire annule plus ou moins le but du formulaire de contact, n'est-ce pas? –

+0

hahaha vrai dat vrai dat – Davey

Répondre

6

Le code semble correct , mais je recommande fortement d'ajouter une validation de données. Vous devez vous assurer que tous les champs obligatoires sont remplis avec des informations valides. Veillez également à encoder/décaper tout code HTML, JS, etc pour des raisons de sécurité/lisibilité.

Enfin, vous devriez également envisager d'utiliser CAPTCHA pour se prémunir contre le spam. J'ai un ancien site exécutant un code similaire à celui-ci et utilisé pour recevoir plus de 500 spams par jour!

+0

Peut-être que vous pouvez mentionner quelques en-têtes pour votre e-mail –

3

C'est à peu près tout, peut-être en cas de réussite, vous pouvez faire un header() rediriger vers une page de confirmation, mais dans la mesure où le traitement de la forme ce que vous avez est assez standard.

En outre, vous souhaitez nettoyer vos données comme pratique standard d'acceptation de toute saisie utilisateur.

Vous pourriez envisager de mettre en œuvre un CAPTCHA pour empêcher les bots de marteler votre formulaire.

PHP Captcha

+0

Bonne idée, merci pour le lien! – Davey

3

Une chose que vous voulez vraiment faire est de rendre les données un peu plus sûr d'envoyer l'e-mail. Je voudrais au moins exécuter les htmlentities et strip_tags sur les données d'entrée, mais vous devriez certainement regarder pour faire plus de validation.

également au lieu de isset ($ _ POST [ « SOUMETTRE »]) Je peut-être faire quelque chose comme ...

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    // body code here 
} 
+0

Est-ce que c'est pour le rendre plus lisible? Ou y a-t-il un autre avantage? Juste curieux. – Kevin

+0

Je trouve qu'il est préférable de le faire de cette façon parce que vous n'avez pas besoin de compter sur PHP en connaissant le nom de votre bouton d'envoi. C'est plus d'une préférence personnelle je suppose. J'ai également travaillé avec des développeurs qui ne mettent pas de noms sur les boutons de soumission. –

3

Je recommande vivement à la recherche aurait quelques informations à propos de PHP mail() et détournement d'avion en vous assurant de ne va pas laisser votre script vulnérable à une telle attaque. Aussi ce que tout le monde a suggéré est très bon à faire aussi bien.

1

Dans la question, vous aviez 2 fichiers distincts traitant le formulaire. Le problème est que si vous obtenez une erreur de validation, vous n'avez que peu de choix, mais le terrible "S'il vous plaît cliquez sur le bouton" solution. Considérons ce modèle de fichier PHP qui va gérer tout sur une page, prévoir la validation des données, les erreurs, re-soumission, et l'ensemble des 9 verges.

<?php 

// Read input variables from _POST 
$FormAction = (isset($_POST['FormAction']) ? $_POST['FormAction'] : ''); 
$FirstName = trim(isset($_POST['FirstName']) ? $_POST['FirstName'] : ''); 
... 

// Define script variables 
$Errors = array(); 

// Process input if data was posted. 
switch($FormAction) 
{ 
    case 'Process': 
     // validation code 

     if(empty($FirstName) or strlen($FirstName) > 20) 
      $Errors[] = "First name is required."; 

     ... 

     if(count($Errors) > 0) 
     break; 

     // Here we have valid data.. Do whatever... 


     // Now, redirect somewhere. 
     header('Location: http://www.next.com/whatever'); 
     exit; 

} 

?> 
<html> 
    <body> 
     <?php if(count($Errors)) { ?> 
      <div class="Error"> 
       <?php foreach($Error as $Error) { ?> 
        <div><?php echo htmlspecialchars($Error); ?></div> 
       <?php } ?> 
      </div> 
     <?php } ?> 

     <form method="POST" action="<?php echo htmlspecialchars($_SERVER['REQUES_URI'], ENT_QUOTES); ?>" /> 
      <input type="hidden" name="FormAction" value="Process" /> 

      First Name: 
      <input type="text" name="FirstName" value="<?php echo htmlspecialchars($FirstName, ENT_QUOTES); ?>" /> 

      ... 

      <input type="submit" /> 
     </form> 

    </body> 
</html> 
Questions connexes