我已经构建了以下表单,该表单从人们那里收集电子邮件地址和网站 url。在数据库中,电子邮件和网站 url 设置为唯一的,因此一个人不能两次输入相同的电子邮件和网站。
然而,作为 PHP 新手,我想仔细检查表单是否包含任何可能允许人们对表单进行恶意操作和/或存在可被利用的验证问题的严重问题。此外,因为我想在回发时隐藏表单但再次显示错误,我最终复制了表单,这并不理想但在这种情况下并不是什么大问题,因为它只是一个快速表单。主要因素是确保验证非常强大,并且表单中的服务器/sql 攻击不存在漏洞。
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// DATABASE CONNECTION HERE
$email = mysql_real_escape_string($_POST['EMAIL']);
$website = mysql_real_escape_string($_POST['WEBSITE']);
if ( $email == '' || $website == '' || !filter_var($website, FILTER_VALIDATE_URL) || !filter_var($email, FILTER_VALIDATE_EMAIL) )
{
echo '<p style="color:red;">You must fill out all fields correctly and duplicate emails/websites are not permitted!</p>';
?>
<form action="./" method="post">
<label for="EMAIL">Email Address</label>
<input type="email" value="" name="EMAIL" id="EMAIL" required>
<label for="WEBSITE">Website URL</label>
<input type="url" value="" name="WEBSITE" id="WEBSITE" required>
<input type="submit" value="Join" name="join">
</form>
<?php
}
else
{
$query = "INSERT INTO list VALUES (NULL, '$email','$website')";
$result = mysql_query($query);
echo '<p>THANKS!</p>';
}
}
else
{
?>
<form action="./" method="post">
<label for="EMAIL">Email Address</label>
<input type="email" value="" name="EMAIL" id="EMAIL" required>
<label for="WEBSITE">Website URL</label>
<input type="url" value="" name="WEBSITE" id="WEBSITE" required>
<input type="submit" value="Subscribe" name="subscribe">
</form>
<?php } ?>