人々から電子メール アドレスと Web サイトの URL の両方を収集する次のフォームを作成しました。データベースでは、電子メールと Web サイトの URL が一意になるように設定されているため、同じ電子メールと Web サイトを 2 回入力することはできません。
ただし、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 } ?>