我反复使用一个表单和一个保存页面将用户的答案保存到我的sql数据库中。最初,我将答案保存到一个数组中,一旦达到目标,我就使用一个循环将数组的所有值传递到数据库,更新页面的代码如下所示:
unset($_SESSION['myanswers']);
$_SESSION['myanswers'] = array();
$_SESSION['myanswers']=array(
"File"=>$_POST['file'],
"Rating"=>$_POST['like'],
"Repetitions"=>$_SESSION['reps'],
"degradation"=>$_POST['degradation']
);
$f1=$_SESSION['myanswers']['File'];
$r1=$_SESSION['myanswers']['Rating'];
$r2=$_SESSION['myanswers']['Repetitions'];
$the_id=$_SESSION['user_id'];
$the_deg=$_SESSION['myanswers']['degradation'];
array_push($_SESSION['answers'], $_SESSION['myanswers']);
if($_SESSION['counter']==goal){
require 'connect.php';
foreach( $_SESSION['answers'] as $key => $obj)
{
$f1=$obj['File'];
$r1=$obj['Rating'];
$r2=$obj['Repetitions'];
$the_id=$_SESSION['user_id'];
$the_deg=$obj['degradation'];
$sql = "INSERT INTO `array`(`id`, `file`, `rating`, `repetitions`, `degredation`) VALUES ('$the_id', '$f1', '$r1', '$r2', '$the_deg')";
mysql_query($sql);
}
header("Location: MyEndPage");
die();
}else{
header("Location: MyFormPage");
die();
}
这个代码运行良好,但我需要立即保存所有答案,而不是在达到目标时。所以我把代码改为:
unset($_SESSION['myanswers']);
$_SESSION['myanswers'] = array();
$_SESSION['myanswers']=array(
"File"=>$_POST['file'],
"Rating"=>$_POST['like'],
"Repetitions"=>$_SESSION['reps'],
"degradation"=>$_POST['degradation']
);
$f1=$_SESSION['myanswers']['File'];
$r1=$_SESSION['myanswers']['Rating'];
$r2=$_SESSION['myanswers']['Repetitions'];
$the_id=$_SESSION['user_id'];
$the_deg=$_SESSION['myanswers']['degradation'];
require 'connect.php';
$sql = "INSERT INTO `array`(`id`, `file`, `rating`, `repetitions`, `degredation`) VALUES ('$the_id', '$f1', '$r1', '$r2', '$the_deg')";
mysql_query($sql);
if($_SESSION['counter']==goal){
header("Location: MyEndPage");
die();
}else{
header("Location: MyFormPage");
die();
}
当问题出现时,新条目总是保存在旧数据和新数据之间的同一位置。例如,如果在更改之前我保存了5个条目,那么它们在sql数组中的顺序如下:
1,名称1,数据1
2,名称2,数据2
3,名称3,数据3
4,名称4,数据4
5,名称5,数据5
使用新代码重复添加新条目是有问题的,例如,如果我们添加条目6,7,8,它们是这样添加的:
1,name1,data1|1,name1、data1|1、name1、data 1
2,name2,data2|2,name2、data2|2、name2、data 2
3,名称3,数据3|3,名称34,名称4,数据4|4,名称4.数据4|4.名称4.数据4
5,名称5,数据6|5,名称五,数据6#5,名称五和数据6
6,名称6,数据5|7,名称7,数据7|8,名称8,数据8
---------------------|6,名称6,数据6|7,名称7,数据5
---------------------|--------------------|6,名称6,数据6
出于某种原因,insert into不在sql数组的末尾,而是堆栈在使用旧代码收集的数据的末尾。我试着对代码进行了一些调整,但没有任何效果。
数据库不一定在表的末尾存储新记录。它们还可以重用先前删除释放的空间。
此外,无论出于何种原因,顺序可能看起来是随机的。特别是当您筛选(where子句)或联接其他表时,顺序可能会受到影响,因为MySQL使用特定的索引进行筛选或联接,并且通常会按该顺序返回实际数据。
无论是什么原因,如果您查询数据,您可能会以任何随机顺序获得该数据。如果您需要特定顺序的信息,请通过在查询中添加ORDER BY
子句来强制执行该顺序。