我一直在寻找发现这种情况的原因,但无济于事。我有一个两步过程来根据选中的复选框更新mySQL数据库中的特定行(以批准时间表)。在第一个屏幕中,用户检查与她或他想要更新的时间表相关联的任何复选框。在下一个屏幕上,我显示与这些复选框关联的行,一个确认页面 - 如果您愿意的话。在此确认页面上,我成功设置并回显了一个数组,该数组只是$ _POST复选框数组的副本,称为“approvebox”。尽管如此,我似乎无法在创建它的“if($ _ POST)”块之外的任何地方使用此数组。
以下是与创建第一页相关的代码,用户必须在其中检查她/他希望批准的每个时间表的复选框:
if($_POST['submit']){
...
...
while ($row = mysqli_fetch_assoc($tblresults)){
echo "<tr>";
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['timesheetsid'] . "</td>";
echo "<td>" . $row['unixstamp'] . "</td>";
echo "<td>" . $row['total_hours'] . "</td>";
echo "<td>" . $row['coordinatorid'] . "</td>";
echo "<td>" . $row['status'] . "</td>";
echo "<td>(<a href='./currenttimesheets.php?timesheetsid=" . $row['timesheetsid'] . "'>View</a>)</td>";
echo "<td>       <input type='checkbox' name='approvebox[{$row['timesheetsid']}]' value='{$row['timesheetsid']}' /></td>";
echo "</tr>";
}
以下是我成功设置并回显数组的代码,该数组是$ _POST approvebox数组的副本。另外值得注意的是,我实际上在foreach循环中使用if($ _ POST ['submit'])块中的approvebox数组来填充用户从前一个屏幕中选择的结果行:
if($_POST['appove']){
...
...
foreach ($_POST['approvebox'] as $approvebox){
...
...
while($row = mysqli_fetch_assoc($tblresults)){
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['timesheetsid'] . "</td>";
echo "<td>" . $row['unixstamp'] . "</td>";
echo "<td>" . $row['total_hours'] . "</td>";
echo "<td>" . $row['coordinatorid'] . "</td>";
echo "<td>" . $row['status'] . "</td>";
echo "<td>(<a href='./currenttimesheets.php?timesheetsid=" . $row['timesheetsid'] . "'>View</a>)</td>";
echo "</tr>";
}
}
echo "</table>";
print_r($_POST);
$selectedtimesheets = array();
$selectedtimesheets2 = array_merge($selectedtimesheets, $_POST['approvebox']);
//$selectedtimesheets2 is successfully set to the $_POST array here
print_r($selectedtimesheets2);
最后,这是第二个if($ _ POST)块,其中我尝试使用$ selectedtimesheets2数组,但是没有成功,它不会回显任何东西:
if($_POST['accept']){
print_r($_POST);
//$selectedtimesheets2 does not get echoed out, despite being successfully set and echoed previously..
print_r($selectedtimesheets2);
echo $selectedtimesheets2;
答案 0 :(得分:1)
听起来你正在做两个请求。在第一次请求之后,超级全球_POST
中的任何内容都不会出现在下一个请求中。
要在请求之间保留数据,您可以使用PHP sessions。
您可以执行以下操作:首次请求时,将该数组保存到会话中:
session_start();
$_SESSION["selectedtimesheets2"] = array_merge($selectedtimesheets,
$_POST['approvebox']);
然后在您的下一个请求中,您可以检索它:
$selectedtimesheets2 = $_SESSION["selectedtimesheets2"]
这有意义吗?这非常粗糙,我建议使用像Symfony,Laravel或Lumen这样的框架,具体取决于项目的大小。 HTTP请求已被抽象化,操作起来更容易/更安全。另请查看HTTP foundation package from Symfony。
答案 1 :(得分:-1)
不应该print_r($_POST);
print_r($_POST['approve']);