我正在构建一个从我服务器上的数据库动态生成的测验Web应用程序。我已经实现了所有的功能,唯一缺少的是让它能够提供多个测验。现在我必须在quiz.php脚本中手动编写代码$quiz_id = 1, $quiz_title = "geography"
才能正确运行。如果我可以为这两个变量生成值,我的quiz.php将适用于多个测验主题。
所以,这就是我的问题:我希望用户能够从测验主题列表中选择(在页面quizlist.php上),点击他们想要的测验的链接,然后将他们带到有测验问题/选择的页面上(在页面quiz.php上)。另外,我想将quizlist.php中的一些值发送到与用户点击的特定链接相关联的quiz.php。我想将quiz_id和quiz_title发送到页面quiz.php,以便提供正确的问题集。
我相信有一种方法可以使用$ _GET或$ _POST,以及使用$ _SESSION。 我的问题是哪种方式更好?我该怎么做?我听说$ _SESSION更安全,但我不确定我是否真的担心这些数据(quiz_id和quiz_title)是安全的。
目前,这是quizlist.php的代码
<?php
// Start the session
require_once('startsession.php');
// Insert the page header
$page_title = 'Quiz List';
require_once('header.php');
require_once('connectvars.php');
// Make sure the user is logged in before going any further.
if (!isset($_SESSION['user_id'])) {
echo '<p class="login">Please <a href="login.php">log in</a> to access this page.</p>';
exit();
}
// Show the navigation menu
require_once('navmenu.php');
// Connect to the database
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
// Determine number of quizes based on title in quiz table
$query = "SELECT * FROM quiz";
$data = mysqli_query($dbc, $query);
// Loop through quiz titles and display links for each
while ($row = mysqli_fetch_array($data)) {
echo '<a href="quiz.php">' . $row['title'] . '</a><br />';
}
mysqli_close($dbc);
// Insert the page footer
require_once('footer.php');
?>
感谢您的帮助!
答案 0 :(得分:5)
使用$_GET
。
首先,您将要更改此行
echo '<a href="quiz.php">' . $row['title'] . '</a><br />';
对于这样的事情:
echo '<a href="quiz.php?id='.$row['id'].'">' . $row['title'] . '</a><br />';
然后在quiz.php
中,使用$_GET['id']
作为主键在数据库中查找相应的测验。
你也应该在那里存储你的测验题目(在数据库中)。
$_GET
在这里是合适的,因为您只是使用ID来确定要显示的测验。这里没有必要保密。当您提交改变数据库的表单数据时,您将使用$_POST
。 $_SESSION
对于存储基本登录信息以及在会话生命周期中必须在多个页面中保留的其他内容非常有用,例如向导表单。
答案 1 :(得分:2)
要将值从一个PHP页面“发送”到另一个页面,您可以使用在URL中发送的会话或GET变量。
会话:
$_SESSION["quiz_id"] = 1;
$_SESSION["quiz_title"] = "geography";
网址:mypage.php?quiz_id=1&quiz_title=geography
$quiz_id = $_GET["quiz_id"];
$quiz_title = $_GET["quiz_title"];
要将值从客户端发送到服务器,您必须使用HTML表单或AJAX。
答案 2 :(得分:0)
首先,一次解决一个问题,首先是问题列表然后进行身份验证。
您应该使用GET,因为:
$_SESSION
用于存储特定于给定用户的行为及其行为和身份验证信息,例如令牌。$_POST
用于修改服务器端的代码(此处只加载数据库中的内容)。 $_GET
用于检索服务器端信息,这正是您的情况。这里加载一个问题并不是一个用户与另一个用户不同的问题。 它不会直接修改服务器端的内容。 这就是你应该使用GET的原因。 使用其他东西会起作用,但这不是正确的方法。
基本上你改变的是:
echo '<a href="quiz.php">' . $row['title'] . '</a><br />';
通过
echo '<a href="quiz.php?q_id='.$row['id'].'">' . $row['title'] . '</a><br />';
在你的quizz页面中,你现在可以知道问题的ID(默认存储在$ _GET [“qid”]中)并随意做任何事情。 这当然可以应用于其他变量。