关于这个问题如何把MySQL表为会话变量,并使用下页表? ,我想解释什么,我想在这里做。
我有一个网站,其中包含一个形式,通过它用户可以回答问题。 在表格最后,我们的目标是建议用户哪些产品是最适合他们。
这个建议是通过要求用户几个不同的问题来实现的。 根据他们提供什么答案,产品在MySQL表列表将被分配点数。 在表格最后,积分最高的产品ID将成为赢家,因此将是最适合用户的产品。
在该说明中,我将只使用2个问题。 第一个问题是所谓的“阶段1”。 第二个问题是所谓的“阶段2”。
第1阶段:一个HTML网页表单与无线电箱输入为用户提供了多个值之间选择。 根据已经通过无线电箱输入的值,从现有的表中的某个列被插入到在新创建的临时表名为“阶段1”列中。 该临时表被命名为“忠告”。 列1阶段包含了不同的产品点的列表。
因此,这是发生了什么形式的第1阶段的一步一步的解释:
- HTML单选框中输入为用户提供了4个值之间的选择。
- 临时表(名为:“忠告”)与下面的列上创建:“产品ID”,“产品名称”,“阶段1”,“2阶段”
- 列产品ID和产品名称是通过对产品的数据填补。 这个数据是从名为“Computers_F1”现有的表提取。
那么用户回答问题“”阶段1" 之后会发生什么?
- 取决于哪个无线电盒值由用户输入,柱阶段1通过柱“1”“2”“3”或“4”,其数据来自名为“Computers_Phase1”现有的表进行更新。
- 临时表现在包含三个填充柱。 “产品ID”,“产品名称”和“阶段1”。
但愿这一切是有道理的,直至现在。 阶段2,它包含了第二个问题,基本上应该做同样的事情,阶段1。 需要注意的是第二阶段将于下一个HTML页面上,与被服务的一种新形式,然后输出到phase2.php。 然而,这意味着该临时表的意见“,需要从phase1.php传给phase2.php。 所以,这其实是我的问题,到现在为止。 因为很显然,PHP不允许的MySQL SELECT查询被存储到$ _SESSION变量。 我已经考虑节约的意见“表的一个PHP数组的内容。 然而,这种方法的缺点是,我不能使用MySQL查询了修改表中的阶段2。
我需要能够在使page2.php脚本修改表的意见“。 因为我想经过几个不同的问题,以进一步增加列这是必要的。 在所有的问题最后,我想创建一个名为“合计”栏。 在此列中的值将是值的“阶段1”的总和,“阶段2”等。 那么,到底在“合计”得分最高的行会,是最适合用户的产品。
希望你们能帮助我这一个。 也许有一些错误与系统的设计。 关于如何提高系统的建议,将不胜感激。
简短的回答是:在会话中存储不是数据,但只有用户的选择。
在最后一页上做所有的计算。
正确答案:临时表应该是最后的希望采取行动。 必须只用是否可以使用任何常规的RDBMS机制。
最有可能你的逻辑可以以标准的连接映射。 但是,这是不可能告诉更多的逻辑仍是未知数。
虽然我已经回答了这个之前对主要问题,这里又是答案。
一个回应你的问题之一:
错误你得到
你通常得到的错误是不正确的拼写或表名的参考,字段名或MySQL查询任何其他变量的结果。 根据你的情况,很可能是由于不正确的呼叫/存储您的会话变量。 例如,
//Instead of "table", you typed "tabel". This is just an example.
$result = mysqli_query($mysqli,"SELECT * FROM table");
分享你的代码,这样我可以尝试拿起这个错误。 以上只是一个例子。
在会话变量中存储的值不推荐
假设你的用户填写表单并移动到下一个阶段。 从第一阶段的数据通过会话变量转移到第二阶段。 如果用户直接关闭标签和重新启动的过程? 会话变量仍然会设置和以前的数据可以用新的干扰和可能产生意外结果。
理想的解决方案
这是更好地存储在JavaScript数组中的值,然后通过隐藏的输入字段转移到下一个页面。 一些使用这种逻辑的好处是:
- 快速的性能
- 更安全
- 易于管理
参考代码
如果是从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
和上提交阵列值添加到输入通过使用以下隐藏:
添加JavaScript函数在表单的onsubmit。
<form id="myForm" method="POST" action="fase2.php" onsubmit="return fase1Values()">
添加<input type="hideen" name="fase1values_input" id="fase1values_id">
形式。
下面是JavaScript onsubmit
之前功能</body>
function fase1Values() {
$( '#fase1values_id' ).val( JSON.stringify(fase1result) );
}
需要注意的是JSON.stringify
是为了设置数组作为输入值必需的。
$decode_fase1result = json_decode( $_POST['fase1values_input'] );
现在,已经从第1页转移使用Array的FASE 1选择数据到第2页,而不以任何临时表中存储的数据。
希望这回答了你的问题和解决您的问题,以及。