php preg_match没有显示输出

时间:2017-09-26 20:17:19

标签: php html login preg-match username

我目前正在制作一个简单的登录页面。我使用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 个答案:

答案 0 :(得分:1)

$ username的值不会在

之间更改
$username = $password = "";

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

我认为你打算写

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

此外,尝试对preg_match()的返回值进行显式整数类型匹配有点傻。特别是如果你对值执行布尔否定。这会更好:

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

然后就在我们虽然它不会变得更糟的时候......

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

你知道isset()有什么作用吗?它返回一个您使用输入函数处理的布尔值。但由于您的函数没有返回值,因此您将$ username设置为null。

考虑

$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”是多余的。)