如何将MySQL表放入会话变量中,并在下一页使用该表


How to put MySQL table into session variable and using the table on next page?

我有两个PHP页面。在第1页上,将创建一个临时表,并用mysql数据库中的数据填充该表。我正在尝试将此表存储到$_SESSION变量中,以便将该表放到第2页上。

现在这是我的方法:

这是第1页代码的(一部分):

ob_start();
session_start();
  //Select data from temporary table
$result = mysqli_query($mysqli,"SELECT * FROM table");

//store table into session variable
$_SESSION['fase1result'] = $result;

这是第2页上的代码:

ob_start();
session_start();
$table = $_SESSION['fase1result'];
echo "<table border='1'>
<tr>
<th>ProductID</th>
<th>ProductName</th>
<th>Fase1</th>
</tr>";
while($row = mysqli_fetch_array($table))
{
echo "<tr>";
echo "<td>" . $row['ProductID'] . "</td>";
echo "<td>" . $row['ProductName'] . "</td>";
echo "<td>" . $row['Fase1'] . "</td>";
echo "</tr>";
}
echo "</table>";

不幸的是,到目前为止,这些脚本在第2页给我返回了一个错误。此时,page2上的表的回显只是为了测试和验证表是否真的被传递了。稍后,我希望能够使用MySQL查询进一步向表中添加数据。希望你能帮助我。

更新:
我得到的错误是:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in domain/page2.php on line 32

第2页第32行为:

while($row = mysqli_fetch_array($table))

为了更好地解释我的问题,我发布了另一个问题,可以在这里找到:使用HTML表单的分数修改不同页面上的MySQL表

在第1页上,创建了一个临时表,并用mysql数据库中的数据填充。我正在尝试将此表存储到$_SESSION变量中,以便将该表放到第2页上。

这是不可能的。

而且无论如何都不应该使用。

你的设计出了问题。这样的桌子很可能是多余的,而你实际上根本不需要它。

至于这背后的真正问题,最好再问一个问题,解释一下你决定使用一个在页面之间传递的临时表来完成的现实生活任务。

逐一回答您的问题:

您得到的错误
您通常遇到的错误是由于MySQL查询中表名、字段名或任何其他变量的拼写或引用不正确造成的。在您的情况下,可能是由于调用/存储会话变量不正确。例如,

//Instead of "table", you typed "tabel". This is just an example.
$result = mysqli_query($mysqli,"SELECT * FROM table");

共享您的代码,以便我可以尝试更正此错误。以上只是一个例子。

不建议在会话变量中存储值
假设您的用户填写了表单并进入下一阶段。来自第一阶段的数据通过会话变量传输到第二阶段。如果用户简单地关闭选项卡并重新启动该过程,该怎么办?会话变量仍将被设置,以前的数据可能会干扰新的数据,并可能产生意外的结果。

理想解决方案
最好将值存储在JavaScript数组中,然后通过隐藏输入字段转移到下一页。使用这种逻辑的一些好处是:

  1. 快速性能
  2. 更安全
  3. 易于管理

参考代码
如果您从HTML表单中获取值,那么在POST中获取值非常简单。使用JQuery UI选择,您可以在JavaScript数组中添加所选的值。

//Declare Global JavaScript Variable on Page Load. This will be at the end of <head>
$(document).ready(function() {
    window.fase1result = [];
} );

之后,在每个要将数据添加到下一页的单击事件上,使用以下代码将值添加到此数组。

fase1result.splice(indexOf_to_add, 1, "SelectedValue");

要更好地理解.splice,请单击此处。

一个选择,例如点击Div或链接,将值添加到fase1result,并在提交时使用以下方法将数组值添加到Input Hidden:

在表单的onsubmit上添加一个Javascript函数。

<form id="myForm" method="POST" action="fase2.php" onsubmit="return fase1Values()">

在表格.中添加<input type="hideen" name="fase1values_input" id="fase1values_id">

下面是</body>之前的JavaScript onsubmit函数。

function fase1Values() {
    $( '#fase1values_id' ).val( JSON.stringify(fase1result) );
}

注意,为了将Array设置为输入值,需要JSON.stringify

$decode_fase1result = json_decode( $_POST['fase1values_input'] );

现在,您已经使用数组将fase 1选择数据从第1页传输到第2页,而不将数据存储在任何临时表中。

希望这能回答你的问题,也能解决你的问题。