0

以下のコードに2つの問題があります。

問題1:

questionIdの場合、正しい質問番号が表示されていません。2つの質問があるとしましょう。次に、質問1の場合、questionIdは「1」である必要がありますが、代わりに「3」が表示されます。別の例として、7つの質問がある場合、質問1の場合、questionIdは「1」である必要がありますが、代わりに「8」が表示されます。

これはどのように修正できますか?

問題2:

エコーする質問が複数ある場合でも、$questionsqlは1つの質問のみをエコーし​​ます。何が間違っているのでしょうか。1つの質問だけでなく、すべての質問を表示できますか。

例:

2つの質問がある場合:

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に次のように表示されます。

INSERT INTO Question(SessionId、QuestionId、QuestionContent、OptionId)VALUES('ABV'、 '1'、'What is my name?'、'O6')、('ABV'、 '2'、'What is my age? '、' O9')

ただし、上記は表示されません。代わりに、間違った質問番号が表示され、最後に追加された質問が1つだけ表示されるため、これは正しくありません。

INSERT INTO Question(SessionId、QuestionId、QuestionContent、OptionId)VALUES('ABV'、 '3'、'What is my age?'、'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);

以下はフォームコードです。それがどのように機能するかは、ユーザーがテキストエリアに質問を入力し('name ='questionText')、オプションを入力し(name ='gridValues')、次にそれらをテーブル行に2つ追加します( ='qandatbl')。これが質問1です。次に、2番目の質問、次に3番目の質問などについても同じことを行います。これを注意深く見てください。簡単に理解できます:)

4

2 に答える 2

0

ステートメント$i=0;の直前とループ内で設定しているため、配列の最初の要素だけを作成することになります。switchforeach

心配ない!私はいつもこれをやっています!

于 2012-04-03T23:45:10.373 に答える
0

さて、基本的にここには2つの問題があります。1 つ目は、プライマリ ループのすべてのサイクルで、 をリセットしていることです$i。必要な値を見つけるための重要な方法にする必要があります。

foreach($_POST['questionText'] as $i => $question)
{

   $insertquestion = array();

   $options[] = $_POST['gridValues'];

   switch ($options[$i]){

   ...

gridValuesここでは、入力とquestionText入力が互いに対応していると想定しています。つまり、最初の gridValue には最初の questionText も必要です。

間違っていると思われる 2 番目のことは、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++;

}
于 2012-04-04T00:57:04.987 に答える