PHP表单验证错误

PHP表单验证错误,php,forms,validation,registration,Php,Forms,Validation,Registration,早些时候,我从StackOverflow得到了很大的帮助,我还有一个问题 这样做的原因是它总是给出一个错误,即我没有完成所有字段 以下是我的表单函数: // Function with HTML to display form function FormDisplay () { echo '<form action="MyRegister.php" method="post">'; echo 'Username:'; echo '<input type=

早些时候,我从StackOverflow得到了很大的帮助,我还有一个问题

这样做的原因是它总是给出一个错误,即我没有完成所有字段

以下是我的表单函数:

// Function with HTML to display form
function FormDisplay () {
    echo '<form action="MyRegister.php" method="post">';
    echo 'Username:';
    echo '<input type="text" name="username" maxlength="60"><br />';
    echo 'Password:';
    echo '<input type="password" name="password" maxlength="60"><br />';
    echo 'Confirm Password:';
    echo '<input type="password" name="password_confirm" maxlength="60"><br />';
    echo '<input type="submit" name="submit" value="Register"><br />';
    echo '</form>';
}
//使用HTML显示表单的函数
函数FormDisplay(){
回声';
回显“用户名:”;
回声“
”; 回显“密码:”; 回声“
”; 回显“确认密码:”; 回声“
”; 回声“
”; 回声'; }
只要需要注册表单,就会调用此函数

以下是验证用户输入的代码:

// Checks for field completion
function FieldComplete($user, $password, $password_confirm) {
    if (!isset($user, $password, $password_confirm) &&
        $user && $password && $password_confirm != "" || " ") {
        return false;
    } else {
        return true;
    }
}

// Validate fields using isset and FieldComplete (see above)
if(isset($_POST['submit'])){
    $username_original = $_POST["username"];
    $password_original = $_POST["password"];
    $password_confirm_original = $_POST["password_confirm"];

    $IsComplete = FieldComplete($username_original, $password_original, $password_confirm_original);
if(!$isComplete){
   FormDisplay();
   echo "* You did not complete all the required fields." . "<br />";
}
}else{
//display the form
    FormDisplay();
}
//检查字段是否完成
功能字段完成($user、$password、$password\u confirm){
如果(!isset($user,$password,$password\u确认)&&
$user&&$password&&$password_confirm!=“| | |”){
返回false;
}否则{
返回true;
}
}
//使用isset和FieldComplete验证字段(见上文)
如果(isset($_POST['submit'])){
$username\u original=$\u POST[“username”];
$password_original=$_POST[“password”];
$password\u confirm\u original=$\u POST[“password\u confirm”];
$IsComplete=FieldComplete($username\u original,$password\u original,$password\u confirm\u original);
如果(!$isComplete){
FormDisplay();
echo“*您没有填写所有必填字段。”。“
”; } }否则{ //显示表单 FormDisplay(); }
因此,这将正确地显示表单,并且我的所有其他验证都工作正常(此处未显示)

我不确定出了什么问题,自从上次来这里(大约3-4个小时前)以来,我已经搜索了语法和所有内容

感谢您的反馈


-如评论中所述,您的条件不正确。改为:

if(!isset($user,$password,$password_confirm) || trim($user)=='' || trim($password)=='' || trim($password_confirm)==''){
您还有
$IsComplete
$IsComplete
。这与PHP区分大小写不同

简化它并去掉“isComplete”:

if(FieldComplete($username_original,$password_original,$password_confirm_original)){
FormDisplay();
//...

你把验证复杂化了

isset()
对于一个简单的“我的变量是否已实例化”检查非常有用。。。但它会给出空值和0值的误报

下面的示例是使用empty和trim。Trim将删除字符串末端的所有空格,empty将检查它是否为“”、null、0等

希望能有帮助

// Checks for field completion
function FieldComplete($user, $password, $password_confirm)
{
    if (empty(trim($user)) || empty(trim($password)) || empty(trim($password_confirm)))
    {
        return false;
    }
    else
    {
        return true;
    }
}
FieldComplete()将始终返回false,因为:

 if (!isset($user, $password, $password_confirm) &&
        $user && $password && $password_confirm != "" || " ")
由于最后一个逻辑“或”,将始终为真:

如果要验证$user、$password和$password\u confirm是否都已设置、非空且没有一个空格,则需要:

if (!isset($user, $password, $password_confirm) || $user == '' 
     || $user == ' ' || $password == '' || $password == ' ' 
     || $password_confirm == '' || $password_confirm == ' ')
虽然你想要的可能是:

 if (!isset($user, $password, $password_confirm) ||
        trim($user) == '' || trim($password) == '' || trim($password_confirm) == '')

这将确保所有三个都被填充,而不仅仅是空白。

没想到你会像这样链接。。。我对“&&&$user&&&$password&&”的理解应该是“和$user==true,和$password==true”-我想他们都需要$user!='&&&$密码!=''谢谢,我一定会试试的。
 if (!isset($user, $password, $password_confirm) ||
        trim($user) == '' || trim($password) == '' || trim($password_confirm) == '')