gpt4 book ai didi

php - 使用 PHP 从数据库生成 HTML 表单

转载 作者:行者123 更新时间:2023-11-29 05:39:58 25 4
gpt4 key购买 nike

我正在构建一个基本网站,该网站将提供从 MySQL 数据库动态生成的测验。根据我当前的数据库架构,我无法理解如何在测验 Web 应用程序中为不同的问题生成“选择”。

这是数据库模式:

CREATE TABLE user (
user_id INT UNSIGNED PRIMARY KEY,
username VARCHAR(32) NOT NULL UNIQUE,
password VARCHAR(128) NOT NULL,
...
) Engine=InnoDB;

CREATE TABLE quiz (
quiz_id INT UNSIGNED PRIMARY KEY,
title VARCHAR(64)
) Engine=InnoDB;

CREATE TABLE question (
question_id INT UNSIGNED PRIMARY KEY,
quiz_id INT UNSIGNED NOT NULL,
question VARCHAR(1024),
FOREIGN KEY (quiz_id) REFERENCES quiz (quiz_id)
) Engine=InnoDB;

CREATE TABLE question_choices (
choice_id INT UNSIGNED PRIMARY KEY,
question_id INT UNSIGNED NOT NULL,
is_correct_choice TINYINT(1),
choice VARCHAR(512),
FOREIGN KEY (question_id) REFERENCES question (question_id)
) Engine=InnoDB;

CREATE TABLE quiz_response (
response_id INT UNSIGNED PRIMARY KEY,
user_id INT UNSIGNED NOT NULL,
question_id INT UNSIGNED NOT NULL,
response INT UNSIGNED NOT NULL,
is_correct TINYINT(1),
answer_time FLOAT,
UNIQUE KEY (user_id, question_id)
FOREIGN KEY (user_id) REFERENCES user (user_id),
FOREIGN KEY (question_id) REFERENCES question (question_id),
FOREIGN KEY (response) REFERENCES question_choices (choice_id),
) Engine=InnoDB;

这是我目前在 quiz.php 脚本中生成的代码:

// If this user has never taken this quiz, insert empty responses into the quiz_response table
$query = "SELECT * FROM quiz_response WHERE user_id = '" . $_SESSION['user_id'] . "'";
$data = mysqli_query($dbc, $query);
if (mysqli_num_rows($data) == 0) {
//First grab the list of questions to create empty responses
//Grab all questions from question table
//Rework code in the future to accommodate multiple quizes
$query = "SELECT question_id from question";
$data = mysqli_query($data, $query);
$questionIDs = array();
while ($row = mysqli_fetch_array($data)) {
array_push($questionIDs, $row['question_id']);
}

// Insert empty response rows into the response table, one row per question
foreach ($questionIDs as $question_id) {
$query = "INSERT INTO quiz_response (user_id, question_id) VALUES ('" . $_SESSION['user_id']. "', '$question_id')";
mysqli_query($dbc, $query);
}
}

// If the quiz form has been submitted, write the form responses to the database
if (isset($_POST['submit'])) {
// Write the quiz response rows to the response table
foreach ($_POST as $response_id => $response) {
$query = "UPDATE quiz_response SET response = '$response' WHERE response_id = '$response_id'";
mysqli_query($dbc, $query);
}
echo '<p>Your responses have been saved.</p>
}

// Grab the response data from the database to generate the form
$query = "SELECT qr.response_id, qr.question_id, qr.response, q.question, quiz.quiz " .
"FROM quiz_response AS qr " .
"INNER JOIN question AS q USING (question_id) " .
"INNER JOIN quiz USING (quiz_id) " .
"WHERE qr.user_id = '" . $_SESSION['user_id'] . "'";
$data = mysqli_query($dbc, $query);
$responses = array();
while ($row = mysqli_fetch_array($data)) {
// Pull up the choices for each question
$query2 = "SELECT choice_id, choice FROM question_choice " .
"WHERE question_id = '" . $row['question_id'] . "'";
$data2 = mysqli_query($dbc, $query2);
$choices = array();
while ($row2 = mysqli_fetch_array($data2)) {
array_push($choices, $row2);
}
// Rename choices




// Eventually push choices into $responses array
// array_push($responses, $row);
}

mysqli_close($dbc);

// Generate the quiz form by looping through the response array
echo '<form method="post" action="' . $_SERVER['PHP_SELF'] . '">';
echo '<h2>' . $page_title . '</h2>';
$question_title = $responses[0]['question'];
echo '<label for="' . $responses[0][response_id'] . '">' . $responses[0]['question'] . '</label><br />';
foreach ($responses as $response) {
// Only start a new question if the question changes
if ($question_title != $response['question']) {
$question_title = $response['question'];
echo '<br /><label for="' . $response['response_id'] . '">' . $response['question'] . '</label><br />';
}
// Display the choices
// Choice 1
// Choice 2
// Choice 3
// Choice 4


}
echo '<br /><br />';
echo '<input type="submit" value="Grade Me!" name="submit" />';
echo '</form>';

我无法从 question_choice 表中提取选项并使用它们来填充表单。我可以将 choice_id 和 choice 列放入 $responses 数组并在生成表单部分访问它们而不重命名它们吗?在这一点上,我觉得我需要重命名。任何帮助将不胜感激!

最佳答案

希望我没有正确理解您的问题。您似乎在问给定数据结构,您将如何向用户表示选择。

假设您对特定问题 #27801 的选择数据在您的 question_choice 表中如下所示:

choice_id    question_id    is_correct_choice    choice
1 27801 0 Blue
2 27801 0 Green
3 27801 1 Red
4 27801 0 Shoe

在对数据进行标记化之后,您可以将一组选择作为单选组输出,其中 question_id 作为组名称的一部分,choice_id 作为单个值:

<input type="radio" name="27801" value="1" /> Blue  <br />
<input type="radio" name="27801" value="2" /> Green <br />
<input type="radio" name="27801" value="3" /> Red <br />
<input type="radio" name="27801" value="4" /> Shoe <br />

然后在提交测验后,您可以通过遍历每个选项查看 is_correct_choice 的值来确定 $correct_choice_num。如果将 corrent_choice_num 存储在数据库中,就可以避免执行此迭代,但这可能意味着要多一个表。

无论如何,一旦您的脚本具有 $correct_choice_num,您就可以将其与用户选择的选项进行比较。

if ( $correct_choice_num == $_POST["$question_id"] )
{
// This was the correct choice, do something
}

(在服务器端进行评分的好处是用户无法通过查看 HTML 文档的源代码来作弊以找到正确的选择)

这只是一个帮助您入门的示例。希望对您有所帮助!

关于php - 使用 PHP 从数据库生成 HTML 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7523594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com