【问题标题】:php form get parameters from url and store it until the final pagephp表单从url获取参数并存储到最后一页
【发布时间】:2015-06-14 20:54:07
【问题描述】:

我编写了一个关于电影的简单 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 值。

这就是我在第一个 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”页面,我在其中插入用户信息(例如数据库中的电子邮件、密码和 worker_Id)。我不知道问题是因为我的方法是 post 并且我使用了 _GET?如果是,我该怎么办,因为我认为我不应该更改帖子来获取,因为我必须获得推荐“帖子”的密码。或者,如果问题是因为我必须在索引页中写 "$Worker_id = $_GET["worker"];?

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

【问题讨论】:

  • 真的是worker_Id 而不是worker_id 吗?您的 var 名称的某种标准会有所帮助
  • @Dagon:在我的表中,我将其命名为worker_Id,但我将其存储在Worker_id 变量中

标签: php mysql forms get


【解决方案1】:

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

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

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

    • 将捕获的$_REQUEST['worker'] / $_REQUEST['campaign'] 值设置为每个阶段调查表中的隐藏字段,以便每次到达新页面时(重新)提交它们,并从头到尾传递整个过程,请记住,使用 $_REQUEST 值将始终获取 both/either $_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 -> 作为个人说明,我更喜欢使用单引号来声明数组值

EditIT:向表单添加隐藏值:

<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'];

这意味着表单会在表单提交时发送数据,您不需要在&lt;form action="here"&gt;指定的表单提交字段中添加GET值

【讨论】:

  • 感谢您的完整解释,我会尽力让您知道。谢谢你:)
  • 一遍又一遍地重新阅读您的问题,在我看来,您很可能已将值保存到第一页上的变量中,然后在加载新页面时没有将它们重新保存到新变量中。 PHP 中的每个页面都完全独立于其变量集合中的任何其他页面,除非通过我的答案中提到的数组类型明确传递。 @mOna
  • 我的第一页 (index.php) 包含 2 个表单。 sendEmail.php 的一种形式是我在数据库中插入值的一种。在这个页面中,我包含了另一个 php 页面,它是 checkEmail.php,我在其中写了 $_GET['worker'].. 我想也许我必须在 index.php 中写它??!
  • 是的。或者在你加载的每个页面上使用$_REQUEST,从它​​之前的每个页面收集数据,把它想象成篮球,每次你传球时,别人都必须接住它——接住每次新页面加载时的变量涉及将每个新页面上的变量值设置为 $_GET / $_POST / $_REQUEST / $_SESSION 值。 @mOna
  • 嗯,这就是缺乏信息限制我能说的地方,你有多少页? - 正如我所解释的,您可以在任何/每个页面上使用$_REQUEST,因为它将收集 GET 和 POST 数据。如果你有使用 PHP session 的经验,你可以使用 SESSION,因为你可以在第一页使用它,然后在最后一页调用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
相关资源
最近更新 更多