我的代码有两个问题如下:
问题1:
对于questionId,它没有显示正确的问题编号。可以说我有两个问题。然后对于问题1,questionId应为'1',而是显示'3'另一个例子是如果我有7个问题,那么对于问题1,questionId应为'1'但它显示'8'而不是。
如何解决这个问题?
问题2:
My $ questionsql只回显1个问题,即使我有多个问题需要回应。我做错了什么,我可以展示所有问题,而不仅仅是一个问题。
示例:
如果我有两个问题:
Question 1:
SessionId QuestionId QuestionContent OptionId
ABV 1 What is my name? O6
Question 2:
SessionId QuestionId QuestionContent OptionId
ABV 2 What is my age? O9
然后在echo $ questionsql中显示:
插入问题(SessionId,QuestionId,QuestionContent,OptionId)VALUES('ABV','1','我的名字是什么?','O6'),('ABV','2','什么是我的年龄?','O9')
但它没有显示上面的内容,而是显示下面的内容不正确,因为它显示错误的问题编号,它只显示1个问题,这是最新添加的问题。
插入问题(SessionId,QuestionId,QuestionContent,OptionId)VALUES('ABV','3','我的年龄是多少?','O9')
更新
下面是代码,如何修复2个问题:
foreach($_POST['questionText'] as $i => $question)
{
$insertquestion = array();
$options[] = $_POST['gridValues'];
switch ($options[$i]){
case "3":
$selected_option = "A-C";
break;
case "4":
$selected_option = "A-D";
break;
case "5":
$selected_option = "A-E";
break;
default:
$selected_option = "";
break;
}
$optionquery = "SELECT OptionId FROM Option_Table WHERE (OptionType = '". mysql_real_escape_string($selected_option)."')";
$optionrs = mysql_query($optionquery);
$optionrecord = mysql_fetch_array($optionrs);
$optionid = $optionrecord['OptionId'];
$insertquestion[] = "'". mysql_real_escape_string( $_SESSION['id'] ) . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '') ."' ,'". mysql_real_escape_string( $_POST['num_questions'] ) ."','". mysql_real_escape_string( $question ) ."','". mysql_real_escape_string( $optionid ) ."'";
$questionsql = "INSERT INTO Question (SessionId, QuestionId, QuestionContent, OptionId)
VALUES (" . implode('), (', $insertquestion) . ")";
$i++;
}
echo($questionsql);
下面是表单代码。工作原理是用户在textarea中输入一个问题('name ='questionText')并在一个选项中输入类型(name ='gridValues'),然后将它们两个追加到一个表行中(表格中的id为id) = 'qandatbl')。这是问题1.然后他们再次对第二个问题做同样的事情,然后是第三个等等。请仔细看看,这很容易遵循:)
答案 0 :(得分:0)
您正在$i=0;
语句之前和switch
循环中设置foreach
,因此您最终只会创建数组中的第一个元素。
不用担心!我一直这样做!
答案 1 :(得分:0)
好的,基本上这里有两个问题。第一个是在主循环的每个循环中,您正在重置$i
。您需要将其作为找到所需值的关键方式:
foreach($_POST['questionText'] as $i => $question)
{
$insertquestion = array();
$options[] = $_POST['gridValues'];
switch ($options[$i]){
...
我假设您的gridValues
输入和questionText
输入相互对应,即对于第一个gridValue,您还需要第一个问题文本。
第二件似乎不对的是你将SQL查询组装成一个数组。您需要做的是为循环的每次迭代单独查询:
$insertquestion = "'". mysql_real_escape_string( $_SESSION['id'] ) . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '') ."' ,'". mysql_real_escape_string( $_POST['num_questions'] ) ."','". mysql_real_escape_string( $question ) ."','". mysql_real_escape_string( $optionid ) ."'";
$questionsql = "INSERT INTO Question (SessionId, QuestionId, QuestionContent, OptionId)
VALUES (" . implode('), (', $insertquestion) . ")";
$i++;
}