![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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>
-------------------------------------------
No.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の関数定義は、同名の関数を定義した場合、最後の定義が有効
=>なるほど大変勉強になりました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++スレッドの正しい終了のさ...
-
pthread_mutex_lock の応答時間
-
メインスレッドのPostMessageと...
-
スレッドの安全な終了のさせ方
-
Win32APIでのスレッド処理
-
スレッドの監視方法について
-
WaitForSingleObjectの使い方に...
-
スレッドの終了の仕方
-
スレッドがサスペンドされてい...
-
C# スレッド終了の監視について
-
別スレッドからメインダイアロ...
-
スレッド終了を待つ間に開放さ...
-
DirectX キーが入力されるまで...
-
C言語で一定時間待機後、再実行
-
Windows上で、シグナル(SIGTERM...
-
頭冷やし終えました。スクリー...
-
pthread_cond_wait 取りこぼし?
-
同一スレッドで、ロックをかけ...
-
スレッド一覧の取得
-
Macターミナルで実行中のプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WaitForSingleObjectの使い方に...
-
VC++スレッドの正しい終了のさ...
-
スレッドの監視方法について
-
スレッドの安全な終了のさせ方
-
Windows上で、シグナル(SIGTERM...
-
マルチスレッドプログラミング...
-
スレッドの終了の仕方
-
スレッドにて同一メモリの書き...
-
VB2005 シリアル通信のClose処理
-
スレッドの終了はどうやるんで...
-
スレッドでWM_TIMERを受け取れない
-
同一スレッドで、ロックをかけ...
-
マルチスレッドのスレッド数を...
-
WaitForMultipleObjectのイベン...
-
MFC通信プログラムマルチスレッ...
-
CWnd::OnTimerのスレッドの取得
-
待機関数(WaitForMultipleObjec...
-
LinuxでDoEvents()同等機能
-
【VC++6.0(MFC)】スレッドの呼...
-
pthread_cond_wait 取りこぼし?
おすすめ情報