在验证失败后重新加载页面,保留SQL生成表单的原始顺序(随机)

时间:2014-05-20 07:31:22

标签: php mysql arrays

我有一个PHP / mysqli生成的表单,在mysqli查询中使用ORDER BY rand()来在决策任务中随机化选项(使用找到的代码here)。

我想出了一种方法来验证用户输入以匹配一组预定义的值(请参阅链接问题的答案),如果验证条件不满足,则触发页面重新加载。但是,这导致使用不同的随机顺序生成表单表。我想以与第一页加载使用php相同的顺序显示表单表。另外,我想在输入字段中echo用户输入值(这样用户就可以看到他/她输入的内容)。

我能以相对简单的方式实现这一目标吗?我已经研究过使用多维数组并将数据存储在$_SESSION中,但是没有一个解决方案似乎适用于这个问题。

1 个答案:

答案 0 :(得分:0)

我找到了一种方法,使用this answerSort 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']);

这适用于我想要实现的目标。我欢迎任何有关如何改进此代码的反馈。