2012-02-01 12 views
1

達成しようとしているのは、IDと更新内容を更新可能なページに送信することです。コンテンツが正しく表示されます。 しかし、最後の値だけが常にポストされるので、次のページ(updatereview.php)で出力をテストすると何らかの理由で変数が上書きされます。レビューコンテンツごとにIDを送信するにはどうすればよいですか?これまでに以下の私のコードは:あなたは、フォームのアクションを呼んでいたループを介してフォームで複数の値を送信

<?php 
while($row2 = mysql_fetch_array($result2)) 
{ 
    echo"<tr>"; 
    ?><td> <? echo "Comment left for ".$row2['game_name'].", ".$row2['game_platf'] ?> <br /> 
    <form method="post" action="updatereview.php?id=<? echo $row2['review_id'] ?>"> 
    <textarea name= "content" class= "rev" ><? echo $row2['content'] ?></textarea></td> 
    <td><input name="Submit1" type="submit" value="Update" />||</td> 
    <? echo"</tr>"; 
} 
echo "</table>"; 
+0

投稿ごとにレビューまたはすべてのレビューを1つ更新しますか? – Furgas

+0

このコードは、それぞれの更新/削除オプション付きのすべてのレビューを出力します。だから各投稿はレビューID – chucky

答えて

0

方法は、基本的には、フォームの方法は「取得」しました。 ID変数を隠し要素に入れて投稿できるようにします。アクションのURLに置くとidが1つしか得られません。フォームを投稿するとき

これはforeachの中で

<?php 
//use alternate syntax in html pages it's much easier to keep track off 
foreach(mysql_fetch_array($result2) as $row2): ?> 
<tr> 
    <td> 
    <?php echo "Comment left for ".$row2['game_name'].", ".$row2['game_platf'] ?></td><br /> 

    <form method="post" action="updatereview.php"> 

    //add hidden input element and give it the value of the id so it will be part of the $_POST array 
    <td> <input type="hidden" name="id" value="<?php echo $row2['review_id'] ?>" /></td> 

    <td><textarea name= "content" class="rev" ><?php echo $row2['content'] ?></textarea></td> 

    <td><input name="Submit1" type="submit" value="Update" />||</td> 
    </form> 
</tr> 

<?php endforeach ?> 
</table> 

良いかもしれない今のIDは、$ _POST配列で利用できるようになります。

これも構造化された方法で、各レコードの送信ボタンが表示されます。必要な場合は、ループ外に送信してください。

+0

ありがとうRockyを運ぶ必要があります。それは各レビューのためのURLとPOSTとしてのコンテンツを介してidを送信することを意図しています。 POSTのようにIDをフォームの隠し値として送信すると言ったように私はそれを変更しましたが、最後のレビューだけが表示されます – chucky

+0

まず最初に、データ配列をチェックして、期待するデータがあることを確認します。 2番目のループをチェックし、あなたが望むことをしていることを確認します。それを簡単に保ち、あなたがそれを壊すまで項目を追加してください。 – RockyFord

+0

ボタンの更新と削除が必要な場合は簡単です。フォームの内容をすべて削除し、それぞれに更新/削除アクションへのリンク付きの表セルを追加します。あなたは好きなときにボタンとしてスタイルを設定できます。またリンクでは、あなたはURLのIDを渡す必要があります。これは簡単な質問のように見えますが、あらゆる種類の可能性があります。 – RockyFord

0

これは私が思いついたことです。コードを入れておくと、誰かがより効率的な方法を知っているだけです。 IveはRockyのメソッドを使用しましたが、名前フィールドに配列の値を格納して、上書きの問題を解決しました。私はまだしかし、getを使用すると、隠しフィールドを作る代わりに動作すると思うが、これはうまくいきましたので、私はそれに固執します。 : (私の最善をしようとし、厄介なインデントのため申し訳ありません;))

$n = 1; 
echo "<table>"; 
while($row2 = mysql_fetch_array($result2)) 
{ 
    echo"<tr>"; 
?> 
<td> 
<? 
    echo "Comment left for ".$row2['game_name'].", ".$row2['game_platf'] 
?> 
    <br /> 
    <form method="post" action="updatereview.php"> 
    <textarea name= "content[<?php echo $n ?>]" class= "rev" > 
    <? echo $row2['content'] ?> 
    </textarea> 

    <input type="hidden" name="review_id[<?php echo $n ?>]" value=<?php echo $row2['review_id'] ?> /></td> 

    <td><input name="Submit1" type="submit" value="Update" />||</td> 

    </form> 
    <td><a href = "deletereview.php?id=<? echo $row2['review_id'] ?>" >Delete</a></td> 
<? echo"</tr>"; 
$n++;  
} 
echo "</table>"; 

、その後updatereview.phpに:

foreach($_POST['content'] as $content) { 
    echo "$content"; // to test values 
    foreach($_POST['review_id'] as $review_id) { 
     echo "$review_id"; 
    } 
0

あなたは彼らそのような方法でname属性の値を構築する必要があります。私は私のプロジェクトの一つにやった配列

<input type="hidden" name="review_id[][<?php echo $n ?>]" value=<?php echo $row2['review_id'] ?> /> 

みなされる要素を適宜グループ化されているように、一定のパターンで均一な名前を使用することです

name="review[1][review_id]" 
name="review[1][content]" 
は次のレコードの私は、通常、インデックスとして、データベースからの行のIDを使用して異なるインデックス

name="review[2][review_id]" 
name="review[2][content]" 

を使用してもよいです。

関連する問題