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