- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个页面,在该页面上放置随机测试问题。该数据库包含 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/
我是一名优秀的程序员,十分优秀!