代码之家  ›  专栏  ›  技术社区  ›  user7723822

php preg\u match不显示输出

  •  2
  • user7723822  · 技术社区  · 7 年前

    我目前正在做一个简单的登录页面。我使用preg_match检查用户名是否只包含字母和空格。如果有帮助,我将以w3schools为例: https://www.w3schools.com/php/php_form_url_email.asp

    PHP

    <?php
    $username = $password = "";
    $usernameErr = $passwordErr = "";
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if (empty($_POST["username"])) {
            $usernameErr = "A Username Is Required!";
        } elseif (!preg_match("/^[a-zA-Z ]*$/",$username) === 0) {
            $usernameErr = "Letters and White Space Only!";
        } else {
            $username = input(isset($_POST["username"]));
        }           
    
        if (empty($_POST["password"])) {
            $passwordErr = "A Password Is Required!";
        }
        else {
            $password = input(isset($_POST["password"]));
        }
    }
    
    function input($data) {
          $data = trim($data);
          $data = stripslashes($data);
          $data = htmlspecialchars($data);
    }
    ?>
    

    HTML

    <!DOCTYPE HTML>  
    <html>
    <head>
    <style>
        .error {color: #FF0000;}
    </style>
    </head>
    <body>
    
    
    <h2>PHP Form Validation Example</h2>
    <p><span class="error">* required field.</span></p>
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  
    Username: <input type="text" name="username">
    <span class="error">* <?php echo $usernameErr;?></span>
    <br><br>
    Password: <input type="text" name="password">
    <span class="error">* <?php echo $passwordErr;?></span>
    <br><br>
    <input type="submit" name="submit" value="Submit">
    
    </form>
    </body>
    </html>
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   symcbean    7 年前

    $username的值在

    $username = $password = "";
    

     } elseif (!preg_match("/^[a-zA-Z ]*$/",$username) === 0) {
    

     } elseif (!preg_match("/^[a-zA-Z ]*$/",$_POST['username']) === 0) {
    

    此外,尝试对preg\u match()的返回值进行显式整数类型匹配有点愚蠢。特别是如果对值执行布尔求反。这样更好:

    } elseif (!preg_match("/^[a-zA-Z ]+$/",trim($_POST['username']))) {
    

    $username = input(isset($_POST["username"]));
    

    $username = input($_POST["username"]);
    ...
    function input($data) {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
    }
    

    代码还有很多错误,但这就足够了。

    我会的 建议您在试验您输入的代码时

    error_reporting(E_ALL | E_STRICT);
    

    在代码顶部,清除PHP将告诉您的所有警告(如果PHP安装是最新的,“|E_STRICT”是多余的)。