2

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

}
?>
4

5 に答える 5

6

コードは正しいようですが、データ検証を追加することを強くお勧めします。すべての必須フィールドに有効な情報が入力されていることを確認してください。また、セキュリティ/読みやすさの目的で、HTML、JS などをエンコード/ストリップしてください。

最後に、CAPTCHA を使用してスパムから保護することも検討する必要があります。これに似たコードを実行している古いサイトを持っていて、1 日に 500 件以上のスパム メールを受け取っていました。

于 2009-12-13T23:40:26.200 に答える
3

PHP ハイジャックに関する情報を調べてmail()、スクリプトをそのような攻撃に対して脆弱なままにしないようにすることを強くお勧めします。また、他の人が提案したことも同様に非常に良いです。

于 2009-12-13T23:51:28.003 に答える
3

これで終わりです。正常に完了した場合はheader()、確認ページにリダイレクトできますが、フォームを処理する限り、あなたが持っているものはかなり標準的です。

また、ユーザー入力を受け入れる標準的な方法として、データをサニタイズする必要があります。

ボットがフォームを叩くのを防ぐために、CAPTCHA の実装を検討することもできます。

PHP キャプチャ

于 2009-12-13T23:41:57.563 に答える
3

確実にやりたいことの 1 つは、メールで送信するデータをもう少し安全にすることです。少なくとも入力データに対して htmlentities と strip_tags を実行しますが、さらに検証することを検討する必要があります。

また、 isset($_POST["SUBMIT"]) の代わりに、次のようなことをするかもしれません...

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // body code here
}
于 2009-12-13T23:43:01.577 に答える
1

質問では、フォームを処理する 2 つの別個のファイルがありました。問題は、検証エラーが発生した場合、選択の余地がほとんどなく、「戻るボタンをクリックしてください」というひどい解決策が残されることです。

すべてを 1 ページで処理し、データの検証、エラー、再送信、および 9 ヤード全体を提供するこのテンプレート PHP ファイルについて考えてみましょう。

<?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>
于 2009-12-14T00:23:02.003 に答える