Я создаю веб-приложение для викторины, которое динамически генерируется из базы данных на моем сервере. Я в значительной степени реализовал все функциональные возможности, единственный недостающий кусок делает его способным предоставлять несколько викторин. Прямо сейчас мне нужно вручную записать код $quiz_id = 1, $quiz_title = "geography"
в скрипте quiz.php, чтобы он работал правильно. Если я могу сгенерировать значения для этих двух переменных, мой 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'); ?>
Спасибо за помощь!
Используйте $_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
подходит здесь, потому что вы просто используете идентификатор, чтобы определить, какую викторину отображать. Здесь нет необходимости в конфиденциальности. Вы будете использовать $_POST
когда вы отправляете данные формы, которые изменяют базу данных. $_SESSION
полезна для хранения базовой информации для входа и других материалов, которые должны сохраняться на нескольких страницах в течение всего сеанса, например, формы мастера.
Чтобы «отправить» значения с одной страницы PHP на другую, вы можете использовать сеансы или переменные GET, отправленные в URL.
Сессии:
$_SESSION["quiz_id"] = 1; $_SESSION["quiz_title"] = "geography";
URL: mypage.php?quiz_id=1&quiz_title=geography
$quiz_id = $_GET["quiz_id"]; $quiz_title = $_GET["quiz_title"];
Чтобы отправить значения от клиента к серверу, вам нужно будет использовать HTML-форму или AJAX.
Прежде всего, сначала займите одну проблему, сначала включите список вопросов, а затем аутентификацию.
Вы должны использовать 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 теперь вы можете узнать идентификатор вопроса (сохраненный по умолчанию в $ _GET ["qid"]) и делать с ним все, что вы хотите. Это, конечно, может быть применено к другим переменным.