我正在测试这个简单的登录表单。我正在使用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属性调用自身(调用相同的文件 - &gt; login.php) 在PHP脚本中,我尝试实现,如果表单已提交,然后执行所有验证,等等。关于简单验证,我尝试将收到的POST值分配给变量,如果收到的是EXISTS并且它不是空的。如果为空或不存在 - > $ 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.
我尝试使用空($ user)进行一点重定向,并且在提交表单时不触及输入,它确实显示值为空。尽管如此,我还是没有完全理解为什么是空的,$ errors总是有值0。
提前致谢! :)
答案 0 :(得分: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"; }
?>
表格方
<input type="text" name="user"
<?php if($errors == "1"){ echo 'style="border:1px solid red;"'; } ?> />
我刚刚使用==
添加了'$ errors'的值,以确保我们有一个0/1 - &gt;如果您希望以后能够有所作为并为每个字段设置自定义错误处理消息,那么它将非常有用。
当然,您需要修剪并检查并清理来自用户的所有数据,无需说^^
答案 1 :(得分:0)
您检查价值观的方式存在缺陷。
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()
结合起来并不合理。从用户复制方法。