关于全局变量和表单请求的PHP问题

时间:2010-12-21 08:29:42

标签: php global-variables http-post

这可能是一个愚蠢的问题,但无论如何我都会问,我不知道。

我已经编写了基本的PHP代码来提供表单。假设我有一个登录页面,我使用login.php页面提供它,它将在login.html页面中调用,如下所示 -

<form action="login.php" method="post">

由此暗示每个POST都需要自己的php文件,不是吗?这种感觉很奇怪。有没有办法让一个文件,比如code.php,而只是将每个表单作为函数?

编辑:具体来说,我说有5个表单在我的应用程序中一个接一个地使用。登录后,用户执行A,B,C和D任务,每个任务都作为POST请求发送到服务器。因此,我没有A.php,B.php,C.php和D.php,而是希望有一个code.php并将A(),B(),C()和D()作为函数。有没有办法做到这一点?

同样在同一个注释中,我如何处理跨多个表单的全局数组(例如,当前登录用户的数组)?我想这样做而不写入数据库。我知道写入数据库和查询可能更好,但是甚至可以使用全局数组吗?我考虑在一个文件中使用所有表单函数的原因是使用全局数组。

谢谢, - 帕夫

2 个答案:

答案 0 :(得分:0)

没有理由不能将login.html和login.php作为同一个文件。将这两个页面上的代码合并到一个代码块中,然后使用if语句检查表单是否已发布。这是您可以提供表单登录或显示成功完成表单的结果。

Session全局变量将处理您的全局数组问题,但我认为它不适合您的示例。该示例需要在用户登录时存储数据库表,因为没有其他方法可以从其他人的实例更新应用程序实例上的全局变量。

修改

我会使用Session变量来确定表单的完成程度,然后使用switch语句来提供正确的表单:

function a(){
    //process form A
    //if form A okay
        $_SESSION['form_progress'] = 'b';
}
function b(){
    //process form B
    //if form B okay
        $_SESSION['form_progress'] = 'c';
}
function c(){
    //process form C
    //if form C okay
        $_SESSION['form_progress'] = 'd';
}


switch($_SESSION['form_progress']){
    case 'b':
       //serve form B
       break;
    case 'c':
       //serve form C
       break;
    case default:
       //serve form A
       break;
}

希望这有帮助

答案 1 :(得分:0)

当然,没问题,只需将所有表单POST到同一个.php文件中,让它处理所有传入的POST数据。没有什么可以阻止你这样做。

通常,您的表单会发送不同的数据,每个表单都需要一些自定义处理。如果你将所有这些逻辑放在同一个处理程序文件中,那么它将成为一个冗长,混乱的代码片段。如果代码执行不同的操作,最好将代码分成不同的文件。

您可以而且应该将数据库连接处理等常见部分抽象为函数或对象,并在每个POST处理程序中将它们include抽象出来。