我有一个PHP / mysqli生成的表单,在mysqli查询中使用ORDER BY rand()
来在决策任务中随机化选项(使用找到的代码here)。
我想出了一种方法来验证用户输入以匹配一组预定义的值(请参阅链接问题的答案),如果验证条件不满足,则触发页面重新加载。但是,这导致使用不同的随机顺序生成表单表。我想以与第一页加载使用php相同的顺序显示表单表。另外,我想在输入字段中echo
用户输入值(这样用户就可以看到他/她输入的内容)。
我能以相对简单的方式实现这一目标吗?我已经研究过使用多维数组并将数据存储在$_SESSION
中,但是没有一个解决方案似乎适用于这个问题。
答案 0 :(得分:0)
我找到了一种方法,使用this answer到Sort multidimensional array based on another array将相同的表输出到原始表,但在验证检查失败时填充了用户输入数据。这要归功于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']);
这适用于我想要实现的目标。我欢迎任何有关如何改进此代码的反馈。