如何在循环中将会话变量更改为特定变量

时间:2019-07-16 22:25:55

标签: php html

我有一个while循环,可以对数据库中的每门课程(或产品或任何东西)进行分类,在每个经过分类的地方,都有一个创建的按钮,它的作用是将您带到该页面的详细信息页面当然。

所以我已经创建了一个带有course_id的会话并将其存储在其中,然后我尝试将该会话['course_id']更改为每个按钮旁边也会显示的每个课程的ID

$query = "SELECT *  FROM courses ";
$runquery= mysqli_query($conn , $query);
if($runquery){
    while($rows= mysqli_fetch_assoc($runquery)){
            echo $rows['course_name'];
            echo "<center>  <form method='POST' action='courses.php'> <input type='submit' name='button' value='More Details'> </form></center>";
            if(isset($_POST['button'])){
                $_SESSION['course_id'] = $rows['course_id'];
            }
    }
}
echo $_SESSION['course_id'];

我希望当我按下第一个按钮时看到course_id = 1,第二个= 2等。 但将来会随机化,因此首先显示的内容应具有自己的ID,而不仅仅是1,2,3,...

2 个答案:

答案 0 :(得分:1)

在显示课程列表之前,您应该先检查提交的课程ID。我假设您要显示所选课程的特定信息,并且您将课程ID存储在会话中,以便可以重定向到另一个页面来完成此操作。

if (isset($_POST['course_id'])) {
    $_SESSION['course_id'] = $_POST['course_id'];
    // redirect to the course page
}

现在,您不需要一堆不同的表格。您可以使用按钮代替输入,并将所有课程设置为相同形式。如果将课程ID用作按钮的值,则单击按钮的值将是您提交表单时在$_POST中获得的值。

$runquery = mysqli_query($conn , "SELECT * FROM courses");
if ($runquery) {
    echo '<form action="courses.php" method="post">';
    while ($rows = mysqli_fetch_assoc($runquery)){
        echo $rows['course_name'];
        echo "<button type='submit' name='course_id' value='$rows[course_id]'>More Details</button>";
    }
    echo '</form>';
}

答案 1 :(得分:1)

仅是一个基本示例,请考虑了解其工作原理。


您需要2个php文件:

  1. 例如index.php

  2. 例如info.php

在第一个文件中,您需要列出课程,如下所示:

$query = "SELECT * FROM courses";
$runquery = mysqli_query($conn, $query);
if($runquery){
   while($row = mysqli_fetch_assoc($runquery)){
      echo '<a href="info.php?course_id='.$row['course_id'].'">'.$row['course_name'].'</a><br />';
   }
}

在第二个文件中,如下所示:

$query = "SELECT * FROM courses WHERE course_id = ".(int)$_GET['course_id']; // <-- IMPORTANT! Cast it to int to prevent SQL injections.
$runquery = mysqli_query($conn, $query);
if($runquery){
   $row = mysqli_fetch_assoc($runquery);
   print_r($row);
}

尝试一下。