電子書籍の厳選無料作品が豊富!

PHP スレッド構成の掲示板

PHP初心者ですが、掲示板を作ってます。

2ちゃんのようなスレッド構成で、各スレッド毎に投稿することが可能です。

今、DBにはスレッドは3つまであります。表示は1~3とそれぞれ出来ています。
「投稿する」押下で「post.php」を呼んでも、thread_idは必ず「3」となってしまい、
1や2へ投稿することが出来ません。

どうすれば、それぞれのスレッドに設置した「投稿する」押下にて該当するスレッドIDを渡すことが出来るのでしょうか?

ソースは以下のような記述です。foreach を2回使い、スレッドIDのループ内で投稿(message)を更にループしています。
foreach ($vars1["thread_list"] as $thread ){
foreach ($vars2["message_list"] as $message ){
-------------(一部抜粋)-------------------
<SCRIPT LANGUAGE="JavaScript">
function open_win(){
window.open("post.php?thread_id=<?= $thread["thread_id"] ?>","","scrollbars=yes,resizable=yes,width=700,height=400,left=200,top=100");
}
</SCRIPT>
<form action="" method="post" "style="border: 1px solid black">
<INPUT type="button" value="投稿する" onClick="open_win()">
</form>
-------------------------------------------

A 回答 (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関数に渡すようにしたらよいかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます! ご回答どおり、定義を外に出すことにより上手く行きました!!

>JavaScriptの関数定義は、同名の関数を定義した場合、最後の定義が有効
=>なるほど大変勉強になりました。ありがとうございました。

お礼日時:2011/03/13 19:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!