- ベストアンサー
PHP スレッド構成の掲示板について
- PHP初心者が作成中の掲示板は2ちゃんのようなスレッド構成で、各スレッド毎に投稿可能ですが、投稿すると必ずスレッドIDが「3」となってしまい、1や2への投稿ができません。
- DBには3つのスレッドがあり、表示も1~3となっています。どうすれば各スレッドに対応したスレッドIDを投稿することができるでしょうか?
- 現在のソースコードでは、foreachループ内でスレッドIDを取得しているが、スレッドIDの表示は正しくされており、投稿ボタンでもスレッドIDを渡すことができる。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> foreach ($vars1["thread_list"] as $thread ){ > foreach ($vars2["message_list"] as $message ){ このループの中で > function open_win(){ という関数定義をしていますから、質問者さんのコードでは、 メッセージの数だけ「JavaScript の open_win という関数を定義」していることになります。 JavaScriptの関数定義は、同名の関数を定義した場合、最後の定義が有効になりますから、 出力したHTMLコード中の、 > <INPUT type="button" value="投稿する" onClick="open_win()"> のボタンは全て、クリック時には、一番最後に定義した open_win 関数が呼び出されます。 そのため、全てthread_id=3の投稿になってしまうのです。 open_win関数の定義はforeach ループの外に出して ---ここから--- <SCRIPT LANGUAGE="JavaScript"> function open_win(id){ window.open("post.php?thread_id="+id,"","scrollbars=yes,resizable=yes,width=700,height=400,left=200,top=100"); } </SCRIPT> ---ここまで--- のような関数定義1つだけにしておいて、 各メッセージの処理内では、 ---ここから--- <INPUT type="button" value="投稿する" onClick="open_win(<?= $thread["thread_id"] ?>)"> ---ここまで--- のように、thread_id をopen_win関数に渡すようにしたらよいかと思います。
お礼
ありがとうございます! ご回答どおり、定義を外に出すことにより上手く行きました!! >JavaScriptの関数定義は、同名の関数を定義した場合、最後の定義が有効 =>なるほど大変勉強になりました。ありがとうございました。