php - 为始终不同的变量插入语句

标签 php mysql

我有一个页面,在该页面上放置随机测试问题。该数据库包含 200 多个问题。考试中的问题是随机抽取的,共 20 个问题。提交后,我需要为每个问题插入一条记录,其中包含问题编号、用户 ID 和提供的答案。我以前工作得很好,但随着题库的增长以及更改测试的需求的增长,我花了太多时间更改硬编码变量并在处理测试的脚本上插入语句并将结果插入数据库。

$fname=$_POST['EmployeeFirstM'];
$lname=$_POST['EmployeeLast'];
$ruser=$_POST['User'];
$1=$_POST['q1'];
$2=$_POST['q2'];
$3=$_POST['q3'];

变量多达 200 多个。上一页的内容可以是 20 个问题的任意组合。我需要做的是:

$sql="INSERT INTO $tbl_name(empID, empf, empl, QuestionNumber,  AnswerGiven)VALUES('$ruser','$fname', '$lname','1', '$1')";

20 次,无论遇到什么问题。我是否必须为每个可能的问题硬编码 200 多个插入语句,并跳过每次提交中未混合的插入语句?测试的先前版本记录到一个行项目,但我必须不断向表中添加列才能接受更多问题。我认为这效率不高。请并谢谢。

经过多次尝试和错误,这可以将问题 ID 记录到数据库表中。我仍然不知道如何将相应的选定单选按钮输入混合到记录答案中。

foreach( $_POST as $q_id ) {
if( is_array( $q_id ) ) {
    foreach( $q_id as $qid ){
   $sql="INSERT INTO $tbl_name(empID, empf, empl, QuestionNumber,  AnswerGiven)VALUES('$ruser','$fname', '$lname','$qid', '$q')";
$result=mysql_query($sql);
}
}
}

最佳答案

您当然不必为数据库中的每条记录都硬编码值。这种做法违背了建立数据库的初衷之一——将数据与逻辑分离。

为什么有 200 多个变量?当您渲染包含问题的页面时,我想您会从数据库中随机选择 20 个问题,对吧?每个问题都会有某种唯一的 ID,是吗?因此,将问题呈现到页面的结构可能类似于:

<input type="hidden" name="qid[]" value="<?php echo $id ?>" />
<?php echo $question ?>
<input type="text" name="answer[]" />

这将处于某种循环中,其中 $id$question 是从循环中选择的 20 个问题在每次迭代中发生变化的值。数据库。

然后,当表单与答案一起发布时,您将在此处看到您的问题 ID:

$_POST["qid"][]

您的答案在这里:

$_POST["answer"][]

作为数组。添加一些错误检查以确保两个数组都有 20 个值,并且您可以从 0-19 循环将它们插入数据库:

for ($i = 0; $i < 20; $i++) {
    // $_POST["qid"][$i] is the ID of the question being answered
    // $_POST["answer"][$i] is the answer given
    // Sanitize the inputs and insert into the database accordingly
}

关于php - 为始终不同的变量插入语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20790176/

相关文章:

php - 根据购物车数量仅显示一种运费

php - mysqli 标志字段(工作代码)

php - 点击确认框终止 php 表单操作

mysql - 使用 MySQL 从字符串中删除部分字符串,包括特定字符

mysql - 限制 ALTER TABLE 磁盘利用率

mysql - SQL 通过带有 where 或子句的连接表进行选择

javascript - 更改 HTML 表中 td 元素的颜色,然后使用 AJAX 写入数据库

php - 根据另一个数据库字段的数据自动填充数据库字段 50%

php - 自动关闭php与mysql的连接

MYSQL - 无法创建 View