Отправка переменных с одной страницы PHP на другую - PullRequest
1 голос
/ 12 октября 2011

Я создаю веб-приложение для викторины, которое динамически генерируется из базы данных на моем сервере. Я в значительной степени реализовал всю функциональность, единственная недостающая часть делает его способным обеспечить несколько тестов. Сейчас я должен вручную написать код $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');
?>

Спасибо за помощь!

Ответы [ 3 ]

5 голосов
/ 12 октября 2011

Используйте $_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 полезен для хранения базовой информации для входа в систему и других вещей, которые должны сохраняться на нескольких страницах в течение всей жизни сеанса, таких как формы мастера.

2 голосов
/ 12 октября 2011

Чтобы «отправлять» значения с одной страницы 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.

0 голосов
/ 12 октября 2011

Прежде всего, займитесь одной проблемой за раз, сначала работающий список вопросов, а затем проверка подлинности.

Вы должны использовать 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 />';

А на странице викторины вы теперь можете узнать идентификатор вопроса (по умолчанию хранится в $ _GET ["qid"]) и делать с ним все, что захотите. Это, конечно, может быть применено к другим переменным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...