我有一个html调查,答案存储在应该通过PHP加载到数据库中的变量中。
例如,这就是你可以在HTML中填写的问题(表格的一部分):
<td style="padding-top: 10px;" colspan="9"> Question1:
<p style="text-align:left;"><textarea name="tag1" cols="80" rows="6"
style="border: 1px solid #D0D0D0;"></textarea></p>
</td>
<td style="padding-top: 10px;" colspan="9"> Question2:
<p style="text-align:left;"><textarea name="tag2" cols="80" rows="6"
style="border: 1px solid #D0D0D0;"></textarea></p>
</td>'
PHP代码:
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$tag1 = $_POST["tag1"];
$tag2 = $_POST["tag2"];
$sql = "INSERT INTO survey (tag1, tag2)
VALUES ('$tag1','$tag2')";
if (mysqli_query($conn, $sql)) {
echo "";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}'
所以textarea名称=&#34; tag1&#34; ...在html中将用户的答案加载到PHP的名为tag1的数据库列中。
问题是我无法在PHP INSERT代码中添加太多项目(如tag1,tag2,tag3 ......),因为字符是有限的。
由于我应该包括的问题数量,这是一个问题。如果我创建两个单独的命令,它会加载到数据库中的两个不同的行,这看起来很混乱。一个人的答案应该出现在一行中。 (在phpmyadmin中)
我该如何解决?我应该改变什么?
答案 0 :(得分:3)
对于初学者来说,这不是制作数据库的好方法,因为如果添加问题,您将不得不更新数据库结构。
无论如何,您应该为用户提供ID,以便您可以跟踪来自哪个用户的答案。之后,您可以将ID添加到survey
表中,如果用户回答了其他问题,您只需更新答案即可。
UPDATE survey SET `tag2`='answer' WHERE `user_id` = 0;
答案 1 :(得分:0)
杰罗德夫的回答基本上是正确的。但是,配方略显不完整。
由于查询似乎有长度限制,因此您必须将其拆分为多个查询(除了增加限制之外,实际上并非如此)。
您的表必须具有某种唯一ID(例如主键),必须由第一个查询设置 - INSERT - 可能通过auto_increment
列设置,或者从中复制适当的ID在其他地方。
如果是auto_increment列,则按mysqli_insert_id获取插入行的id,否则,您应该已经拥有它。所有其他查询必须是UPDATE查询,它使用绑定id的WHERE子句。
-- first query
INSERT INTO survey (id, tag1, tag2) VALUES (42, 'tag1', 'tag2');
-- other queries
UPDATE survey SET tag3='tag3', tag4='tag4' WHERE id=42
php中的( YOU ABSOLUTELY DO WANT TO PREPARE QUERIES! ):
$stmt = mysqli_prepare($conn, 'INSERT INTO survey (id, tag1, tag2) VALUES (?,?,?)');
$stmt->bind_param('iss', $id, $tag1, $tag2);
$stmt->execute();
$stmt2 = mysqli_prepare($conn, 'UPDATE survey SET tag3=?, tag4=? WHERE id=?');
$stmt2->bind_param('ssi', $tag3, $tag4, $id);
使用auto_increment primary_key列:
$stmt = mysqli_prepare($conn, 'INSERT INTO survey (tag1, tag2) VALUES (?,?)'); // !
$stmt->bind_param('ss', $tag1, $tag2); // ! <-- no id anymore
$stmt->execute();
$id = $stmt->insert_id; // <--- this is new
$stmt2 = mysqli_prepare($conn, 'UPDATE survey SET tag3=?, tag4=? WHERE id=?');
$stmt2->bind_param('ssi', $tag3, $tag4, $id);
答案 2 :(得分:0)
您需要两个表格,一个用于调查,另一个用于答案,并将调查表与答案相关联。
1数据库结构
调查表
ID
调查名称
日期
答案表
日期
<强> HTML 强>
<table>
<td style="padding-top: 10px;" colspan="9" name="question[]" value ="Question1"> Question1:
<p style="text-align:left;"><textarea name="tag[]" cols="80" rows="6"
style="border: 1px solid #D0D0D0;"></textarea></p>
</td>
<td style="padding-top: 10px;" colspan="9" name="question[]" value ="Question12"> Question2:
<p style="text-align:left;"><textarea name="tag[]" cols="80" rows="6"
style="border: 1px solid #D0D0D0;"></textarea></p>
</td>
<强> PHP 强>
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// assuming the survey id = 10
survey_id = 10;
date = date("Y-m-d");
$question = mysqli_real_escape_string($_POST["question"]);
$answers = mysqli_real_escape_string($_POST["tag"]);
foreach(answers as $key => $val){
$question[$key];
$answers[$key];
$sql = "INSERT INTO Answers (survey_id, question, answer, date)
VALUES ('$survey_id ','$question','$answers','$date')";
}
if (mysqli_query($conn, $sql)) {
echo "";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
并根据调查回答答案
$sql = "SELECT * FROM ANSWERS WHERE survey_id = 10 ORDER BY id ASC"
mysqli_query($conn, $sql)
它将为您检索所有答案
请这是专业的方式。 希望它有所帮助
尝试给我你的反馈。