PHP表单验证错误
早些时候,我从StackOverflow得到了很大的帮助,我还有一个问题 这样做的原因是它总是给出一个错误,即我没有完成所有字段 以下是我的表单函数: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=
// 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) == '')