PHP在同一页面中选择具有相同ID的下一个数组值

时间:2019-01-30 16:13:53

标签: php

很抱歉,我问了一个愚蠢的问题,这对PHP来说还很新。我想在同一页面和同一id中选择下一个数组值,因为它们全部来自同一id。介意我是否需要有关此代码的帮助?谢谢!

<?php
//get the id from the view page / search page e.g. url?id=1
    $_SESSION['id'] = $_GET['id'];
    $id = $_SESSION['id'];
    include "backend/connect.php";
    $sqlquestion = "Select * from game_question where game_id_fk = $id";
    $result = mysqli_query($conn,$sqlquestion);
    if(mysqli_num_rows($result)<=0){
    echo "<script>alert('No questions found!');</script>";
}
    while($row = mysqli_fetch_array($result)){
    $question[] = $row['game_question'];
    $qid[] = $row['game_question_id'];
}
?>
<?php
    $current_index = array_search($qid, $question);

    $next = $current_index + 1;
    $prev = $current_index - 1;
?>
<?php if ($prev > 0): ?>
<a href="<?= $id[$prev] ?>">Previous</a>
<?php endif; ?>

<?php if ($next < count($question)): ?>
<a href="<?= $id[$next] ?>">Next</a>
<?php endif; ?>

This is the table schema of game_question

2 个答案:

答案 0 :(得分:0)

警告 将查询参数串联到查询字符串中可能会导致SQL注入,请看here

一种简单的方法是实现某种分页,其中每个页面正好是1个项目长,然后将当前页面作为GET参数传递。 您可以在查询中将其实现为LIMIT子句,如下所示:

$pos = (isset($_GET['pos']) && $_GET['pos']) ? $_GET['pos'] : 0;
$sqlquestion = "
    Select * 
    from game_question 
    where game_id_fk = $id 
    LIMIT 1 OFFSET $pos
";

然后,您必须根据$ pos变量计算上一个和下一个位置,并将它们作为查询参数添加到链接中,例如url.php?id=1&pos=3;

请注意,这种方式的位置从0开始

答案 1 :(得分:0)

我将只查询一次数据库,因此我假设属于一个id的问题数量不是太大。

这样,您可以检索所有结果,然后使用一些前端魔术工具通过next / prev功能显示这些结果。我写了一个示例,其中jQuery提出了您的问题,因此取决于您如何显示它们。

您还可以查看Bootstrap(https://getbootstrap.com/),它具有一些很酷的功能,因此您可以让PHP循环您的问题并编写HTML元素,然后Bootstrap会神奇地显示它

我还向您的查询添加了参数绑定,这将防止某些SQL注入,因此应始终使用

<?php
    //get the id from the view page / search page e.g. url?id=1
    $id = $_SESSION['id'] = $_GET['id'];
    include "backend/connect.php";

    $stmt = mysqli_prepare($con, "SELECT * FROM game_question WHERE game_id_fk = ?");
    mysqli_stmt_bind_param($stmt, "s", $id);
    $result = mysqli_stmt_execute($stmt);

    $questions = array();

    if(mysqli_num_rows($result)<=0){
        echo "<script>alert('No questions found!');</script>";
        die;
    }

    while($row = mysqli_fetch_array($result)){
        $questions[$row['game_question_id']] = $row['game_question'];
    }
?>
<!-- HTML -->

<!DOCTYPE html>

<html>
<head>
<script type="text/javascript">
var questions = <?php echo json_encode($questions) ?>;

$.each(questions, function (i, elem) {
    // do your stuff
});
</script>
</head>
<body>

</body>

以下是带有上一个/下一个按钮的引导程序标签的示例:https://codepen.io/techiegang/pen/QjdgJJ