从动态生成的列表在PHP网页之间传递数据


Passing data between PHP webpages from a dynamically generated list

我有一个PHP代码,它在如下表单中生成一个动态列表,请注意,该列表是从数据库动态构建的:

echo '<form name="List" action="checkList.php" method="post">';
while($rows=mysqli_fetch_array($sql))
{
echo "<input type='password' name='code' id='code'>";
echo "<input type='hidden' name='SessionID' id='SessionID' value='$rows[0]' />";
echo "<input type='submit' value='Take Survey'>";
}

我需要的是,当用户单击该行的按钮到另一个页面时,将与该用户选择相对应的数据POST。如果我们使用带有查询字符串的超链接,则不会有问题,因为我将使用GET请求从另一个页面接收数据,并且当向用户显示超链接时,超链接将是静态的。此外,我还需要从文本框中获得用户输入,这只有在POST请求时才可能实现。

简单地从另一个页面(checkList.php)我需要这些数据进行进一步处理:

$SessionID=$_POST['SessionID'];
$Code=$_POST['code'];

由于我有一个while循环来生成字段,所以我总是从数据库中接收最后一个条目,而不是与用户从LIST中选择的行(行)相对应的条目。

我建议您清理变量的名称,以便您的代码可以至少告诉我们它应该做什么。应该很少有人查看你的代码在试图了解自己想要实现的目标时遇到了很多困难:P,尤其是在你需要帮助的时候;]。我将尝试一些事情,希望它能让你更容易理解你想做的事情,也许能给你答案。

最好尽量不要在脚本中不必要地回显大量HTML,所以首先我要删除从不需要的地方发出回声。

其次,我将使用一个mysql函数,它返回一个更易于处理的结果。$user = mysqli_fetch_assoc($sql)

第三,我不知道有名字的表单是否真的对php的后端或前端有任何作用,所以我只是要删除一些浮动的多余外壳,这些外壳要么是无效的HTML或者只是没有为你向我们展示的内容增加任何价值。

是的,我们"注意到"你正在从数据库中构建一些东西,因为代码看起来确实=p。

我也很难过,没有看到其他答案中关于编码风格的建议,也没有看到任何关于像这样回显html的建议:(.

<?php while($user = mysqli_fetch_assoc($sql)): ?>
<form action="checkList.php" method="post">
    <input type='password' name='code' value='<?php echo $user['code'] ?>' />
    <input type='hidden' name='SessionID'  value='<?php echo $user['id'] //Whatever you named the field that goes here ?>' />
    <input type='submit' value='Take Survey' />
</form>
<?php endwhile; ?>

我不确定这是正确的

echo '<form name="List" method="post">';
while($rows=mysqli_fetch_array($result))
{
echo "<input type='password' name='code' id='code'>";
echo "<input type='button' value='Take Survey' onclick=show($rows[0])>";
echo "<br>";
}

和javascript

<script>
function show(id)
{
alert(id);
window.location="checkList.php?id="+id;
}
</script>

在checkList.php 上

$id=$_GET['id'];
echo $id;

您只需在checkList.php中检查$_POST['code']是否存在,如果存在,则检索将从数据库生成的$_POST['SessionID']。但有一件事,如果你在一个表单中有所有隐藏字段,它们都会被发送,所以你需要考虑如何纠正这一点——也许每个隐藏字段都有单独的表单,提交按钮,也许还有其他POST字段。之后,您将能够以您需要的方式获取数据-$SessionID=$_POST["SessionID"];我想这是解决这个问题最简单的方法。

您可以尝试以下操作:

while($rows=mysqli_fetch_array($sql))
{
$index = 1;
echo "<input type='password' name='code' id='code'>";
//Attach $index with SessionID
echo "<input type='hidden' name='SessionID_$index' id='SessionID' value='$rows[0]' />";
echo "<input type='submit' value='Take Survey'>";
}

在checkList.php 上

 <?php 
  $num = explode('_', $_POST['SessionID']);
  $num = $num[1];
  //in $num you will get the number of row where you can perform action
 ?>
$form = 1;
while($rows=mysqli_fetch_array($sql))
{
echo '<form name="List_$form" action="checkList.php" method="post">';
echo "<input type='password' name='code' id='code_$form'>";
echo "<input type='hidden' name='SessionID' id='SessionID_$form' value='$rows[0]' />";
echo "<input type='submit' value='Take Survey'>";
echo '</form>';
$form++;
}