php脚本没有输出

php脚本没有输出,php,html,validation,Php,Html,Validation,我有一个用户名和密码框和一个登录按钮。我的php脚本应该检查框是否为空,以及传入内容的长度是否小于6个字符。它没有做我想让它做的事情,我不知道为什么。我是php新手,所以我使用W3学校作为参考,但似乎无法理解。我将通过下面的代码 <?php if($_POST){ #not empty #atleast 6 characters long # array holds errors $errors = array(); # validation starts here if(emp

我有一个用户名和密码框和一个登录按钮。我的php脚本应该检查框是否为空,以及传入内容的长度是否小于6个字符。它没有做我想让它做的事情,我不知道为什么。我是php新手,所以我使用W3学校作为参考,但似乎无法理解。我将通过下面的代码

<?php

if($_POST){

#not empty
#atleast 6 characters long


# array holds errors
$errors = array();

# validation starts here
if(empty($_POST['uname'])){
    $errors['$uname1'] = "Your name cannot be empty";
}

if(strlen($_POST['uname']) < 6){
    $errors['uname2'] = "Must be longer than 6 characters";
}

if(empty($_POST['psw'])){
    $errors['psw1'] = "Your password cannot be empty";
}

if(strlen($_POST['psw']) < 6){
    $errors['psw2'] = "Must be longer than 6 characters";
}


if(count($errors) == 0){

    # redirect to the game page
    header('Location:success.html');
    exit();
}
}


?>


<!DOCTYPE html>

<head>
    <title>Hangman Home Page</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>

    <form action="" method="post" class="modal-content animate">



        <div class="container">
            </p>

            <label for="uname"><b>Username</b></label>
            <input type="text" placeholder="Enter Username" name="uname">
            <p>
                <?php if(isset($errors['uname1'])) echo $errors['uname1'];  ?>
            </p>
            <p>
                <?php if(isset($errors['uname2'])) echo $errors['uname2'];  ?>
            </p>


            <label for="psw"><b>Password</b></label>
            <input type="password" placeholder="Enter Password" name="psw">
            <p>
                <?php if(isset($errors['psw1'])) echo $errors['psw1'];  ?>
            </p>
            <p>
                <?php if(isset($errors['psw2'])) echo $errors['psw2'];  ?>
            </p>

            <button type="submit" value="submit">Login</button>
        </div>
    </form>

</body>

</html>

试试这个例子。它基于PHP7特性,称为空合并运算符。正如上面所说:

如果第一个操作数存在且不为空,则返回第一个操作数;否则返回第二个操作数

所以你可以这样写:$uname=$\u POST['uname'];这意味着如果$_POST['uname']存在且不等于NULL,则$uname必须是$_POST['uname']。否则它将等于空字符串

与echo错误相同:。如果设置了错误且不为空,则回显它们。否则返回空字符串

也不需要检查字符串是否为空。因为如果字符串为空-这保证字符串长度小于6

<?php

$uname = $_POST['uname'] ?? '';
$psw = $_POST['psw'] ?? '';

$errors = [];

if(strlen($uname) < 6) $errors['uname'] = 'Name must be longer than 6 characters';
if(strlen($psw) < 6) $errors['psw'] = 'Password must be longer than 6 characters';

if(empty($errors)) {
    header('Location:success.html');
    exit();
}
?>

<!DOCTYPE html>

<head>
    <title>Hangman Home Page</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>

    <form action="" method="post" class="modal-content animate">



        <div class="container">
            </p>

            <label for="uname"><b>Username</b></label>
            <input type="text" placeholder="Enter Username" name="uname">
            <p><?php echo $errors['uname'] ?? '';  ?></p>


            <label for="psw"><b>Password</b></label>
            <input type="password" placeholder="Enter Password" name="psw">
            <p><?php echo $errors['psw'] ?? '';  ?></p>

            <button type="submit" value="submit">Login</button>
        </div>
    </form>

</body>

</html>

你期待什么样的行为,你实际看到了什么?页面只是刷新。我希望能够根据他们是否留白或少于一定数量的字符来查看邮件。此外,我怀疑表单可能存在问题-为了完整性,您还应该发布表单HTML。表单HTML是什么意思?抱歉。。。我没有向下滚动。我看包括在内了。我在我的机器上运行了你的示例-工作正常。