css 简单表单验证测试-更改空结果的边框颜色

iswrvxsc  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(115)

我在测试这个简单的登录表单。我用PHP,XAMPP,在Chrome中测试。
以下是表单的代码:

<form action="login.php" method="POST">

    <label>User: </label>
    <input type="text" name="user" <?php if($errors){echo 'style="border:1px solid red;"';}?>>
    <?php echo '<script>console.log("Value for $errors: '.$errors.'")</script>';?> 

    <label>Password: </label>
    <input type="password" name="password" <?php if($errors){echo "style='border:1px solid red;'";}?>>

    <div class="text-center">
        <button type="submit" name="submit">Sign in</button>
    </div>
</form>

这段代码是login.php的一部分,在最开始,我有以下PHP行:

<?php

session_start();

$user = "";
$password = "";
$errors = 0;

if(isset($_POST['submit'])){

    if(isset($_POST['user'])){
        if(!empty($_POST['user'])){
        $user = $_POST['user'];
        }
    }else{
        $errors = 1;
    }

    if(!empty(isset($_POST['password']))){
        $password = $_POST['password'];

    }else{
        $errors = 1;
    }

    $_SESSION['user'] = $user;
    $_SESSION['password'] = $password;

}

?>

表单中的action属性调用自身(调用相同的文件--〉login.php)在PHP脚本中,我尝试在表单提交后实现这一点,然后执行所有验证等。至于简单验证,我尝试将收到的POST值赋给变量,如果收到的内容存在且不为空。如果为空或不存在--〉$errors = 1;
问题是..如果两个输入有错误,我希望它们将边框颜色更改为红色。

<label>User: </label>
<input type="text" name="user" <?php if($errors == 1){echo 'style="border:1px solid red;"';}?>>
<?php echo '<script>console.log("Value for $errors: '.$errors.'")</script>';?>

我添加的最后几行代码尝试在控制台中打印$errors的值,它总是显示0。
我尝试过使用empty($user)进行一些重定向,当提交表单而不触及输入时,它确实显示值为空,但我不完全明白为什么为空时,$errors的值总是0。

k5hmc34c

k5hmc34c1#

不需要回到@Nathan-Dawson的评论/回答中,你需要检查值的方式,这一切都说了。这里有一个稍微不同的方法:我添加了警告消息之前/之后,所以你可以改善用户的经验,它(希望)告诉你如何检查值。
PHP端

<?php

error_reporting(E_ALL); ini_set('display_errors', 1);

$errors = 0; // so you don't get 'red' applied without submitting the form

if(isset($_POST['submit'])) {

if(isset($_POST['user'])){ // check for POST'd value
    if(!empty($_POST['user'])){
    $user = $_POST['user'];
    // $errors = 0; <- $errors would remain '0' but not needed, just for the logic
    } else {
    $errors = 1; // form is processed but $user is POST'd empty
    }
} else {
    $errors = $errors; // needed if one field is set but not the other one
   // so we don't set $errors back to '0'
}

// same logic applies to 'password' -> no need to comment it out again :)

if(isset($_POST['password'])){
    if(!empty($_POST['password'])){
    $password = $_POST['password'];
    } else {
    $errors = 1;
    }
} else {
    $errors = $errors;
}

// added this to show users if they forgot something or not
if($errors == 0) {
$warning_mess = "Form fields have been filled, thx !";
} else { 
$warning_mess = "Please fill all fields before submitting."; 
}

// before submitting, give users a warning about fields
} else { $warning_mess = "Form fields need to be filled"; }

?>

FORM侧

<input type="text" name="user"
<?php if($errors == "1"){ echo 'style="border:1px solid red;"'; } ?> />

我只是在==中添加了对'$errors'值的检查,以确保我们有一个0/1 -〉,如果您希望以后有所不同并为每个字段设置一个自定义的错误处理消息,这可能会很有用。
当然,您需要对来自用户的所有数据进行修整、检查和净化

ncgqoxb0

ncgqoxb02#

你检查数值的方法有缺陷。

if ( isset( $_POST['user'] ) ) {
    if ( ! empty( $_POST['user'] ) ) {
        $user = $_POST['user'];
    }
} else {
    $errors = 1;
}

您的表单有一个名为user的字段正在提交,因此$_POST['user']将被设置。如果它被设置,那么它是否为空并不重要,您的代码不会将$error更改为1。您有一个嵌套循环,它没有考虑到这一点。
empty()将检查它是否也已设置,因此您不需要isset()

if ( ! empty( $_POST['user'] ) ) {
    $user = $_POST['user'];
} else {
    $errors = 1;
}

同样的道理也适用于密码。将empty()isset()组合使用没有意义。从用户那里复制方法。

相关问题