我有一个PHP/mysqli生成的表单,在mysqli查询中使用ORDER BY rand()
来随机化决策任务中的选项(使用这里找到的代码)。
我想出了一种方法来验证用户输入以匹配预定义的值集(参见链接问题的答案),如果不满足验证条件,将触发页面重新加载。但是,这会导致使用不同的随机顺序生成表单表。我想显示表单表在相同的顺序在第一页加载使用php。此外,我想在输入字段中echo
用户输入的值(这样用户就可以看到他/她输入的内容)。
是否有一个相对简单的方法我可以做到这一点?我已经研究过使用多维数组和存储$_SESSION
中的数据,但没有一个解决方案似乎适用于这个问题。
我设计了一种方法,使用基于另一个数组排序多维数组的答案将相同的表输出到原始表,但在验证检查失败时填充用户输入数据。这要感谢PHP 5>= 5.5.0中的array_column
。
if(isset($_SESSION['origVals']) && $_SESSION['origVals'] == true){
$postOrd = array();
foreach($_POST["alt_ord"] as $order){
$postOrd[] = $order;
}
$postId = ($_POST['alt_id']);
$postRnk = array();
foreach($_POST['rank_'] as $inputRnk){
$postRnk[] = $inputRnk;
}
function resToArray($result){
$rws = array();
while($rw = $result->fetch_assoc()){
$rws[] = $rw;
}
return $rws;
}
$postsql = "SELECT id, alttext FROM `altrank`";
$result = $link->query($postsql) or die(mysql_error($link));
$rws = resToArray($result);
$row = array_column($rws, null, 'id');
$rows = array();
foreach ($postId as $k => $id){
$rows[] = $row[$id];
}
for($i = 0; $i < count($rows); $i++){
$rows[$i]['rank'] = $postRnk[$i];
}
$result->close();
unset($_SESSION['origVals']);
这是我想要达到的效果。