Ну, у меня есть страница, где я хочу отображать элементы, хранящиеся в базе данных один за другим. Один за другим означает, что при нажатии кнопки должен появиться следующий элемент. (Вопросы - это вопросы, кстати, в моем случае).
Поэтому я написал код для этого. Проблема, которую я получаю, заключается в том, что цикл работает только один раз. Я имею в виду, когда нажимается следующая кнопка, я получаю следующий отображаемый элемент, но затем снова нажимаю "Далее", но ничего не происходит. Вот код..
<?php
session_start();
$connection = mysqli_connect("localhost", "root", "", "oes_db");
$_SESSION['qno'] = 0;
if (!isset($_SESSION['qno']))
$_SESSION['qno'] = 1;
else {
if (isset($_POST['next'])) {
$_SESSION['qno'] += 1;
}
}
$select = "select * from oes_question where que_id='" . $_SESSION['qno'] . "'";
$result = mysqli_query($connection, $select);
if ($result) {
while ($row = mysqli_fetch_array($result)) {
$qno = $row['que_id'];
$question = $row['que_desc'];
$op1 = $row['ans1'];
$op2 = $row['ans2'];
$op3 = $row['ans3'];
$op4 = $row['ans4'];
$answer = $row['true_ans'];
}
}
?>
<html>
<body>
<form name="exam" method="post" action="que.php">
<!--My Current page name is "exam.php" -->
<?php echo $question ?> <br>
<input type="radio" name="question1" value="op1"> <?php echo $op1; ?> <br>
<input type="radio" name="question1" value="op2"> <?php echo $op2; ?> <br>
<input type="radio" name="question1" value="op1"> <?php echo $op3; ?> <br>
<input type="radio" name="question1" value="op1"> <?php echo $op4; ?> <br>
<input type="submit" name="previous" value="Previous">
<input type="submit" name="next" value="Next">
</form>
</body>
</html>
Проблема заключается в вашей третьей строке, всегда, когда вы отправляете форму, ваша сессия является settees в 0 и когда вы суммируете + = 1, всегда ставьте 1.
Пытаться
session_start();
$connection = mysqli_connect("localhost", "root", "", "oes_db");
if (!isset($_SESSION['qno']))
$_SESSION['qno'] = 1; //or 0 if your item start at 0
else {
if (isset($_POST['next'])) {
$_SESSION['qno'] += 1;
}
}
Вы переопределяете $_SESSION['qno']
при каждом вызове страницы с 0
в строке 3. Прежде всего, это делает набор переменных, что означает !isset($_SESSION['qno'])
всегда будет равным false
. Поэтому вы всегда заходите в else
и добавляете 1 к 0, когда у вас $_POST['next']
, что означает каждый раз, кроме первого вызова.
if (!isset($_SESSION['qno'])) {
// first call (no session exists): get first question
$_SESSION['qno'] = 1;
} else if (isset($_POST['next'])) {
// click on next button: increase question ID by 1
$_SESSION['qno']++;
}
// neither first init nor next button: page load with existing session