【问题标题】:PHP Variable not storing value after submit提交后PHP变量不存储值
【发布时间】:2016-04-23 18:40:42
【问题描述】:

我有一个简单的 PHP 页面,正在尝试验证表单输入。

在使用无效数据点击submit 时,我的echo 语句中不会返回输入的值

我想将echo 输入为value,以便用户可以理解他们输入的错误。以下是我的代码;

"TEST" . $contactEmail 的回声和input value 都没有显示$contactEmail

<?php
        // define variables and set to empty values
        $contactFirstNameErr = $contactEmailErr = $retailerIDErr = "";
        $contactFirstName = $contactEmail = $retailerID = "";

        if ($_SERVER["REQUEST_METHOD"] == "POST") {
        // collect value of input fields
            if (empty($_POST["contactFirstName"])) {
                $contactFirstNameErr = "<br>*First Name is required";
               } else {
                 $contactFirstName = test_input($_POST["contactFirstName"]);
                 // check if name only contains letters and whitespace
                 if (!preg_match("/^[a-zA-Z ]*$/",$contactFirstName)) {
                   $contactFirstNameErr = "<br>*Only letters and white space allowed"; 
                 }
               }
            //Email Field
            if (empty($_POST["contactEmail"])) {
                $contactEmailErr = "<br>*Email is required";
            } else {
                // check if e-mail address is well-formed
                if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                    $contactEmailErr = "<br>*Invalid email format"; 
                } else {
                    $contactEmail = test_input($_POST["contactEmail"]);
                }
            }
            //Option Field
            if (empty($_POST["retailerID"])) {
                $retailerIDErr = "<br>*Retailer is required";
            } else {
                $retailerID = test_input($_POST["retailerID"]);
            }
        }
    ?>

    <!--Begin HTML Form-->
    <div class="Form_container">
        <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
            Contact First Name<span class="required">*</span><span class="formError"><?php echo $contactFirstNameErr;?></span><br> <!--<p class='spacerLine'></p>-->
            <input type="text" class="largeInput" name="contactFirstName" value="<?php echo $contactFirstName;?>">
                <br><br>
            Contact E-mail<span class="required">*</span><span class="formError"> <?php echo $contactEmailErr;?></span><br>
            <input type="text" class="largeInput" name="contactEmail" value="<?php echo $contactEmail;?>">
                <br><br>
                <?php echo "TEST" . $contactEmail;?>
                <br><br>
            Retailer<span class="required">*</span><span class="formError"><?php echo $retailerIDErr;?></span><br>
            <input type="text" class="largeInput" name="retailerID" value="<?php echo $retailerID;?>">
                <br><br>
            <input type="submit"  class="button" name="submit" value="Add Contact"> 
        </form>
    </div>

有什么想法吗?我是 PHP 新手,但一直非常严格地遵循 W3 教程。会不会是我的课把东西扔掉了?还是我只是弄乱了一个变量名? 感谢大家的帮助

【问题讨论】:

  • 顺便说一句,你对像 José 这样的人有什么看法?
  • 看起来 $contactEmail 从未设置为初始空字符串以外的值。尝试删除else 子句并在所有情况下设置$contactEmail = test_input($_POST["contactEmail"]);
  • 好像 test_input() 函数也没有在任何地方定义?

标签: php validation echo


【解决方案1】:

我想将输入作为值回显,以便用户能够理解他们输入的错误。

“TEST”的回声也没有。 $contactEmail 和输入值都没有显示 $contactEmail

首先,回显$_POST 值而不是$contactFirstName$contactEmail 等,因为这些值只有在经过所有验证步骤后才可用。

其次,您的代码中没有名为test_input() 的函数,或者它可能是在其他地方定义的。

最后,看看这里的声明:

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { ..

您的代码中没有名为 $email 的变量。应该是:

if (!filter_var($_POST["contactEmail"], FILTER_VALIDATE_EMAIL)) { ..

所以你的代码应该是这样的:

<?php

    function test_input($string){
        
        // your code
    }

    $contactFirstNameErr = $contactEmailErr = $retailerIDErr = "";
    $contactFirstName = $contactEmail = $retailerID = "";

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        // collect value of input fields
        if (empty($_POST["contactFirstName"])) {
            $contactFirstNameErr = "<br>*First Name is required";
        } else {
            $contactFirstName = test_input($_POST["contactFirstName"]);
            // check if name only contains letters and whitespace
            if (!preg_match("/^[a-zA-Z ]*$/",$contactFirstName)) {
                $contactFirstNameErr = "<br>*Only letters and white space allowed"; 
            }
        }
        //Email Field
        if (empty($_POST["contactEmail"])) {
            $contactEmailErr = "<br>*Email is required";
        } else {
            // check if e-mail address is well-formed
            if (!filter_var($_POST["contactEmail"], FILTER_VALIDATE_EMAIL)) {
                $contactEmailErr = "<br>*Invalid email format"; 
            } else {
                $contactEmail = test_input($_POST["contactEmail"]);
            }
        }
        //Option Field
        if (empty($_POST["retailerID"])) {
            $retailerIDErr = "<br>*Retailer is required";
        } else {
            $retailerID = test_input($_POST["retailerID"]);
        }
    }
?>

<div class="Form_container">
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
        Contact First Name<span class="required">*</span><span class="formError"><?php echo $contactFirstNameErr; ?></span><br>
        <input type="text" class="largeInput" name="contactFirstName" value="<?php if(isset($_POST['contactFirstName'])){ echo $_POST['contactFirstName']; } ?>">
            <br><br>
        Contact E-mail<span class="required">*</span><span class="formError"> <?php echo $contactEmailErr;?></span><br>
        <input type="text" class="largeInput" name="contactEmail" value="<?php if(isset($_POST['contactEmail'])){ echo $_POST['contactEmail']; } ?>">
            <br><br>
            <?php 
                echo "TEST "; 
                if(isset($_POST['contactEmail'])){ echo $_POST['contactEmail']; }
            ?>
            <br><br>
        Retailer<span class="required">*</span><span class="formError"><?php echo $retailerIDErr;?></span><br>
        <input type="text" class="largeInput" name="retailerID" value="<?php if(isset($_POST['retailerID'])){ echo $_POST['retailerID']; } ?>">
            <br><br>
        <input type="submit"  class="button" name="submit" value="Add Contact"> 
    </form>
</div>

这是isset()函数的参考:


旁注:尽管这个答案暂时对你有用,但你绝对应该看看how to strictly validate form inputs using regex

【讨论】:

  • 非常感谢,接下来我会研究正则表达式
【解决方案2】:

下面的行验证了变量$email 的值,但我在代码中看不到该变量在哪里设置值,这可能是解决问题的第一步。

if (!filter_var($email, FILTER_VALIDATE_EMAIL))

【讨论】:

    【解决方案3】:

    您没有定义 test_input() 函数,并且此行中没有定义 $email:

    if (!filter_var($email, FILTER_VALIDATE_EMAIL))
    

    到目前为止,此代码对我有效:

           $contactFirstNameErr = $contactEmailErr = $retailerIDErr = "";
        $contactFirstName = $contactEmail = $retailerID = "";
    
        if ($_SERVER["REQUEST_METHOD"] == "POST") {
        // collect value of input fields
            if (empty($_POST["contactFirstName"])) {
                $contactFirstNameErr = "<br>*First Name is required";
               } else {
                 $contactFirstName = $_POST["contactFirstName"];
                 // check if name only contains letters and whitespace
                 if (!preg_match("/^[a-zA-Z ]*$/",$contactFirstName)) {
                   $contactFirstNameErr = "<br>*Only letters and white space allowed"; 
                 }
               }
            //Email Field
            if (empty($_POST["contactEmail"])) {
                $contactEmailErr = "<br>*Email is required";
            } else {
                // check if e-mail address is well-formed
                if (empty($_POST["contactEmail"])) {
                    $contactEmailErr = "<br>*Invalid email format"; 
                } else {
                    $contactEmail = $_POST["contactEmail"];
                }
            }
            //Option Field
            if (empty($_POST["retailerID"])) {
                $retailerIDErr = "<br>*Retailer is required";
            } else {
                $retailerID = $_POST["retailerID"];
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      相关资源
      最近更新 更多