2016-05-24 10 views
3

私は、質問質問ページを生成しており、データベースから質問があります。質問の種類に応じて、HTML入力タイプの変更:配列インデックス付きPHP掲示板

<?php 
$query = "select q_id,qtext from questions order by q_id "; 
$result = mysqli_query($conn, $query); // replaced with procedural mysqli 
if (mysqli_num_rows($result) == 0) 
    $flag = 1; 
else { 
    if (!$result) 
     $result_list = array(); 
    while ($row = mysqli_fetch_array($result)) { 
     $result_list[] = $row; 
    } 
    $i = 0; 
    foreach ($result_list as $row) { 
     $q_id[$i] = $row[0]; 
     $qtext[$i] = $row[1]; 
     $i++; 
    } 
} 
?> 
<form action="action.php" method="post" name="form"> 
    <?php 
    for ($j = 0; $j < $i; $j++) { 
     unset($res_list); 
     switch ($qtype[$j]) { 

      case text: 
       echo " <textarea name='qno[$j]'></textarea><br/>"; 
       break; 

      case checkbox: 

       for ($l = 0; $l < 3; $l++) 
        echo "<input type='checkbox' name='qno[$j]' > <label> $l </label>"; 
       break; 
     } 
    } 
    ?> 

</form> 

form.php

このページでは正常に動作しています。しかし、私はこのデータを$ _POSTで得ることはできません。ここで私は私の入力にどのような名前を

<?php 

for ($j = 0; $j <= $no_of_ques; $j++) { 
    $answer[$j] = $_POST['qno'][$j]; 
    echo $answer[$j]; 
} 
?> 

action.php

を与えるべきであり、どのように私は、POSTを経由してそれらを得る必要がありますか?

+0

のすべてのデータをフェッチするために、次のコードスニペットを実行してみてください。 – billynoah

+1

あなたの入力にエラーがあります。 'name = '=' qno [$ j] ''は 'name =' qno [$ j] '' – Justinas

+0

でなければなりません。謝罪します。 –

答えて

1

一見したところで、コードには何も問題はありません(最新の編集以降)。print_r($_POST)をデバッグして、実際に投稿データに含まれているものを確認してください。

次にあなたがaction.php

foreach ($_POST['qno'] as $i => $answer) { 
    echo "Answer Number $i: $answer"; 
} 
+0

何か問題があります.2番目のケースでは、 "name"属性が間違っています(一重引用符と二重等号) –

+0

print_r($ _ POST)は 'array()'として出力します。 また、foreach()に対して無効な引数が指定されていることを警告します。この前に$ iで何かする必要がありますか? –

+0

array()が出力の場合、フォームはデータを送信していません。もちろん、$ _POST ['qno'] 'が存在しなければそれを反復することはできません。したがって、警告です。 – billynoah

0

でこのようforeachループでより簡単に答えを反復処理することができます私はこのループは、それがために常に同じ名前を与える問題

for ($l = 0; $l < 3; $l++) 
        echo "<input type='checkbox' name='='qno[$j]' > <label> $l </label>"; 

を持っていると思いますすべての3つの要素

すべての値がqno[$j][$l]

1

私はあなたの問題を解決しなければならないアドバイスの3枚:

1)で述べたように、ますprint_rのデバッグ出力を($ _ POST)スクリプトが

2を受信して​​いるものを確認するために)実際のスクリプトの生成を確認してくださいフォームにエラーがない場合、これを行う1つの方法は、生成されているHTMLコードを見て、すべての値がそこにあることを確認することです。

3)バグが解消されない場合は、コードを簡略化してください。あなたが持っているもののコピーを保存し、期待どおりに動作するまで余分なものを削除し続けます。私はリバースエンジニアリングというよりは、単に何かが間違っていたかを知るために、いくつかのステップを後ろ向きに進めています。

forループを入れ子にしたり、switch文の中で別のforループの中にネストしたりすることについての注意点は、最も優れたコーディング方法ではありません。間違いなくデータベースから質問を受け取り、フォームにダンプする簡単な方法があります。

代替案の1つの提案は、質問とデータのタイプを与えられたヘルパー関数の形式に質問をフォーマットさせることです。例えば。 formatQuestion($タイプ、$データ)

+0

それは助けました。ありがとう! –

1

だけでなく、私は以下の正確なデータを持つあなたの質問はあなたを助けるために、私のサンプルコードで見つからない -

form.php

<?php 
$result_list = array(0 => 'QuestionId', 1 => 'QuestionText'); 
$q_id = $result_list[0]; 
$qtext = $result_list[1]; 
?> 

<form action="action.php" method="post" name="form"> 
    <?php 
    $qtype = array(0 => 'text', 1 => 'checkbox'); 
    $i = 2; 
    for ($j = 0; $j < $i; $j++) { 
     unset($res_list); 
     switch ($qtype[$j]) { 
      case text: 
       echo " <textarea name='qno[$j]'></textarea><br/>"; 
       break; 

      case checkbox: 

       for ($l = 0; $l < 3; $l++) 
        echo "<input type='checkbox' name='qno[$j]' > <label> $l </label>"; 
       break; 
     } 
    } 
    ?> 
    <input type="submit" value="submit"> 
</form> 

アクション。PHPソリューションとして、あなたのコードスニペットを参照を通して

<?php 
echo '<pre>'; 
print_r($_POST); 
?> 
2

は、キーQNOは、それに対応する値で存在していることを観察し、その出力の中に、var_dump($_POST)の出力を調べてください。

あなた `ますprint_r($ _ POST)` `$場合_POST`は何が含まれていますか?QNOキー

for($i =0 ; $i < count($_POST['qno']) ;$i++) { 
    echo $_POST['qno'][$i]; 
} 
関連する問題