【问题标题】:FILTER_VALIDATE_EMAIL saying a valid email is invalidFILTER_VALIDATE_EMAIL 表示有效的电子邮件无效
【发布时间】:2015-06-03 10:42:00
【问题描述】:

我在检查电子邮件是否有效时遇到问题。但奇怪的是,我在不同的页面/网址上有相同的表单,并且在其中一个表单上它一直说电子邮件无效并且在表单上它是有效的。

此页面上的表单有效 - http://night.sendme.to/about 此页面上的表单没有 - http://night.sendme.to/book/jokeren

表单上的 HTML 是一样的

<form action="" method="post" id="myform">
        <div class="form-group">
            <label for="name">Navn *</label>
            <input type="text" class="form-control" id="name" name="name" placeholder="Navn" required="required">
        </div>
        <div class="form-group">
            <label for="corp">Virksomhed</label>
            <input type="text" class="form-control" id="corp" name="corp" placeholder="Virksomhed">
        </div>
        <div class="form-group">
            <label for="email">Email adresse *</label>
            <input type="email" class="form-control" id="email" name="email" placeholder="Email adresse" required="required">
        </div>
        <div class="form-group">
            <label for="tel">Telefon *</label>
            <input type="tel" class="form-control" id="tel" name="tel" placeholder="Telefon" required="required">
        </div>
        <div class="form-group">
            <label for="message">Kommentar</label>
            <textarea class="form-control" id="message" name="message" rows="10" required="required"></textarea>
        </div>
        <button type="submit" class="btn btn-default" id="submit">Send</button>
        </form>
        <div id="success" style="color:red;"></div>

PHP是这样的

<?php   // Here we get all the information from the fields sent over by the form.
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];

$to = 'YOURMAIL';
$subject = 'the subject';
$message = 'FROM: '.$name.' Email: '.$email.'Message: '.$message;
$header  = "MIME-Version: 1.0" . "\r\n";
$header .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$header .= "from:".$_POST['email'];

if (filter_var($email, FILTER_VALIDATE_EMAIL)) { // this line checks that we have a valid email address
    mail($to, $subject, $message, $header); //This method sends the mail.
    echo "Your email was sent!"; 
    echo var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)); 
} else {
    echo "Invalid Email, please provide an correct email.";
    echo var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)); 
}
?>

javascript是这个

$(document).ready(function(){
    $('#submit').click(function(){
        $.post("email.php", $("#myform").serialize(),  function(response) {
        $('#success').html(response);
        //$('#success').hide('slow');
        });
        return false;
    }); 
});

希望有人可以提供帮助,为什么该表单仅适用于 http://night.sendme.to/about 和其他人

【问题讨论】:

  • 这是您使用的 PHP 版本
  • 请检查此链接中标记的答案:- stackoverflow.com/questions/19220158/…。希望它能帮助您找出出现此问题的原因。
  • 您遇到问题的实际电子邮件地址是什么? (可能是字符编码问题,如果您的表单与不同的表单一起发送……)
  • 去检查$email在这两种情况下你的脚本中实际包含的内容:var_dump($email);
  • 更准确地说:我在 Chrome 调试工具中没有看到任何 id。在您的 HTML 代码中,您实际上在两个页面中都有 &lt;form action="" method="post" id="myform"&gt; - 但在您的第二页中,您在其前面有 another &lt;form&gt; 标记……由于这个无效的 HTML,浏览器会忽略第二种形式的标签。

标签: php validation email filter-var


【解决方案1】:

所以,不要让这个问题没有答案:

在您的 HTML 代码中,您实际上在两个页面中都有 &lt;form action="" method="post" id="myform"&gt; - 但在您的第二个页面中,您在它之前还有另一个 &lt;form&gt; 标记……由于这个无效的 HTML,浏览器忽略了第二个表单标记,这使得$("#myform").serialize() 根本不返回任何数据,因为它找不到具有该 id 的表单元素。

您应该始终validate 您的 HTML 代码。这有助于避免此类错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 2011-11-30
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多