【问题标题】:How to put MySQL table into session variable and using the table on next page?如何将 MySQL 表放入会话变量并使用下一页上的表?
【发布时间】:2017-01-15 06:19:32
【问题描述】:

我有两个 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 上返回了一个错误。此时page2上的table的回显只是为了测试验证table是否真的传过去了。稍后我希望能够使用 MySQL 查询进一步向表中添加数据。希望你能帮助我。

更新:
我得到的错误是:

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

page2 中的第 32 行是:

while($row = mysqli_fetch_array($table))

为了更好地解释我的问题,我发布了另一个问题,可以在这里找到: Modifying MySQL table on different pages with scores from a HTML form

【问题讨论】:

  • 抱歉忘记了。我已经更新了我的问题。
  • 检查$result有记录吗??
  • $result = mysqli_query($mysqli,"SELECT * FROM table") or die(mysqli_error($mysqli));你看到了什么?
  • mysqli_fetch_array(result,resulttype);你的语法不好
  • 问题不在这里,问题是因为他的查询没有运行,要么是因为 $mysqli 不是到数据库的好链接,要么是因为查询语法错误。

标签: php mysqli html-table session-variables


【解决方案1】:

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

这是不可能的。

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

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

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

【讨论】:

【解决方案2】:

一一回答你的问题:

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

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

分享您的代码,以便我可以尝试解决此错误。以上只是一个例子。

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

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

  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,click here。

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

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

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

在表单中添加&lt;input type="hideen" name="fase1values_input" id="fase1values_id"&gt;。

下面是 &lt;/body&gt; 之前的 JavaScript onsubmit 函数。

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

请注意,JSON.stringify 是必需的,以便将 Array 设置为输入值。

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

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

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

【讨论】:

    猜你喜欢
    • 2015-10-22
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2020-06-13
    • 2018-07-22
    • 2011-08-15
    相关资源
    最近更新 更多