2016-12-15 14 views
1

whileループにラジオボタンがあります。質問&の値が1〜5の回答のオプションを表示します。各ラジオボタンの名前は一意である必要があるため、以下のように各ラジオボタンを割り当てます。SQL Whileループ中にラジオボタンを挿入

しかし私の問題は、ans[".$row['id']."]の値をデータベースに挿入する方法です。すでにデータベースを挿入するコードが見つかりましたが、それに応じて変更する方法がわかりません。ありがとう、ありがとう。

表示質問&回答オプション

while ($row = mysqli_fetch_array($sql)) 
{ 
    echo $row['question']; 
    echo "<input type='radio' name='ans[".$row['id']."]' value='1'> 1"; 
    echo "<input type='radio' name='ans[".$row['id']."]' value='2'> 2"; 
    echo "<input type='radio' name='ans[".$row['id']."]' value='3'> 3"; 
    echo "<input type='radio' name='ans[".$row['id']."]' value='4'> 4"; 
    echo "<input type='radio' name='ans[".$row['id']."]' value='5'> 5"; 
} 

これはあなたに多次元配列を与えるだろう、データベースに

$ans = array(); 
    if(is_array($ans)) 
    { 
     foreach($_POST['ans'] as $key1=>$value1) 
     { 
      $ans[]=$value1; 
     } 
    } 

    for($loop = 0; $loop < count($ans); $loop++) 
    { 
     if($ans[$loop]=="" || $ans[$loop]==null) 
      $error=1; 
    } 

    if(isset($error)) 
    $error=1; 
    else 
    $error=0; 

    if($error==0) 
    {  
     for ($i = 0; $i < count($ans); $i++) 
     { 
      //insert sql 
     } 
    } 

答えて

0
$ans = array(); 
foreach($_POST['ans'] as $key1=>$value1) 
{ 
    array_push($ans, [$key1 => $value1]); 
} 

を挿入します。 次に、各行をデータベースに挿入します。

foreach($ans as $value){ 
    // you can access it for example by doing $value[0] (which would be the result of the 1st element) 
    //insert whatever you want in the database! 
} 

あなたは常にあなたの変数の構造をチェックし、あなたがそれになりたいが編集しvar_dumpを使用することができます忘れないでください!

+0

各ラジオボタンの名前がans ["。$ row ['id']。"]に設定されているため、変数名を$ ansとして渡すことはできますか?どうしたらいいですか? –

0

問題を解決する方法を示すダミーデータを含むフォームを作成しました。コードは非常に簡単で文書化されています。

if (sizeof($_POST) == 0) 
{ 
    /* 
    * No data have been submitted yet so let's print the form 
    */ 
    $questions = array("question1", "question2", "question3", "question4", "question4", 
     "question5", "question6", "question7", "question8", "question9", "question10"); 

    echo '<form method="post">'; 
    foreach ($questions as $question) 
    { 
     echo "$v<br/>"; 
     echo "<input type='radio' name='ans[".$question."]' value='1'> 1"; 
     echo "<input type='radio' name='ans[".$question."]' value='2'> 2"; 
     echo "<input type='radio' name='ans[".$question."]' value='3'> 3"; 
     echo "<input type='radio' name='ans[".$question."]' value='4'> 4"; 
     echo "<input type='radio' name='ans[".$question."]' value='5'> 5"; 
     echo "<br/><br/>"; 
    } 
    echo '<input type="submit" value="Submit">'; 
    echo '</form>'; 
} 
else 
{ 
    /* 
    * Data has been submitted so sanitize it, extract it and save it to SQL 
    */ 
    $data = filter_var_array($_POST, FILTER_SANITIZE_STRING); 

    $vals = ''; 
    foreach ($data['ans'] as $question => $answer) 
    { 
     $vals .= "($question, $answer),"; 
    } 
    $vals[strlen($vals) - 1] = ''; // get rid of the last comma 

    $sql = "INSERT INTO your_table_name (question, answer) VALUES $vals"; 

    // now execute $sql with whatever DB driver you use 
    /* 
    * with mysqli it would be like this 
    * 
    * if ($conn->query($sql) === TRUE) 
    * { 
    *  echo "New record created successfully"; 
    * } 
    * else 
    * { 
    *  echo "Error: " . $sql . "<br>" . $conn->error; 
    * } 
    */ 
} 
+0

私はSQLが間違っていることに気付きました。このコードが動作し、ここで結果として得られるSQL文が得られます。私は一度にすべての値を保存するバッチインサートを行い、より速くします。 ラジオボタンがチェックされていないために値がnullの場合、そのラジオボタンは$ _POST配列の一部ではありません。だから我々はそれらを考慮に入れない。 INSERT INTO your_table_name(質問、回答)VALUES(質問1,3)、(質問2,3)、(質問7,3)、(質問8,5) –

関連する問題