繁体   English   中英

如何将MySQL表放入会话变量并使用下一页中的表?

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

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

现在这是我的方法:

这是第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>";

不幸的是,到目前为止,这些脚本在page2上都向我返回了错误。 目前,第2页上的表回显仅用于测试和验证该表是否已实际传递。 稍后,我希望能够使用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变量中,以便可以将表放到page2上。

这不可能。

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

您的设计有问题。 这样的表很可能是多余的,您实际上根本不需要它。

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

一一回答您的问题:

您得到的错误
您通常遇到的错误是表名,字段名或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) );
}

请注意,需要JSON.stringify才能将Array设置为输入值。

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

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

希望这能回答您的问题并能解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM