PHP 表单从 URL 获取参数并将其存储到最后一页


php form get parameters from url and store it until the final page

我写了一个简单的关于电影的PHP调查应用程序,我正在使用一个众包服务来收集数据。为了验证和评价工作人员,我必须在最后一页生成VCODE(https://microworkers.com/vcode.php),以便工人可以将其作为完成任务的证明提交。

我必须把这个URL给用户:http://www.yourwebsite.com/start.php?campaign={{CAMP_ID}}&worker={{MW_ID}}

用户将看到这样的URL:(数字由众包网站插入,worker_Id每个工人都是唯一的)http://www.yourwebsite.com/start.php?campaign=AB1234&worker=CD456

现在我的问题:我需要获取参数(广告系列和工作人员 ID)并将它们保留到调查结束。只有这样,我的网站才能生成正确的VCode,该VCode将被接受众包系统。但我不知道为什么我只得到NULL值。

这是我在第一个索引.php页面上收集值的方式:

$Campaign_id = $_GET["campaign"];
$Worker_id = $_GET["worker"];

然后在这个页面之后还有另一个 php 页面,我在其中插入登录值(例如电子邮件或密码),我写道:

$sql = "INSERT INTO MEMBER (worker_Id, password, email, confirmcode) VALUES (:worker_Id, :password, :email, :confirmcode)";
$stmt = $conn->prepare($sql);
$stmt->execute(array(':password' => $password, ':email' => $emailTrimmed, ':confirmcode' => $activation, 'worker_Id' => $Worker_id));
$stmt->closeCursor();

但是当我检查数据库时,它插入了 NULL worker_Id。

我知道我的代码有一些问题,因为在我的第一页中,我使用了一些表单,并且所有表单都使用"post"方法。其中一个表单用于登录,当用户单击"登录"时,操作是"sendEmail.php"页面,我在其中插入用户信息(例如数据库中的电子邮件,通行证和worker_Id)。我不知道问题是因为我的方法是正确的,我使用了_GET?如果是,我该怎么办,因为我认为我不应该更改帖子以获取,因为我必须获取建议使用"帖子"的密码。或者,如果问题是因为我必须写"$Worker_id = $_GET["worker"];在索引页中?

真的很困惑,希望有人能帮到我。

看起来 -

但我可能是错的,所以请澄清任何不正确的假设 - 但看起来这里可能存在几个问题:

  • 获取和发布是不同的。使用 $_REQUEST['var'] 选择 GET 或 POST(我认为在这种情况下 POST 会覆盖 GET 值,如果两者都提供)

  • 在调查的几个阶段多次重新加载索引.php页面时,每次重新加载时都需要从 $_GET/$_POST/$_SESSION/$_COOKIE 数据重新创建值,我建议:

    • 将捕获的$_REQUEST['worker']/$_REQUEST['campaign']值设置为每个阶段的调查表单中的隐藏字段中,以便在每次到达新页面时(重新)提交它们,并从头到尾传递整个过程,请记住,使用 $_REQUEST 值将始终获取/$_GET$_POST数据。
    • 或者,一旦捕获了值(从原始/第一个$_GET子句),将它们设置为$_SESSION变量,然后在最后阶段调用这些变量。

从更广泛的方面来看,运行一些 IF 查询以检查是否仅在设置了$_REQUEST(或$_SESSION,如果选择了该路径)值和/或非空时调用数据库功能。

调试在流程的每个阶段/页面上输出这些值以查看这些值被"丢弃"的位置会很有用。如使用

print_r($_REQUEST);

我们需要看到 PHP 页面详细信息的更完整视图,以便为您提供更具体的建议,但通常检查您的 PHP 错误日志文件(不知道,请尝试error_reporting(E_ALL); ini_set('display_errors', true);页面顶部和/或检查 Stackoverflow 上的各种 PHP 错误日志问题,有很多)。并查看您的错误日志是否返回 SQL 特定错误,例如您的 SQL worker_Id列实际上是数字自动增量,而您给定的示例数据是字母数字。这将导致错误,并且 SQL 不会写入数据行。

无论如何,祝你好运,

PS -> 作为个人说明,我更喜欢使用单引号来声明数组值

编辑:向表单添加隐藏值:

<form>
....
<input type="hidden" name="worker" value="<?php print $Worker_id;?>" >
<input type="hidden" name="campaign" value="<?php print $Campaign_id;?>" >
... 
</form>

从这里开始,任何加载原始 $_GET 或任何表单数据(包括加载上面示例表单的页面)的页面都可以将 $_GET/$_POST 替换为:

$Campaign_id = $_REQUEST['campaign'];
$Worker_id = $_REQUEST['worker'];

这意味着表单将在提交表单时发送数据,您无需将 GET 值添加到 <form action="here"> 中指定的表单提交字段中