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

-1 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";
?>
Run Code Online (Sandbox Code Playgroud)

Fun*_*ner 5

好.首先,这里面什么if (isset($_POST['Submit'])){...}都不会发生,因为你没有匹配的name属性.

仅这一点就构成了未定义的索引提交通知.

然后你缺少条件的括号,而那些单独的括号将构成解析错误.

然后,你必须name="Password"$_POST['password']其他的错误; letter-case和Undefined index password notice.

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

另外,还要确保短开放标记设置,否则所有更改<?<?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>
Run Code Online (Sandbox Code Playgroud)

脚注:

这里

if (!preg_match("/^[a-zA-Z ]*$/", $Username))
Run Code Online (Sandbox Code Playgroud)

对于

$errorusername = "Only numbers allowed";
Run Code Online (Sandbox Code Playgroud)

preg_match检查字母而不是数字.

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

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

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