我有一个PHP登录系统,如果用户名或密码字段未填写,则会显示错误。我的问题是,如果密码字段没有填写,则错误不会显示并直接跳到数据库连接。
如果输入字段未填写,则会正确显示用户名错误。
这是我的代码:
<?php
if(isset($_POST['submit'])) {
$username = $_POST['username'];
$password = ($_POST['password']);
if(empty($username)) {
$errorusername = '<p>enter a username.</p>';
}else{
if(empty($password)) {
$errorpassword = '<p>enter a password.</p>';
}else{
// bla bla bla checks if username and password is correct (removed from script)
}else{
echo "Username or password is invalid.";
}
}
}
?>
<form method="post">
<input type="text" placeholder="Username" name="username">
<?php echo $errorusername; ?>
<input type="password" placeholder="Password" name="password">
<?php echo $errorpassword; ?>
<input type="submit" name="submit">
</form>
编辑:缩进代码,帮助OP可视化问题所在。
答案 0 :(得分:1)
正如我在评论和其他人中所述,您的if/else
结构已关闭。
你现在的代码应该抛弃这个解析错误,因为有2个嵌套的else
:
解析错误:语法错误,第16行的/path/to/file.php中出现意外的'else'(T_ELSE)
如果要使其工作,请使用以下命令。很明显,您正在查看密码是否有效,并且没有包含任何内容来支持该问题。
因此,我使用正确的if/else
结构提交以下内容。
你可以填写其余部分。
<?php
if(isset($_POST['submit'])) {
$username = $_POST['username'];
$password = ($_POST['password']);
if(empty($username)) {
$errorusername = '<p>enter a username.</p>';
}
else{
// do something here
echo "Name entered.";
}
if(empty($password)) {
$errorpassword = '<p>enter a password.</p>';
}
else{
// do something here
echo "Password entered";
}
}
?>
<form method="post">
<input type="text" placeholder="Username" name="username">
<?php echo $errorusername; ?>
<input type="password" placeholder="Password" name="password">
<?php echo $errorpassword; ?>
<input type="submit" name="submit">
</form>
修改强>
为避免获得未定义的变量通知,请对变量使用三元运算符:
<form method="post">
<input type="text" placeholder="Username" name="username">
<?php echo $errorusername = !empty($errorusername) ? $errorusername : ''; ?>
<input type="password" placeholder="Password" name="password">
<?php echo $errorpassword = !empty($errorpassword) ? $errorpassword : ''; ?>
<input type="submit" name="submit">
</form>
或者,使用预设检查来匹配用户名/密码:
<?php
if(isset($_POST['submit'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$validuser = "john";
$validpass = "pass";
if(empty($username)) {
$errorusername = '<p>enter a username.</p>';
}
else{
// do something here
echo "Name entered.<br>";
}
if(empty($password)) {
$errorpassword = '<p>enter a password.</p>';
}
else{
// do something here
echo "Password entered.<br>";
}
if ( (!empty($username) && $username == $validuser)
&& (!empty($password) && $password == $validpass) ) {
echo "<br><b>Passed.</b>";
}
else { echo "Invalid, try again."; }
}
?>
<form method="post">
<input type="text" placeholder="Username" name="username">
<?php echo $errorusername = !empty($errorusername) ? $errorusername : ''; ?>
<input type="password" placeholder="Password" name="password">
<?php echo $errorpassword = !empty($errorpassword) ? $errorpassword : ''; ?>
<input type="submit" name="submit">
</form>