php iletişim formu temiz kod

5 Cevap php

Php ile kendi iletişim formu yapmak için çalışıyorum. Bu yaklaşım daha iyi / temiz bir yolu var mı?

<!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 = "mail@cheapramen.com";
$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!";

}
?>

5 Cevap

Kod doğru görünüyor, ama çok bazı veri doğrulama ekleme tavsiye ederim. Gerekli tüm alanlar geçerli bilgi ile dolu olduğundan emin olmak isteyeceksiniz. Ayrıca etc güvenlik / okunabilirliği amacıyla, herhangi bir HTML, JS şerit / kodlamak emin olun.

Son olarak, aynı zamanda spam karşı korumak için CAPTCHA kullanmayı düşünmelisiniz. Ben buna benzer bir kod çalıştıran eski bir site var ve 500'den fazla spam e-postalar bir gün almak için kullandım!

Yani, belki başarılı bir şekilde tamamlanması üzerine yapabileceğiniz, hoş çok bir header() bir onay sayfasına yönlendirmek, ama kadarıyla form işlenirken olarak ne var oldukça standart.

Ayrıca, herhangi bir kullanıcı girişi kabul standart bir uygulama olarak verilerinizi sterilize etmek istiyorum.

Siz de formu çekiç gelen botlar önlemek için bir CAPTCHA uygulama içine bakmak isteyebilirsiniz.

PHP Captcha

Kesinlikle yapmak istediğim tek şey, e-posta göndermek için veri biraz daha güvenli olun. Ben en az veri girişi üzerinde htmlentitiesi ve sayisinda strip_tags aday olacağını ama kesinlikle daha fazla doğrulama yapıyor görünmelidir.

Ayrıca yerine isset ($ _POST ["GÖNDER"]) Ben belki gibi bir şey yapardı ...

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

ÇOK PHP mail() kaçırma ile ilgili bazı bilgiler arayan ve böyle bir saldırıya karşı savunmasız komut terk etmeyeceğiz yapma öneriyoruz. Ayrıca herkes ne önerdi de yapmak için çok iyidir.

Soruda, size form işlenirken 2 ayrı dosyalar vardı. Sorun bir doğrulama hatası alırsanız, küçük bir seçim ama awful "Please click you back button" çözümü ile sol olduğunu.

Veri doğrulama, hataları, yeniden göndererek, ve bütün 9 metre sağlamak, tek bir sayfada tüm idare edecek bu şablon PHP dosyası düşünün.

<?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>