【问题标题】:PHP - CSS - Simple form validation test - Change border color for empty resultPHP - CSS - 简单表单验证测试 - 更改空结果的边框颜色
【发布时间】:2017-05-14 03:47:13
【问题描述】:

我正在测试这个简单的登录表单。我正在使用 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。

提前致谢! :)

【问题讨论】:

  • 出于好奇,您为什么使用0 和1 而不是true 和false?答案仍然发布
  • 主要是因为我刚刚学习,我在尝试打印到控制台时实际上尝试了真/假,但由于它什么也没返回,所以我保留了数字
  • 我不确定您为什么要在 JS 控制台中记录这些内容。只需使用var_dump() instead.var_dump( $errors );
  • @NathanDawson 因为当我点击提交按钮时,它会刷新......所以我在屏幕上看不到 var_dumps :/ 我不知道如何实际提交,知道有错误,并使用输入中的红色边框返回登录

标签: php css input border-color


【解决方案1】:

不需要回到@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 -> 如果您以后想有所作为并设置自定义错误处理消息,它会很有用每个字段。

当然,你需要对来自用户的所有数据进行修剪、检查和清理,不用说^^

【讨论】:

  • 嗨@OldPadawan!不错,谢谢!我现在可以看到错误了!但是这一行 --> $errors = 0; // 所以你不会在不提交表单的情况下应用“红色” 做所有相反的事情:/ 边框在不提交的情况下显示为红色。我试过 var_dump($errors);在该行之后,并打印 int(0),但最后我再次打印变量,它已经是 1(没有提交)
  • 不是当我测试的时候......它的设置是为了不有红色边框的输入而不提交,当你第一次到达页面时(或者如果字段没问题) .这段代码中还有其他内容吗?
  • 谢谢你!它现在工作正常! :D 刚刚打开和关闭窗口.. 感谢 cmets 和解释! :D
【解决方案2】:

您检查值的方式存在缺陷。

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() 结合使用没有意义。复制用户的方法。

【讨论】:

  • 嗨!是的,就在不久前,我尝试了另一种使用 isset() 编写 empty() 的方法,并且工作正常($errors 更改了值,但没有更改边框颜色),但我明白你的意思,并且已经更改了代码到你发布的内容,非常感谢:)它仍然不起作用,提交后输入输出的边框颜色没有改变:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多