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

时间:2015-06-14 20:54:08

标签: php mysql forms get

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

我必须将此网址提供给用户: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,这将被接受  众包系统。 但我不知道为什么我只得到NULL个值。

这就是我在第一个index.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();

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

我知道我的代码有一些问题,因为在我的第一页中我使用了一些表单,所有表单都使用了“post”方法。其中一个表单用于登录,当用户单击“登录”时,操作是“sendEmail.php”页面,其中我插入用户的信息(例如DB中的email,pass和worker_Id)。我不知道问题是因为我的方法是post并且我使用了_GET?如果是的话,我应该怎么做,因为我认为我不应该改变帖子来获取,因为我必须获得建议使用“帖子”的密码。或者,如果问题是因为我必须在索引页面中写“$ Worker_id = $ _GET [”worker“];

我真的很困惑,我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

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

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

  • 您正在为调查的几个阶段多次重新加载index.php页面,然后每次重新加载值时都需要从$ _GET / $ _POST / $ _SESSION / $ _COOKIE数据重新创建,I建议:

    • 将捕获的$_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">

中指定的表单提交字段