使用PHP函数验证表单

使用PHP函数验证表单,php,html,forms,function,validation,Php,Html,Forms,Function,Validation,下面的代码在我将它们放入函数之前工作得很好,但我无法找出如何使用我创建的函数使此表单正确工作。我知道我需要传递变量并创建一些适当的主逻辑,但我真的不知道从这里开始该怎么做。最终产品应类似于以下表单: .错误{color:#FF0000;} 留言簿 您需要将函数外部声明的变量定义为全局变量。将此行放在函数的开头,在function result()之后{ 请注意,在函数范围内声明的变量将在函数执行后被删除。您需要声明$user,$email,$noteousidecheck()(只需将它们声明

下面的代码在我将它们放入函数之前工作得很好,但我无法找出如何使用我创建的函数使此表单正确工作。我知道我需要传递变量并创建一些适当的主逻辑,但我真的不知道从这里开始该怎么做。最终产品应类似于以下表单:


.错误{color:#FF0000;}
留言簿

您需要将函数外部声明的变量定义为全局变量。将此行放在函数的开头,在
function result()之后{


请注意,在函数范围内声明的变量将在函数执行后被删除。您需要声明
$user,$email,$note
ouside
check()
(只需将它们声明为全局内部
check()
)阿隆想说的是,所有变量都被捕获在局部范围内,为了避免这种情况,您需要告诉有问题的变量它们属于全局范围。从技术上讲,您不需要首先初始化它们,但这是一种很好的做法

注意,您需要确保您的变量在使用它们的每个函数中都在全局范围内

<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
<title>Guestbook</title>
<meta charset="ISO-8859-1">
</head>

<?php

$userErr = $emailErr = $noteErr = "";
$user = $email = $note = "";

function check(){

    global $user, $email, $note;
    global $userErr, $emailErr, $noteErr;


    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if (empty($_POST["user"])) 
            $userErr = "Please fill out a name.";
        else 
            $user = $_POST["user"];

        if (empty($_POST["email"]))  
            $emailErr = "Please fill out an email.";
        else 
            $email = $_POST["email"];

        if (empty($_POST["note"]))  
            $noteErr = "Please give us your comments.";
        else 
            $note = $_POST["note"];

    }
}       


function display(){

    global $userErr, $emailErr, $noteErr;

print<<<TABLE_BLOCK
<h2>Please Sign Our Guestbook</h2>
<form method="post" action="/"> 
<table>
<tr>
    <td>Name:</td><td><input type="text" size="34" name="user" value=""  /><span     class="error"><br> $userErr</span></td>
</tr>
<tr>
    <td>Email: </td><td><input type="text" size="34" name="email" value=""  /><span     class="error"><br> $emailErr</span></td>
</tr>
<tr>
    <td valign="top">Comments: </td><td><textarea rows="5" cols="25" name="note">   </textarea><span class="error"><br> $noteErr</span></td>
</tr>

<tr>
    <td></td><td></td>
</tr>
<tr>
    <td></td><td align="right"><input type="submit" name="submit" value="submit" /></td>
</tr>
</table>
</form>
TABLE_BLOCK;
}

function result(){

    global $user, $email, $note;

print<<<TABLE_BLOCK
<h2>Your Input:</h2>
<table>
<tr>
<td>Name:</td><td>$user</td>
</tr>
<tr>
 <td>Email: </td><td>$email</td>
</tr>
<tr>
<td valgin="top">Comments: </td><td>$note</td>
</tr>
</table>
TABLE_BLOCK;
}

if(isset($_REQUEST['submit']))    
    check();

display();
result();

?>

</body>

.错误{color:#FF0000;}
留言簿

谢谢您这么快的响应。但我只是尝试了您的建议,不幸的是,没有任何效果。
全局
变量不是这里的解决方案,通常也不是涉及将数据传递到函数的任何问题的解决方案。这里真正的解决方案是用适当的输入和输出重新构造函数。@MikeW实际上是这样的在这种情况下,这是一个可能的解决方案。是的,他也可以通过引用传递。你的观点是什么?@MikeW这对于一个对函数一无所知的初学者来说是一个有效的解决方案。我同意全局变量不是一个最佳实践,但它们在PHP中仍然是一个有效的解决方案,特别是在这个问题的代码中。当然,我更喜欢一个更专业的解决方案每个解决方案。但是,正如阿隆所说,我是一个初学者,我刚刚学习了一些函数,这些函数的确让我感到困惑。你有没有遇到任何类型的错误?输出是什么?你应该更好地避开输出,否则你很容易受到XSS的攻击。这里有很多错误,但大多数情况下你都完全不明白是怎么回事使用函数。看看。把函数想象成一个封闭的盒子:你把东西放在一边(你的参数),然后从另一边出来(你的返回值)。通常不应该有其他方法将某些内容放入函数或将其取出。不要被
全局
变量的明显便利性所诱惑:存在疯狂的方式。当按下提交按钮时,不会从表单中获取任何信息并将其提交到“您的输入”页面。我不知道为什么,但我很确定这与我的函数有关。可以在这里找到输出:我知道这不是最好的方法,但它解决了OP问题。这实际上帮助了很多。谢谢。结果字段现在正在填充,但当字段为空时,我的错误消息不会弹出。我能做什么怎么办?您好,用户,因为您的文本区域标记之间存在间隙:
您的空支票找到了三个“空格”字符,我可以帮您。如果您觉得答案有用,请记住接受。
global $user,$email,$note;
<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
<title>Guestbook</title>
<meta charset="ISO-8859-1">
</head>

<?php

$userErr = $emailErr = $noteErr = "";
$user = $email = $note = "";

function check(){

    global $user, $email, $note;
    global $userErr, $emailErr, $noteErr;


    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if (empty($_POST["user"])) 
            $userErr = "Please fill out a name.";
        else 
            $user = $_POST["user"];

        if (empty($_POST["email"]))  
            $emailErr = "Please fill out an email.";
        else 
            $email = $_POST["email"];

        if (empty($_POST["note"]))  
            $noteErr = "Please give us your comments.";
        else 
            $note = $_POST["note"];

    }
}       


function display(){

    global $userErr, $emailErr, $noteErr;

print<<<TABLE_BLOCK
<h2>Please Sign Our Guestbook</h2>
<form method="post" action="/"> 
<table>
<tr>
    <td>Name:</td><td><input type="text" size="34" name="user" value=""  /><span     class="error"><br> $userErr</span></td>
</tr>
<tr>
    <td>Email: </td><td><input type="text" size="34" name="email" value=""  /><span     class="error"><br> $emailErr</span></td>
</tr>
<tr>
    <td valign="top">Comments: </td><td><textarea rows="5" cols="25" name="note">   </textarea><span class="error"><br> $noteErr</span></td>
</tr>

<tr>
    <td></td><td></td>
</tr>
<tr>
    <td></td><td align="right"><input type="submit" name="submit" value="submit" /></td>
</tr>
</table>
</form>
TABLE_BLOCK;
}

function result(){

    global $user, $email, $note;

print<<<TABLE_BLOCK
<h2>Your Input:</h2>
<table>
<tr>
<td>Name:</td><td>$user</td>
</tr>
<tr>
 <td>Email: </td><td>$email</td>
</tr>
<tr>
<td valgin="top">Comments: </td><td>$note</td>
</tr>
</table>
TABLE_BLOCK;
}

if(isset($_REQUEST['submit']))    
    check();

display();
result();

?>

</body>