带有验证字段的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不客气,但是-请-在本例中不要使用提取)