2016-01-18 48 views
0

我有一个简单的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教程。这可能是我的课程把东西扔掉了吗?或者我只是搞砸了一个变量名? 感谢您的帮助

+1

顺便说一句,你有什么反对名称像*何塞*的人? – CD001

+0

看起来像'$ contactEmail'永远不会设置为初始空字符串以外的值。尝试删除'else'子句并设置'$ contactEmail = test_input($ _ POST [“contactEmail”]);'在所有情况下。 – Luke

+0

它看起来像test_input()函数还没有定义在任何地方? – Hexana

回答

0

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

既不是“测试”的回声。 $ 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

+0

非常感谢,接下来我会研究正则表达式 – gruff

0

下面的代码验证了变量$email的值,但我在代码中看不到任何地方,那个变量的值是什么,这可能是解决问题的第一步。

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) 
0

您还没有定义test_input()函数和$电子邮件是不是在这行定义的:

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"]; 
     } 
    }