PHP表单不起作用,验证可能是错误的?

时间:2016-06-29 17:36:56

标签: php forms validation

所以我创建了一个有2个输入。用户可以输入用户名和文本框的文本框是他输入的密码。然后是PHP验证,如果Username的文本框为空,则给出错误消息或者如果其中有文本,请查看文本是否仅包含数字。如果它没有再次给出错误消息。密码的PHP验证是相同的主体。顺便说一下,表单加载到与创建它的位置相同的页面。但由于某些原因,当它加载到broswer(加载正常)并且我在用户名文本字段中键入sybols并点击提交时,错误不会出现。我真的希望你们能发现问题因为这让我发疯了。

<!DOCTYPE html>
<html>
   <head>
      <style>
         .error {
         color: red;
         }
      </style>
      <title>Register</title>
   </head>
   <body>
      <form action="#" method="POST">
         <h1 id="Signup">Sign Up</h1>
         <input type="text" name="Username" placeholder="Please Enter a Username">
         <span class="error"><? echo $errorusername;?></span>
         <br>
         <input type="password" name="Password" placeholder="Please Enter a Password">
         <span class="error"><? echo $errorpass;?></span>
         <br>
         <input type="Submit" id ="Submit">
      </form>
   </body>
</html>

<?php
$errorpass = "";
$errorusername = "";

if (isset($_POST['Submit']))
    {
    if (empty($_POST['Username']))
        {
        $errorusername = "name is required";
        }
      else
        {
        $Username = $_POST['Username'];
        if (!preg_match("/^[a-zA-Z ]*$/", $Username))
            {
            $errorusername = "Only numbers allowed";
            }
        }

    if (empty($_POST['password']))
        {
        $errorusername = " A password is required";
        }
      else
        {
        $password = $_POST['password'];
        if (!preg_match("/^[a-zA-Z ]*$/", $password))
            {
            $errorpass = "Need to contain numbers and symbols";
?>

1 个答案:

答案 0 :(得分:5)

确定。首先,if (isset($_POST['Submit'])){...}内的任何内容都不会发生,因为您没有匹配的名称属性。

仅此一项就构成了未定义的索引提交通知。

然后你缺少了条件语句的大括号,而那些单独构成解析错误。

然后你有name="Password"$_POST['password']另一个错误; letter-case和未定义的索引密码通知。

  • 您没有收到错误,因为您没有检查它们,或者您的系统没有设置来捕获它们。

同时确保设置了短开标签,否则将所有<?更改为<?php<? echo更改为<?=

您还需要在PHP之后放置HTML表单,以便所有这些都能正常工作。

因此,鉴于这一切,这里是您的固定代码以及您可以查看的其他一些小错误,这些错误已被修改。

<?php
// For development purposes only
error_reporting(E_ALL);
ini_set('display_errors', 1);

$errorpass = "";
$errorusername = "";

if (isset($_POST['Submit']))
    {
    if (empty($_POST['Username']))
        {
        $errorusername = "name is required";
        }
      else
        {
        $Username = $_POST['Username'];

        if (!preg_match("/^[a-zA-Z ]*$/", $Username))
            {
            $errorusername = "Only numbers allowed";
            }

        }


    if (empty($_POST['Password']))
        {
        $errorpass = " A password is required";
        }
      else
        {
        $password = $_POST['Password'];
        if (!preg_match("/^[a-zA-Z ]*$/", $password))
            {
            $errorpass = "Need to contain numbers and symbols";
            }
        }

}
?>
<!DOCTYPE html>
<html>
   <head>
      <style>
         .error {
         color: red;
         }
      </style>
      <title>Register</title>
   </head>
   <body>
      <form action="#" method="POST">
         <h1 id="Signup">Sign Up</h1>
         <input type="text" name="Username" placeholder="Please Enter a Username">
         <span class="error"><? echo $errorusername;?></span>
         <br>
         <input type="password" name="Password" placeholder="Please Enter a Password">
         <span class="error"><? echo $errorpass;?></span>
         <br>
         <input type="Submit" id ="Submit" name ="Submit">
      </form>
   </body>
</html>

<强>脚注:

这里

if (!preg_match("/^[a-zA-Z ]*$/", $Username))

$errorusername = "Only numbers allowed";

preg_match检查字母而不是数字。

if (!preg_match("/^[a-zA-Z ]*$/", $password))$errorpass = "Need to contain numbers and symbols";

相同

并超出了此问题的范围。您需要自行修复这些问题,以便为您要检查的内容获取正确的语法。

  • 我相信我已经做了足够多的努力让你前进。