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>