Как получить значения из следующей строки результатов SQL в PHP? - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь узнать что-то новое, пока застрял при блокировке. Я пытаюсь создать очень простую c страницу с несколькими вариантами ответов, используя мои (очень) ограниченные знания PHP / Javascript ...

Так что у меня есть база данных SQL, содержащая вопросы викторины. Основными полями являются вопрос, правильный ответ и три неправильных ответа. В настоящее время в базе данных есть только одна строка.

<?php
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT * FROM quiz_db";
$result = $conn->query($sql);
$row = $result->fetch_assoc();

$conn->close();
?>

Таким образом, вопрос, правильный ответ, три неправильных ответа и все остальное в строке сохраняются в $row.

Далее I Я беру все четыре возможных ответа в массив и затем перетасовываю порядок:

<?php 
$answerslist = array($row["answercorrect"], $row["answerincorrect1"], $row["answerincorrect2"], $row["answerincorrect3"]);
shuffle($answerslist);
?>

Затем я помещаю четыре возможных ответа на набор кнопок в их теперь рандомизированном порядке:

<div class="row">
    <div class="col-sm-3">
        <button id = "answerA" onclick="clickA()" class="answer"><?php echo $answerslist[0]; ?></button>
    </div>
    <div class="col-sm-3">
        <button id="answerB" onclick="clickB()" class="answer"><?php echo $answerslist[1]; ?></button>
    </div>
    <div class="col-sm-3">
        <button id = "answerC" onclick="clickC()" class="answer"><?php echo $answerslist[2]; ?></button>
    </div>
    <div class="col-sm-3">
        <button id = "answerD" onclick="clickD()"  class="answer"><?php echo $answerslist[3]; ?></button>
    </div>
</div>

Вы увидите, что я назначил событие onclick для каждой кнопки. Это выглядит следующим образом:

function clickA() {

var clickedAnswerA = "<?php echo $answerslist[0]; ?>"; // Get the value of the clicked answer

var correctAnswer = "<?php echo $row["answercorrect"] ?>"; // Get the value of the correct answer


if (clickedAnswerA == correctAnswer) {
     document.getElementById("result").innerHTML = "CORRECT!"; 
     document.getElementById("result").style.backgroundColor = "#32CD32";   
} else {
    document.getElementById("result").innerHTML = "WRONG!";
    document.getElementById("result").style.backgroundColor = "#CC0000";
}
}

Существует четыре вышеперечисленных сценария, по одному для каждой кнопки. По сути, я хотел сказать: , если нажатый ответ = правильный ответ, сделайте результат ПРАВИЛЬНЫМ и зеленым, в противном случае НЕПРАВИЛЬНО! и красный

И, к моему удивлению, все это работает как положено!

Для следующего этапа, после вышесказанного, я хотел, чтобы он go соответствовал следующему вопросу в наборе результатов (т.е. следующему вопросу в $row). Но я застреваю. В настоящее время в БД есть только один вопрос, но если я добавлю еще один, я не уверен, как сделать PHP по существу refre sh. Буду очень признателен за любые советы или указатели.

Кроме того, если кто-то может порекомендовать какие-либо улучшения того, что я сделал до сих пор, возможно, для простоты или эффективности, это было бы здорово, спасибо!

1 Ответ

1 голос
/ 29 апреля 2020

1. Не держите все в одном ряду. Имейте отношение между вопросом и ответами:

question
  id | title | ...
   1 | Question 1 | ...
   2 | Question 2 | ...

answer
 id | question_id | content | is_correct
  1 | 1           | Foo     | 1
  2 | 1           | Bar     | 0
  ...

2. Сделайте запрос данных:

$question = $db->prepare('SELECT * FROM question WHERE id = :id')->queryRow([':id' => $id]);
$answers = $db->prepare('SELECT id, content, is_correct FROM answer WHERE question_id = :id')->queryAll([':id' => $id]);

, чтобы вы могли получить столько ответов, сколько вам нужно на вопрос.

3. Привязывайте событие для ваших элементов вместо onClick="", когда каждая функция делает то же самое.

4. var clickedAnswerA = "<?php echo $answerslist[0]; ?>"; принесет больше проблем, чем вы видите сейчас. Старайтесь не смешивать кодовые выходы JS и PHP, поскольку JS не видит никаких PHP, просто выводится (PHP первый выводит код и только позже HTML и JS выполняется)

5. Используйте один PHP l oop для вывода всех ответов вместо написания повторяющегося кода.

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