Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有验证字段的PHP电子邮件发送问题_Php - Fatal编程技术网

带有验证字段的PHP电子邮件发送问题

带有验证字段的PHP电子邮件发送问题,php,Php,我面临一个问题,我已成功验证表单中的输入和必填字段。但是如果用户提交表单,不管字段是否为空;它显示带有字段的错误消息,但也发送空电子邮件 我相信只有一个简单的调整需要做。但是我迷路了。请查看我的以下代码: <?php $nameErr = $snameErr = $emailErr = $ownerNameErr = $ownerNatErr = $genderErr = $websiteErr = ""; $name = $sname = $regAddress = $email = $

我面临一个问题,我已成功验证表单中的输入和必填字段。但是如果用户提交表单,不管字段是否为空;它显示带有字段的错误消息,但也发送空电子邮件

我相信只有一个简单的调整需要做。但是我迷路了。请查看我的以下代码:

<?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">
*



电子邮件:您的验证是正确的,我假设它符合您的要求,但是:如果验证失败,您不会阻止
mail()
函数运行

您可以这样做:

if ($valid) {
    if (mail(...) {
        ...
    } else {
        ...
    }
 }
默认情况下,
$valid
变量sou应设置为
true
,在设置错误消息的if语句中,应将变量设置为
false

这样,仅当输入有效时才会调用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
}

顺便说一句,我想您的代码很容易受到攻击,因为您使用了
提取($\u POST)
。攻击者可能会插入任意变量,因此可以绕过您的检查。

您正在本地主机或live server上尝试此操作?请不要使用
提取($\u POST)
。代码段的第一行不应该包含
==
而不是
==
@ChristianGärtner No,因为非空消息表示错误。因此,如果没有检测到错误,这个示例将调用
mail
。但不知怎的,你是对的,我的意思是
==
。啊,太棒了。我读得不够仔细。我以为你在检查$sName等变量。@just lerning:谢谢你的回答。它完全按照要求工作。@MuhammadI不客气,但是-请-在本例中不要使用
提取