2009-12-13 4 views
2

Попытка создать свою собственную форму контакта с php. Есть ли лучший/более чистый способ приблизиться к этому?php контактная информация чистый код

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

Эхо эхо-адреса получателя более или менее исключает назначение контактной формы, не так ли? –

+0

hahaha true dat true dat – Davey

ответ

6

код кажется правильным , но я настоятельно рекомендую добавить некоторые проверки данных. Вы захотите убедиться, что все обязательные поля заполнены действительной информацией. Также не забудьте закодировать/удалить любой HTML, JS и т. Д. Для обеспечения безопасности/удобочитаемости.

Наконец, вы также должны рассмотреть возможность использования CAPTCHA для защиты от спама. У меня есть старый код, похожий на этот код, и используется для получения более 500 спам-писем в день!

+0

Возможно, вы можете упомянуть некоторые заголовки для своей электронной почты –

3

Это в значительной степени, возможно, при успешном завершении вы можете перенаправить на страницу подтверждения, но при обработке формы у вас довольно стандартный.

Кроме того, вы хотите дезинформировать свои данные в качестве стандартной практики принятия любого пользовательского ввода.

Возможно, вы захотите ознакомиться с внедрением CAPTCHA, чтобы не допустить, чтобы боты также забивали вашу форму.

PHP Captcha

+0

Приятная идея, спасибо за ссылку! – Davey

3

Одна вещь, которую вы определенно хотите сделать, это данные немного безопаснее для отправки по электронной почте. Я бы по крайней мере запустил htmlentities и strip_tags на входных данных, но вы должны обязательно посмотреть на дальнейшую проверку.

Кроме того, вместо Исеть ($ _ POST [ «ВВЕСТИ»]) Я бы, возможно, сделать что-то вроде ...

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

Это сделать его более читаемым? Или есть еще одно преимущество? Просто любопытно. – Kevin

+0

Я нахожу, что это лучше всего сделать, потому что вам не нужно полагаться на PHP, зная имя вашей кнопки отправки. Думаю, это больше личное предпочтение. Я также работал с разработчиками, которые не помещают имена в кнопки отправки. –

3

Я очень рекомендую посмотреть некоторую информацию о PHP mail() угон и убедившись, что вы не оставляя ваш сценарий уязвимым для такой атаки. То, что все остальные предложили, тоже очень хорошо.

1

В этом случае у вас было 2 отдельных файла, обрабатывающих форму. Проблема в том, что если вы получите ошибку проверки, вы останетесь с небольшим выбором, но ужасно «Пожалуйста, нажмите кнопку« Назад »,.

Рассмотрите этот шаблонный PHP-файл, который будет обрабатывать все это на одной странице, обеспечить проверку данных, ошибки, повторную отправку и все 9 ярдов.

<?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> 
Смежные вопросы