2012-01-28 6 views
0

私は単純なものが欠けていると確信していますが、フォームの隠しフィールドにMySQL Whileステートメント。データはページ上に正しく表示されますが、送信時には、最後にロードされたIDから送信されます。

while ($row = mysql_fetch_assoc($result)) { 
    $id = $row['id']; 
    echo '<form name="voting" action="thanks_for_voting.php" method="POST"> 
    <align="right"><input type="hidden" name="id" value="'.$id.'" 
    <br><input type="submit" value="VOTE FOR '.$id.'"><br>'; 
} 

私は間違っていますか?私は過負荷を防ぐために私のDBに一回の呼び出しを続けようとしています、私は目標を達成するための簡単な方法があると思いますか?しかし何?

Machineadictは私のフォームを閉じていなかったことに気づいて、以下の私の問題を解決しました。私はそれを閉じ、問題は解決されました。ありがとう!

答えて

1

machineaddictに記載されているように、複数のフォームを使用する場合は、前のタグを閉じる前に前のタグを閉じる必要があります。

あなたはまた、それをクリックされたボタンに応じて特定の値を割り当て、単一の隠しフィールドを持つ単一のフォームでこれを行うことができます。

ここ
echo '<html><form name="voting" action="thanks_for_voting.php" method="POST"><align="right">'; 
echo '<input type="hidden" name="id" value="-1">'; 
while ($row = mysql_fetch_assoc($result)) { 
    $id = $row['id']; 
    echo '<input type="button" value="VOTE FOR '.$id.'" onclick="javascript:document.forms[\'voting\'].elements[\'id\'].value='.$id.'; document.forms[\'voting\'].submit();">'; 
} 
echo '</form></html>'; 

を使用すると、データベースからIDのそれぞれのボタンを持っています。各ボタンは、onclickハンドラで次のJavaScriptコードを実行します。

document.forms['voting'].elements['id'].value = YOUR_ID; 
document.forms['voting'].submit(); 

これは、IDを希望の値に設定し、フォームを送信します。このコードを関数の中に置いて、関数の名前をonclickハンドラに入れることができます。

また、おそらく複数の<html>タグを生成したくないでしょう。

+0

ループでそれを達成する最も簡単な方法は何でしょうか?私は設計ごとにすべてのループで3つの結果を出力しています。 – Tony

+0

良い点はhtmlタグです。実際には – Tony

0

<form>はwhileループ内にあります。アダム・ザルクマンの言うとおり、ユニークな名前を使用してください。

echo '<html><form name="myform" action="thanks_for_voting.php" method="POST"><align="right">'; 
while ($row = mysql_fetch_assoc($result)) { 
    $id = $row['id']; 
    echo '<input type="hidden" name="id[]" value="'.$id.'"><br><input type="submit" value="VOTE FOR '.$id.'">'; 
} 
echo '<br></html>';} 

を試してみてくださいこれは、formタグが閉じていないなど

+0

です。これは間違っています。私はあなたがしようとしていることのポイントを逃した。 – SimonMayer

+0

私の目標は、一意のIDを含む異なる項目のそれぞれのページに3つの送信ボタンを持つことです。ユーザーが「投票___」ボタンをクリックすると、そのアイテムのIDデータが次のページに送信されます。 – Tony

2

$_POST['id'][1]、あなたが$_POST['id'][0]として取得できる値の配列を、掲載します。あなたはそれらを必要としないhtmlタグを失う。ループ内でフォームを使用しても問題ありません。入力の名前を変更する必要はありません。

+0

あなたはそれを持っています!私はそれが開いたままになるように私のフォームを閉じるのを忘れてしまった! – Tony

関連する問題