注册表窗体上的PHP if语句失败
我有一段代码:注册表窗体上的PHP if语句失败,php,forms,if-statement,Php,Forms,If Statement,我有一段代码: if(isset($_POST['register_form'])) { if(isset($_POST['username']) && isset($_POST['password']) && isset($_POST['lastname']) && isset($_POST['email'])) { Register(); } else {
if(isset($_POST['register_form'])) {
if(isset($_POST['username']) &&
isset($_POST['password']) &&
isset($_POST['lastname']) &&
isset($_POST['email'])) {
Register();
}
else {
echo 'It seems like some information is missing. Please fill in the whole form.';
}
}
这适用于以下表格:
<form action="" method="post">
<fieldset>
<legend>Register Form</legend>
<input type="text" name="username" maxlenght="32" placeholder="Username"/> <br />
<input type="password" name="password" placeholder="Password" /> <br />
<input type="lastname" name="lastname" placeholder="Last name" /> <br />
<input type="email" name="email" placeholder="Email" maxlenght="1024" /> <br />
<input type="submit" value="Register" name="register_form" />
</fieldset>
</form>
登记表
我知道这是错误的。因为if语句只检查是否存在“Username”、“Password”等表单,而不检查它是否为空。
但我不知道如何检查它是否填写不正确。如果有人能帮我,那就太好了
提前感谢。您可以尝试:
$error = 0;
(isset($_POST['username']) && $_POST['username'] != "") ? $username = $_POST['username'] : $error++;
if($error > 0) echo "error";
这将检查其集合是否为==“”。否则它将返回一个错误标志,您可以稍后检查
这显然需要编辑以适应您的情况
isset()
在这种情况下将始终返回true。如果要检查这些表单值是否为空,请使用empty()
。您可以使用javascript进行验证。对于服务器端验证,您可以编写如下内容:
function validate($value){
if(isset($value) && !empty($value)){
return true;
}else{
return false;
}
}
if(validate($_POST['username']) &&
validate($_POST['password']) &&
validate($_POST['lastname']) &&
validate($_POST['email'])) {
Register();
}
else {
echo 'It seems like some information is missing. Please fill in the whole form.';
}
我知道这很麻烦,但更好的做法是不仅检查它是否已设置,而且确保未传递null。您应该根据问题所在创建错误列表,以便用户更好地理解错误所在
$errors = array( 'error' => true,
'username' => false,
'password' => false,
'lastname' => false,
'email' => false);
if(isset($_POST['register_form'])) {
if(isset($_POST['username']) && $_POST['username'] != ''){
$errors['username'] = true;
}else{
$errors['username'] = 'Please set a username';
}
if(isset($_POST['password']) && $_POST['password'] != ''){
$errors['password'] = true;
}else{
$errors['password'] = 'Please set a password';
}
if(isset($_POST['lastname']) && $_POST['lastname'] != ''){
$errors['lastname'] = true;
}else{
$errors['lastname'] = 'Please set a lastname';
}
if(isset($_POST['email']) && $_POST['email'] != ''){
$errors['email'] = true;
}else{
$errors['email'] = 'Please set an email';
}
}
if($errors === true){
return $errors;
}else{
$errors['error'] = false;
return $errors;
}
return false;
这样,在返回时,您可以使用JS根据php响应打印错误,并使用$errors['error']点作为JS测试,查看它是否需要打印任何错误,如果它为false,则不要这样做。我希望有用于此类检查的函数。对于这种特殊情况,我将使用我的函数进行数组键检查:
function check_key($key, $array) {
if (isset($array[$key]) && (! empty($array[$key])))
return true;
return false;
}
你可以这样使用它:
if(check_key('register_form', $_POST)
if(check_key('username', $_POST) && check_key('password', $_POST)
&& check_key('lastname', $_POST) && check_key('email', $_POST) )
Register();
else
echo 'It seems like some information is missing. Please fill in the whole form.';
首先,你必须确定什么是有效的,然后才能检查它。如果您只想检查空值,请查看类似或可能的内容。
empty()
strlen()==0
=='
任何这些工作trim()
输入也要确保它们不会放在一个或两个空格中。每天我们都会看到这种问题,每次都有数以十亿计的答案和我永远不会接受的实践……不,isset
只会在设置了这些变量(例如,使用示例中的表单)的情况下返回true
;如果通过其他方式调用该文件,则可能不会设置所有变量。这就是为什么我编写的isset()
在这种情况下将始终返回true。当然,我假设他在使用问题中的代码。但是恶意攻击者可能不会使用所有这些变量,并且可能会出现可怕的错误。永远不要相信用户内容!当然,他可以再次检查如果(isset($\u POST)和&&!empty($\u POST))
:)我刚刚在php.net上读到了这篇文章:如果变量不存在,则不会生成警告。这意味着empty()本质上是与!isset($var)| |$var==false。因此,检查empty()
就足够了。还检查变量的可用性,因此无需检查它是否isset
。在这里,我们有一个函数来执行isset检查和非空检查。我使用了这个函数,而不仅仅是设置检查。至于代码更改,我删除了不需要的曲线括号。