尝试使用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 = "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!";
}
?>
答案 0 :(得分:6)
代码似乎是正确的,但我强烈建议添加一些数据验证。您需要确保使用有效信息填写所有必填字段。另外,为了安全/可读性,还要确保编码/剥离任何HTML,JS等。
最后,您还应考虑使用CAPTCHA来防范垃圾邮件。我有一个旧网站运行与此类似的代码,过去常常每天收到超过500封垃圾邮件!
答案 1 :(得分:3)
这就是它,也许在成功完成后你可以header()
重定向到确认页面,但就处理表格而言,你所拥有的是非常标准的。
此外,您希望将数据清理为接受任何用户输入的标准做法。
您可能希望了解如何实施CAPTCHA以防止机器人敲击您的表单。
答案 2 :(得分:3)
您肯定要做的一件事是让数据在电子邮件中发送更安全一些。我至少会在输入数据上运行htmlentities和strip_tags,但你一定要进一步验证。
而不是isset($ _ POST [“SUBMIT”])我可能会做类似......
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// body code here
}
答案 3 :(得分:3)
我强烈建议您查找有关PHP mail()
劫持的一些信息,并确保您不会让您的脚本易受此类攻击。其他人也建议做的也很好。
答案 4 :(得分: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>