簡體   English   中英

PHP電子郵件驗證不起作用

[英]PHP email Validation not working

我有一個表格,比我提交錯誤時沒有顯示錯誤

    <form action="emailSubs.php" method="post">
        <p>Would you like to subscribe to our newsletter ?</p>
        <p>Name: <input type="text" name="name"><br /></p>
        <p>E-mail: <input type="text" name="Email"><br /></p>
        <p><input type="submit" name="submit"><br /></p>
    </form>
    <?php
    function validateEmail($data, $fieldName) {
        global $errorCount;
        if(empty($data)) {
            echo "\"$fieldName\" is a required
            field.<br />\n";
            ++$errorCount;
            $retval = "";
        } else { // olny clean up the input if it isn't
                // empty
        $retval = trim($data);
        $retval = stripslashes($retval);
        $pattern = "/^[\w-]+(\.[\w-]+)*@" .
             "[\w-]+(\.[\w-]+)*" .
             "(\[[a-z]]{2,})$/i";
    if(preg_match($pattern, $retval) ==0) {
        echo "\"$fieldName\" is not a valid E-mail
        address.<br />\n";
        ++$errorCount;
        }
    }
    return ($retval);
}
    ?>

我認為這可能是模式,但不確定問題可能是什么

問題是您沒有正確連接兩件事...

將表單與emailSubs.php放在一個單獨的文件中-雖然這不是必需的步驟,但它有望幫助您了解其工作方式(更不用說這是一種更加整潔/有組織的方式)

   <form action="emailSubs.php" method="post">
        <p>Would you like to subscribe to our newsletter ?</p>
        <p>Name: <input type="text" name="name"><br /></p>
        <p>E-mail: <input type="text" name="Email"><br /></p>
        <p><input type="submit" name="submit"><br /></p>
    </form>

現在,在您的emailSubs.php文件中:

<?php
function validateEmail($data, $fieldName) {
    global $errorCount;
    if(empty($data)) {
        echo "\"$fieldName\" is a required
        field.<br />\n";
        ++$errorCount;
        $retval = "";
    } else { // olny clean up the input if it isn't
            // empty
    $retval = trim($data);
    $retval = stripslashes($retval);
    $pattern = "/^[\w-]+(\.[\w-]+)*@" .
         "[\w-]+(\.[\w-]+)*" .
         "(\[[a-z]]{2,})$/i";
if(preg_match($pattern, $retval) ==0) {
    echo "\"$fieldName\" is not a valid E-mail
    address.<br />\n";
    ++$errorCount;
    }
}
return ($retval);

}?>

但是,您還沒有完成-! 您會看到,必須將兩者連接---在您的表單中,您指定了method="post" -因此,我們這樣做:

    <?php

$name = $_POST['name'];
$email = $_POST['email']; 

?> 

現在,有很多充分的理由不使用regexp來驗證您的表單。 這是關於該主題的不錯的閱讀。

因此,您可能要做的看起來像這樣:

<?php

if(ctype_alnum($_POST['name']) == true){
$name = $_POST['name'];

} else {

exit("Please enter a valid name");

}

if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL){
    $email = $_POST['email']; 
} else {

    exit("Please enter a valid email address");

}

?> 

你看到了嗎? 這為處理驗證提供了一種更加簡潔的方法。

所以,整圈,您的代碼沒有顯示錯誤,因為沒有任何內容可以顯示該錯誤。

我注意到您有一個表單和一個函數,但是在提交表單時沒有調用該函數。 也許您正在做的事情超出了您所包含的代碼范圍,但是為了以防萬一,我將其修改為提交/函數調用與表單本身之間的完整交互。 另外,為什么不使用filter_var而不是正則表達式呢?

代碼(在我的本地服務器上工作):

<?php
function validateEmail($data, $fieldName)
{
    global $errorCount;
    $errorCount=0;
    if(empty($data))
    {
        echo "\"$fieldName\" is a required
        field.<br />\n";
        ++$errorCount;
        $retval = "";
    } 
    else 
    { 
        // olny clean up the input if it isn't
        // empty
        $retval = trim($data);
        $retval = stripslashes($retval);

        if(!filter_var($_POST['Email'], FILTER_VALIDATE_EMAIL))
        {
            echo "\"".$_POST['Email']."\" is not a valid E-mail
            address.<br />\n";
            ++$errorCount;
        }
    }
    return ($retval);
}
if(isset($_POST['submit']))
{
    $email=validateEmail($_POST['Email'], "Email");
    if(empty($errorCount))
    {
        //create subscription
        echo "Subscribed!";
    }
}
?>   
<form action="test.php" method="post">
    <p>Would you like to subscribe to our newsletter ?</p>
    <p>Name: <input type="text" name="name" value="<?php echo $_POST['name'];?>"><br /></p>
    <p>E-mail: <input type="text" name="Email" value="<?php echo $_POST['Email'];?>"><br /></p>
    <p><input type="submit" name="submit"><br /></p>
</form>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM