while循环和数组导致echo不起作用

时间:2012-04-03 23:32:18

标签: php javascript html

我的代码有两个问题如下:

问题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.然后他们再次对第二个问题做同样的事情,然后是第三个等等。请仔细看看,这很容易遵循:)

2 个答案:

答案 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++;

}