如何让我当前的 PHP 联系表单检查输入的电子邮件地址是不是有效? [复制]

Posted

技术标签:

【中文标题】如何让我当前的 PHP 联系表单检查输入的电子邮件地址是不是有效? [复制]【英文标题】:How to make my current PHP contact form check the email address input is valid? [duplicate]如何让我当前的 PHP 联系表单检查输入的电子邮件地址是否有效? [复制] 【发布时间】:2017-10-17 02:49:09 【问题描述】:

固定:

我的代码中有一个小错误,我在电子邮件输入中以某种方式将“类型”更改为“文本”,应该是这样的

type="email" 

不是

type="text"

我已经制作了一个 php 联系表格,我在我制作的网站上使用它并且一切正常。

我以为表单是在检查已输入的电子邮件地址,但我现在意识到人们可以只在电子邮件输入中输入他们的姓名,而不是完整的电子邮件地址(即带有 @ 符号和 .com 或 .co。最后是英国)

我不太擅长 PHP,所以我试了一下,但尽管我添加了声明,但来自我没有输入有效电子邮件地址的表单的电子邮件似乎仍然可以通过

我尝试定义一些错误变量并设置为空值如下:

$nameErr = $emailErr = $genderErr = $websiteErr = "";

然后将这些 if else 语句添加到我的表单 php 中:

if (empty($_POST["email"])) 
$emailErr = "Email is required";
 else 
$email = test_input($_POST["email"]);

所以我的代码如下:

<?php 

    $name = ($_POST['name']);
    $email = ($_POST['email']);
    $message = ($_POST['message']);
    $from = ($_POST['email']);
    $to = 'me@myemailaddress.co.uk'; 
    $subject = "Enquiry from Visitor " . $name;
    $human = ($_POST['human']);

   $headers = 'From: ' . $email . "\r\n" .
   'Reply-To: ' . $email . "\r\n" .
   'X-Mailer: PHP/' . phpversion();


?>

<div class="container-fluid">
<div class="about-msg">
<h2>CONTACT US</h2>

<div class="container-fluid contactform">
<div class="col-md-7 contactform-padding">
<br>    
<h1>GET IN TOUCH</h1>
<p>Please drop us a message if you have any enquires. We always aim to reply 
within 24 hours.</p>
<?php 
    if (isset($_POST['submit']) && $human == '4')  
    if (mail ($to, $subject, $message, $headers))  
    if (empty($_POST["email"]))                
       $emailErr = "Email is required";
        else 
     $email = test_input($_POST["email"]);
     
    echo '<p>Thanks for getting in touch. Your message has been sent & we 
will get back to you shortly!</p>';
 else  
    echo '<p>Something went wrong, go back and try again!</p>'; 
 
     else if (isset($_POST['submit']) && $human != '4') 
echo '<p>You answered the anti-spam question incorrectly!</p>';
     
?>
<form method="post" action="contact-us.php" data-ajax="false" method="POST" 
enctype="multipart/form-data">
<div class="row">
<div class="form-group col-md-6">
<label class="control-label " for="name">
<b>NAME</b>
</label>
<input class="form-control" id="name" name="name" type="text" 
placeholder="name">
</div>


<div class="form-group col-md-6">
<label class="control-label requiredField" for="email">
<b>EMAIL</b>
<span class="asteriskField">
*
</span>
</label>
<input class="form-control" id="email" name="email" placeholder="email" 
type="text"/>
</div>
</div>
<div class="row">
<div class="form-group col-md-12">
<label class="control-label requiredField" for="contact-subject">
<b>SUBJECT</b></label>
<input type="text" name="subject" class="contact-subject form-control" 
id="contact-subject" placeholder="subject">
</div>
</div>


<div class="form-group">
<label class="control-label " for="message">
<b>MESSAGE</b>
</label>
<textarea class="form-control" cols="40" id="message" name="message" 
rows="10" style="height: 275px !important;"></textarea>
</div>
<div class="form-group">

<label><b>*What is 2+2? (Anti-spam)</b></label>
<input name="human" placeholder="Type Here"></div>
<br>
<button class="btn btn-success" name="submit" type="submit" value="submit">
SEND
</button>
</form>


</div>

但是这让我可以发送电子邮件,尽管我的电子邮件地址只是我的名字!

有人可以看看我是否将代码放在正确的位置或就如何修复它提出建议吗?我只是在学习 PHP,所以我的代码可能出错了,或者可能需要将 if 语句取出来提交?

感谢您的帮助!

【问题讨论】:

这是一个非常广泛的问题,不像我的那么具体。我在问如何使用我的特定联系表来做到这一点。此人甚至没有输入表单代码。 @DouwedeHaan 确实,这可以帮助他。 @ck777 你也可以输入类型email,在文本输入中需要@。 查看此链接以了解更多关于 html 中的 type="email" 的信息。但它不会 100% 解决您的需求 @zooly 啊不,我明白你的意思完全抱歉!我以为我已经有了这个,所以我会试一试,有时我可能在编辑表单时更改了它,这可以解释为什么它不再有效..谢谢! 类型值应该是电子邮件字段的电子邮件并且是必需的属性将检查您给定的邮件是否是有效的电子邮件。 【参考方案1】:

使用PHP Filter Validation

$email_b = "me@myemailaddress.co.uk";

if (filter_var($email_b, FILTER_VALIDATE_EMAIL)) 
    echo "This ($email_b) email address is considered valid.\n";
 else 
    echo "This ($email_b) email address is considered invalid.\n";

【讨论】:

但这会检查用户输入的电子邮件地址是否有效吗?这不只是检查表单将要发送的电子邮件是否有效吗?对不起我的困惑 服务器端检查给定的邮件格式是否正确@ck777【参考方案2】:

我认为您希望用户输入有效的电子邮件地址,对吧? 您可以将类型更改为电子邮件

<input class="form-control" id="email" name="email" placeholder="email" type="email"/>

【讨论】:

是的,这正是我想要的,谢谢!就这么简单吗?太棒了,谢谢你,我会试试的,我以为我已经有了,所以可能是我的错字..! 如果你投票给我的答案,我很感激 注意:用户可以仍然发送无效数据。不支持此功能的浏览器可能会将其视为任何正常的文本输入,而在支持此功能的浏览器中,用户仍然可以绕过它。这在大多数情况下都有效,但如果用户想要提交无效数据,他们仍然可以。 嘿,非常感谢,确实是这样,或者至少这是我之前认为它工作时的样子。不知道这是怎么发生的,但非常感谢您指出【参考方案3】:

你可以选择regex,但这也是option

【讨论】:

我真的很想让我现在的表格做到这一点,因为我完全按照我想要的方式制作了这个表格。我添加了一些代码来完成这项工作,请参阅上面的代码 不要依赖链接作为您的答案,将信息添加到您的答案中。

以上是关于如何让我当前的 PHP 联系表单检查输入的电子邮件地址是不是有效? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 php 没有将我的联系表单输入发送到我的电子邮件?

在 PHP 中获取联系表 7 表单 ID

PHP 表单不检查其他输入

如何正确地将 CSS 应用于 PHP 回显?

如何使用本地 xampp 和 php 联系人表单从我的 mac 发送邮件

如何通过单独的联系表单将 HTML 输入从页面发送给用户