0

ここにjsfiddleがあります。ラジオボタンを選択して[質問の追加]をクリックすると、選択したラジオボタンを示すテーブル行が追加されます。行内の選択を変更できます。

ここで、INSERT VALUESメソッドを使用して、選択したラジオボタンをデータベースのそれぞれに挿入します。

だから私が知りたいのは、これを正しく行う方法で、各行の選択されたラジオボタンを$ _POSTし、INSERTVALUESを使用してそれらを挿入できるようにする方法です。

以下は私が現在持っているphpコードです:('questionText'は'question'列であり、jsfiddleに'questionText'を含めておらず、'gridValues'はjsfiddleに含まれていませんが、実際に各行を選択します。これは、「オプション」列の各行の各テキストボックス値に対するものであるため、テーブルに「質問」列と「オプション」列の2つの列が追加されていると想像してください。

$i = 0;
$c = count($_POST['gridValues']);

$insertquestion = array();

for($i = 0;  $i < $c; $i++ ){

    switch ($_POST['gridValues'][$i]){

    case "3": 
    $selected_option = "A-C";
    break;

    case "4": 
    $selected_option = "A-D";
    break;

    default:
    $selected_option = "";
    break;

    }     

    foreach($_POST['reply'] as $reply) {

     switch ($_POST['reply']){

    case "Single": 
    $selected_reply = "Single";
    break;

    case "Multiple": 
    $selected_reply = "Multiple";
    break;

    default:
    $selected_reply = "";
    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'];  

    $replyquery = "SELECT ReplyId FROM Reply WHERE (ReplyType = '". mysql_real_escape_string($selected_reply)."')";
    $replyrs = mysql_query($replyquery);
    $replyrecord = mysql_fetch_array($replyrs);
    $replyid = $replyrecord['ReplyId'];   

    $insertquestion[] = "'".  
                    mysql_real_escape_string( $_POST['questionText'][$i] ) ."','".  
                    mysql_real_escape_string( $optionid ) ."','".  
                    mysql_real_escape_string( $replyid ) ."'";

}

 $questionsql = "INSERT INTO Question (QuestionContent OptionId, ReplyId) 
    VALUES (" . implode('), (', $insertquestion) . ")";

echo($questionsql);
4

1 に答える 1

2

あなたのjsfiddleで、新しく作成された各ラジオボックスがreply1とreply2のように作成されることに気づきました。

しかし、PHPコードでは、配列であるかのようにループしているように見えます。

投稿値のprint_rを実行すると、次のようになります。

Array ( [reply1] => Single [reply2] => Multiple )     

したがって、それらは配列形式ではありません。POSTリクエストに含まれる値がラジオボタンのみの場合は、POST配列の値をループできます。

とにかくここにあなたがあなたの投稿リクエストをループするための可能な解決策があります。jsfiddleの例に基づいています。おそらく、実際のコードに合わせて調整する必要があります。ただし、重要なのは、ラジオボタンの名前がandのようになっていることに注意することreply[0]ですreply[1]。PHPは、likeという名前の値を配列に変換することを知っています。

<?php

//This is what your values will look like. Notice that they are in array format now
print_r($_POST);

foreach($_POST['reply'] as $reply) {
    //Now you can loop through your replies correctly.
}

?>

<!-- Quick Example of how to name the radio buttons -->
<html>
<head></head>
<body>
<form method="post">
Row 1<br />
<input type="radio" value="Single" name="reply[0]" /> Single 
<input type="radio" value="Multiple" name="reply[0]" /> Multiple

<br />Row 2<br />
<input type="radio" value="Single" name="reply[1]" /> Single 
<input type="radio" value="Multiple" name="reply[1]" /> Multiple
<br />
<input type="submit" value="Submit" />
</form>
</body>


これが返信専用に書き直された上記のコードです。データがどのようにフォーマットされているか、またはデータが実際にどのようになっているのかわからなかったため、他のものは省略しました。なぜテキストの代わりにラジオボックスの値にIDを使用しないのか疑問に思います。そうすれば、データベースにクエリを実行し続ける必要はありません。すべての応答タイプを照会して、そのようなIDと照合することができます。

<?php

$insertquestion = array();

foreach($_POST['reply'] as $reply) {

    switch ($reply){

    case "Single": 
    $selected_reply = "Single";
    break;

    case "Multiple": 
    $selected_reply = "Multiple";
    break;

    default:
    $selected_reply = "";
    break;

    $replyquery = "SELECT ReplyId FROM Reply WHERE (ReplyType = '". mysql_real_escape_string($selected_reply)."')";
    $replyrs = mysql_query($replyquery);
    $replyrecord = mysql_fetch_array($replyrs);
    $insertquestion[] = $replyrecord['ReplyId'];       
}

$questionsql = "INSERT INTO Question (ReplyId) 
    VALUES (" . implode('), (', $insertquestion) . ")";

echo($questionsql);

これは、forループを使用することを除いて基本的に同じです。あなたはforeachループに精通していないと思います。ただし、この場合、forループの方が適している場合もあります。

<?php

$insertquestion = array();

for($i = 0; $i < count($_POST['reply']), $i++) {

    switch ($_POST['reply'][$i]){

    case "Single": 
    $selected_reply = "Single";
    break;

    case "Multiple": 
    $selected_reply = "Multiple";
    break;

    default:
    $selected_reply = "";
    break;

    $replyquery = "SELECT ReplyId FROM Reply WHERE (ReplyType = '". mysql_real_escape_string($selected_reply)."')";
    $replyrs = mysql_query($replyquery);
    $replyrecord = mysql_fetch_array($replyrs);
    $insertquestion[] = $replyrecord['ReplyId'];       
}

$questionsql = "INSERT INTO Question (ReplyId) 
    VALUES (" . implode('), (', $insertquestion) . ")";

echo($questionsql);
于 2012-04-09T01:33:27.600 に答える