PHP:显示来自表单验证的消息

PHP:显示来自表单验证的消息,php,html,forms,validation,Php,Html,Forms,Validation,嗨,我有一个简单的表单和一个验证函数。 当我提交空表单时,不会显示任何错误消息。我做错了什么?是否有更好的解决方案来输出表单验证的错误消息 <?php include "functions.php"; ?> <html> <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post"> <label>Username:</label> <input type="t

嗨,我有一个简单的表单和一个验证函数。 当我提交空表单时,不会显示任何错误消息。我做错了什么?是否有更好的解决方案来输出表单验证的错误消息

<?php
include "functions.php";
?>

<html>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
<label>Username:</label>
<input type="text" name="username">
<br />
<label>Password:</label>
<input type="password" name="password">
<br />
<input type="submit" value="send">
</form>

<span><?php echo $nameErr ?></span>
<span><?php echo $pwErr ?></span>

</html>

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    validateForm();
}

?>


显示错误消息后,您正在调用该函数。 试着在声明之后,回声之前调用它


我也读过Vincent的评论,这是真的,你要么把VAR声明为全局的,要么想想别的我觉得更好的东西:

function validateForm()
{
    var $errors = array();

    if (empty($_POST["username"])) 
    {
        $errors[] = "Name is required";
    }

    if (empty($_POST['password']))
    {
        $errors[] = "Password is required";
    }

    return '<span>'.implode('</span>,<span>', $errors).'</span>';
}


在组装html之前,必须调用函数。如果希望此脚本正常工作,验证代码必须位于脚本的开头

functions.php

function validateForm(&$nameErr, &$pwErr)
{
    if (empty($_POST["username"])) 
    {
        $nameErr = "Name is required";
    }

    if (empty($_POST['password']))
    {
        $pwErr = "Password is required";
    }
}
html

包括“functions.php”;
$nameErr=“”;
$pwErr=“”;
如果(isset($_POST[“username”]))
{
validateForm($nameErr,$pwErr);
}
?>
Functions.php

<?php

    function validateForm()
    {
        $errors = array();

        if (empty($_POST["username"])) 
        {
            $errors[] = "Name is required";
        }

        if (empty($_POST['password']))
        {
            $errors[] = "Password is required";
        }

        return '<span>'.implode('</span>,<span>', $errors).'</span>';
    }

    ?> 

main.php

<?php
include "functions.php";
?>

<html>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
<label>Username:</label>
<input type="text" name="username">
<br />
<label>Password:</label>
<input type="password" name="password">
<br />
<input type="submit" value="send">
</form>


<?php

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    echo validateForm();    
}
?>
</html>


在实例化它之前,您必须在函数中声明
$msg
变量,最重要的是。我使用了一个全局方法在函数中调用它,现在我们可以在我们创建的函数中访问这个变量范围

新的include或require functions.php文件应如下所示:

<?php
$msg = "";
function validateForm($name, $pwd){
    global $msg;    
    if(isset($_POST[$name]) && empty($_POST[$name])){
        $msg .= "Wrong name passed\n";  
    } elseif(isset($_POST[$pwd]) && empty($_POST[$pwd])){
        $msg .= "Wrong password\n"; 
    } else {
        $msg .= "Logged\n"; 
    }   
}
?>
<?php

function validateForm(){
if (empty($_POST["username"])) 
{

   $nameEr = "Name is required";
   $GLOBALS['nameErr']=$nameEr;
}

if (empty($_POST['password']))
{

   $pwEr = "Password is required";
   $GLOBALS['pwErr']=$pwEr;
}
}

?>

html内容和包含部分:

<?php
require_once 'functions.php';
if(isset($_SERVER["REQUEST_METHOD"]) && $_SERVER["REQUEST_METHOD"] === "POST"){
    validateForm('username','password');
}
?>
<html>
<form action="" method="POST">
<label>Username:</label>
<input type="text" name="username">
<br />
<label>Password:</label>
<input type="password" name="password">
<br />
<input type="submit" value="send">
</form>

<span><?php echo isset($msg) ? $msg : NULL; ?></span>

</html>

用户名:

密码:

您必须使变量
$nameErr
$pwErr
validateForm()
内部成为全局变量,因为您希望
在函数外部回显这些变量。函数中的变量没有全局作用域。它只在函数内部工作。将变量设置为全局变量,如下所示:

<?php
$msg = "";
function validateForm($name, $pwd){
    global $msg;    
    if(isset($_POST[$name]) && empty($_POST[$name])){
        $msg .= "Wrong name passed\n";  
    } elseif(isset($_POST[$pwd]) && empty($_POST[$pwd])){
        $msg .= "Wrong password\n"; 
    } else {
        $msg .= "Logged\n"; 
    }   
}
?>
<?php

function validateForm(){
if (empty($_POST["username"])) 
{

   $nameEr = "Name is required";
   $GLOBALS['nameErr']=$nameEr;
}

if (empty($_POST['password']))
{

   $pwEr = "Password is required";
   $GLOBALS['pwErr']=$pwEr;
}
}

?>

还有回声

 <span><?php echo $nameErr ?></span>
 <span><?php echo $pwErr ?></span>


运行
validateForm()
函数后。

也许您必须
echo
您的错误才能显示出来。是的,使用客户端验证(javascript)和服务器端验证(PHP)。@VincentDecaux您的意思是什么?我已经在变量之前设置了一个echo。哦,亲爱的,我没有看到,你必须学习闭包。您的变量不能在函数外使用。Offtopic但是
action=“
没有任何作用,您需要
回显它。这是一条注释,而且是错误的。请不要发布答案。不,正如我们在评论中所说,函数中的变量无法从函数外的代码访问。你可以把你的函数放在顶部,也可以放在底部,它不起作用。看看我编辑的答案,我已经测试过了,而且有效。哇。。。请不要使用全局。这太糟糕了!是的,这很糟糕,但我想你只是想了解这个工作示例,现在我编辑并测试了没有全局变量的示例。你说得对,我忽略了这一点。我现在编辑了我的答案。
<?php

function validateForm(){
if (empty($_POST["username"])) 
{

   $nameEr = "Name is required";
   $GLOBALS['nameErr']=$nameEr;
}

if (empty($_POST['password']))
{

   $pwEr = "Password is required";
   $GLOBALS['pwErr']=$pwEr;
}
}

?>
 <span><?php echo $nameErr ?></span>
 <span><?php echo $pwErr ?></span>