0

問題に直面しています。フォームの入力フィールドと必須フィールドを正常に検証しました。ただし、フィールドが空であっても、ユーザーがフォームを送信すると、フィールド付きのエラーメッセージが表示されますが、空のメールも送信されます。

簡単な微調整が必​​要だと思います。しかし、私は迷っています。私が持っている以下のコードを調べてください:

<?php
$nameErr = $snameErr = $emailErr = $ownerNameErr = $ownerNatErr = $genderErr = $websiteErr = "";
$name = $sname = $regAddress = $email = $gender = $comment = $ownerName = $ownerNat = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
   if (empty($_POST["name"]))
     {$nameErr = "Name is required";}
   else
     {
     $name = test_input($_POST["name"]);
     // check if name only contains letters and whitespace
     if (!preg_match("/^[a-zA-Z ]*$/",$name))
       {
       $nameErr = "Only letters and white space allowed"; 
       }
     }

if (empty($_POST["sname"]))
     {$snameErr = "Company Second Name is required";}
   else
     {
     $sname = test_input($_POST["sname"]);
     // check if name only contains letters and whitespace
     if (!preg_match("/^[a-zA-Z ]*$/",$sname))
       {
       $snameErr = "Only letters and white space allowed"; 
       }
     }

          extract($_POST);

     $to="example@example.com";
    $subject="Subject";
$body="<table width='100%' cellspacing='10' cellpadding='0'>
    <tr>
            <td style='color:blue;font-weight:bold;margin-left:500px;font-size:20px;' colspan='3'>My Form</td>
    </tr>

  <tr>
    <td>Name</td>
    <td>:</td>
    <td>$name</td>
  </tr>

<tr>
    <td>Second Choice</td>
    <td>:</td>
    <td>$sname</td>
  </tr>

</table>";
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: MySite '."\r\n";
/*$headers .= 'Reply-To:'."$textfield5"."\r\n";*/



if(mail($to,$subject,$body,$headers))
{


       $msg = "Thank you for contacting us. We will get back to you soon.";
    /*$msg= "Successfully Sent";*/
}
else
{
    $msg= "msg not sent";
}

}

function test_input($data)
{
     $data = trim($data);
     $data = stripslashes($data);
     $data = htmlspecialchars($data);
     return $data;
}
?>

HTML 部分

<span class="error">* <?php echo $ownerNatErr;?></span>
   <br><br>

   E-mail: <input type="text" name="email" value="<?php echo $email;?>">
   <span class="error">* <?php echo $emailErr;?></span>

   input type="submit" name="submit" value="Submit Information">

どんな助け/提案も大歓迎です。

よろしく。

4

2 に答える 2

2

あなたの検証は正しいですが、私はそれがあなたが望むことをしていると思いmail()ます.検証が失敗した場合でも、関数の実行を妨げません.

あなたはこれを行うことができます:

if ($valid) {
    if (mail(...) {
        ...
    } else {
        ...
    }
 }

この$valid変数 sou はtrueデフォルトで に設定する必要があり、エラー メッセージを設定する if ステートメントでは、変数を に設定する必要がありますfalse

このようにして、入力が有効な場合にのみメール関数が呼び出されます。

乾杯。

于 2013-11-02T09:31:28.393 に答える
0

パラメータにエラーがないかチェックし、いくつかのエラー メッセージを設定しますがmail、エラーが見つかったとしても、コードはとにかく呼び出します。

いくつかの条件を追加することができます:

if($snameErr === '' && $nameErr === '' ...) {
  // call mail here, check whether it was successful and
  // tell the user about it
} else {
  // show error message or something else
}

ところで、あなたが使用しているため、あなたのコードは脆弱だと思いますextract($_POST)。攻撃者は任意の変数を挿入する可能性があるため、チェックをバイパスできます。

于 2013-11-02T09:32:30.073 に答える