PHP スレッド構成の掲示板について

このQ&Aのポイント
  • PHP初心者が作成中の掲示板は2ちゃんのようなスレッド構成で、各スレッド毎に投稿可能ですが、投稿すると必ずスレッドIDが「3」となってしまい、1や2への投稿ができません。
  • DBには3つのスレッドがあり、表示も1~3となっています。どうすれば各スレッドに対応したスレッドIDを投稿することができるでしょうか?
  • 現在のソースコードでは、foreachループ内でスレッドIDを取得しているが、スレッドIDの表示は正しくされており、投稿ボタンでもスレッドIDを渡すことができる。
回答を見る
  • ベストアンサー

PHP スレッド構成の掲示板について

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> -------------------------------------------

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答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関数に渡すようにしたらよいかと思います。

niko314
質問者

お礼

ありがとうございます! ご回答どおり、定義を外に出すことにより上手く行きました!! >JavaScriptの関数定義は、同名の関数を定義した場合、最後の定義が有効 =>なるほど大変勉強になりました。ありがとうございました。

関連するQ&A

  • スレッド式掲示板探してます。

    条件 ・無料のスクリプト ・スレッド式 ・画像投稿 ・携帯対応(閲覧できればいい) 色々見てみたんですが、よい掲示板がみつかりません。 知っている掲示板があれば教えてください。

    • 締切済み
    • CGI
  • PHP foreachのループの中でPOST送信

    現在掲示板を作っています。 <?php foreach ($result as $record){ $id = $record ["id"]; $title = $record ["title"]; ?> <form method="post" name="form1" action="contents.php"> <input type="hidden" name="id" value="<?php echo $id; ?>"> <a href="javascript:form1.submit()" ><?php echo $title; ?></a> </form> <?php } $dbInfo = null; ?> </form> テーブルのidとtitleをすべて取り出しています。 titleを一覧表示で全件表示させリンクを貼り、移動先にidをPOSTで送信し投稿内容がみられるようにしたいのですが、リンクを貼れても飛べなかったり、移動できてもなにも送信していない状態(ただ移動しただけ)だったり。 2つ目のphp直後の「}」を1つ目の中で閉じるとPOST送信しつつ移動できるのですが、1件しか表示されなくなってしまいます。 <form method="POST" name="con-id"> <input type="hidden" name="id" value="<?php echo $id; ?>"> <a href='contents.php'><?php echo $title; ?></a> </form> などもしてみましたが、POST送信はされませんでした。 なにか方法はありませんでしょうか? ここをこうした方がいい、など教えて頂きたいです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 「ようこそ○○様」をPHPで出力するためには

    下記スクリプトを実行しても反映されません。 エラーが数個出てしまいます。非力ながら訂正をしますが、動きません。 下記の場合何を変更すればよろしいでしょうか。 .恐れ入りますがご指導頂ければ幸いでございます。 <?php session_set_cookie_params(50000,$_SERVER['PHP_SELF']); session_start(); $_SESSION["vars"]; $pagetitle="Travel Route planner"; $id=$_COOKIE['PHPSESSID']; if($id==""){ //初回の処理 $mode="init"; $vars['count']=0; }else{ //二回目以降の処理 $mode="normal"; $x=$_POST['map_x']; //x座標 $y=$_POST['map_y'];//y座標 if($x && $y){ if(($x>466 && $x<518)&&($y>475 && $y<501)){ $_SESSION['vars']['count']=0; }else{ //座標を保存 $namex=sprintf("xpos%d",$_SESSION['vars']['count']); $namey=sprintf("ypos%d",$_SESSION['vars']['count']); $townname=sprintf("townname%d",$_SESSION['vars']['count']); $_SESSION['vars'][$namex]=$_POST['map_x']; $_SESSION['vars'][$namey]=$_POST['map_y']; $_SESSION['vars'][$townname]=$_POST['townname']; $_SESSION['vars']['count']++; } } //名前の処理 if(isset($_POST['cmd'])=="登録"){ if($_POST['username']==""){ $_SESSION['vars']['username']="[Unknown]"; }else{ $_SESSION['vars']['username']=$_POST['username']; } } //image.phpにわたす $param="?count={$_SESSION['vars']['count']}&"; $param.="username={$_SESSION['vars']['username']}&"; for($i=0;$i<$_SESSION['vars']['count'];$i++){ $namex=sprintf("xpos%d",$i); $namey=sprintf("ypos%d",$i); $townname=sprintf("townname%d",$i); $str=sprintf("%s=%s&%s=%s&%s=%s&", $namex,$_SESSION['vars'][$namex], $namey,$_SESSION['vars'][$namey], $townname,$_SESSION['vars'][$townname]); $param.=$str; } //ユーザー名付加 $pagetitle.=" for {$_SESSION['vars']['username']}"; } ?> <!DO..省略.> <form action="<?php echo"{$_SERVER['PHP_SELF']}";?>" method="POST"> 名前<input type="text" name="username"> <input type="submit" name="cmd" value="登録"> </form> .. .. </body> <?php endif;?> <?php if($mode=="normal"):?> <head><title><?php echo"$pagetitle";?></title></head> <form action="<?php echo"{$_SERVER['PHP_SELF']}";?>" method="POST"> <input type="text" name="townname"> <input type="image" src="./image.php<?php echo"$param";?>" name="map"> .. </html> お願い申し上げます。

    • 締切済み
    • PHP
  • PHPでスレッド式掲示板を作りたいです

    こんにちは。現在Androidアプリで掲示板を作ろうと思いPHPとDBを活用してスレッド式掲示板を作成しています。 テーブルはこのような感じで構成しています。 スレッド一覧テーブル sureid(int ai) surename(text) name(text) time(text) rescount(int) コメントテーブル sureid(int) surename(text) name(text) msg(text) id(text) time(text) 作っていく途中で躓いてしまったので御教授願います。 1つ目 スレッド一覧画面で選択したsureidをGETしスレッドの中の画面でGETしたsureidの投稿を表示させたい。 2つ目 スレッド一覧画面で各スレッド一覧の横にスレッドのレス数を表示させたい。 <?php $USER= ''; $PW= ''; $dnsinfo= ""; $user= array(); $pdo = new PDO($dnsinfo,$USER,$PW); $sql = "SELECT * FROM thread"; $stmt = $pdo->prepare($sql); $stmt->execute(null); while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ $user[] = array ('surename'=> $row["surename"] ,'name' => $row["name"] ,'rescount' => $row["rescount"]; } $res = array_reverse($user); echo json_encode($res); ?> スレッド一覧のプログラムはこのようになっています。

    • 締切済み
    • PHP
  • 静的HTMLで出力可能なスレッド式掲示板

    静的HTMLで出力可能なスレッド式掲示板のスクリプトを教えてください。 レンタルではなく、自分で用意したサーバーに設置するタイプのものです。 このサイトのような掲示板が理想的です。 www.e-mansion.co.jp musyoku.com/bbs PHP SQL CGIなどではなく、CMSなどを利用しているのでしょうか? よくある2ちゃんねる型スクリプトのように、read.cgiで出力してないスレッド式のものはありますか? 出力したhtmlに、最終投稿日時を表示させているものが望ましいです。

  • phpで掲示板

    phpで掲示板を作り、入力、投稿、データの表示はうまくいくのですが、リロードによる連投ができてしまうのですが、 入力、投稿が終わってデータベースに書き込んだ後にunset($_POST)で投稿内容を破棄しようとしてますが、変わらず連投できてしまいます。 なにか方法としてよいものはありますか? (入力、投稿、データの表示は全て同じベージです。)

    • ベストアンサー
    • PHP
  • PHPで掲示板を作りたいです

    PHPで簡単な掲示板(メッセージボード)を作ってみようと思っています。 今考えているのは、 (1)HTMLのテキストエリアの文字列(投稿者名、メッセージ)をサーバーのphpファイルあてにsubmitし、 (2)(1)および投稿日時間をサーバーにあるテキストファイルに追加し、 (3)(2)をブラウザに表示する というシンプルなものです。 この発想に何か問題はありますか? あと、上記の掲示板を作るとして、ひとつ気になっていることがあります。 メッセージ10件で1ページ表示するようにしたいと思っていますが、メッセージ10件の区切りをどうしたらいいのかわかりません。 「件名」や「投稿者」という文字列を検索して、メッセージごとの区切りを見つけるという方法を思いつきましたが、これだと、もし万一メッセージの文章中に「件名」や「投稿者」という文字列があった場合、そこが メッセージの境だと認識されてしますので難しいなと思ったのです。 何かアドバイスありましたら、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP 掲示板について

    ファイル名:bbs.html 掲示板タグを一を記載します。 <html> <head> <title>ミニ掲示板</title> </head> <div class="menu"> l<a href="~~~">~~~</a> l<a href="~~~">~~~</a> </div> <body> <p>※記事削除は、製作者へメールをクリックし、用件には【掲示板 記事削除の件】内容には、【記事削除キーを入力し、送信してください。】<br> ミニ掲示板(<a href="bb.html">リロード</a>)<hr> <form method="post" action="bbs.php"> <input type="hidden" name="mode" value="write"> 名前:<input type="text" name="name" size="20"><br> メールアドレス:<input type="text" name="name" size="40"><br> 用件:<input type="text" name="name" size="20"><br> 記事削除キー:<INPUT size="20" type="password" value="" name="pass"> <p> 内容:<br> <textarea name="message" rows="5" cols="30"></textarea><br> <input type="submit" value=" 投稿する "> </form> <hr> 【投稿する】を押すとbbs.phpに繋がるのですが、【投稿する】を押したら、bbs.htmlの【最初の場面】の下に自動的に入るようにしたいのですが。! どうすればよいのでしょうか。? ♪宜しくお願いいたします。♪【(ーー;)】

    • ベストアンサー
    • PHP
  • 1つのphpファイルで、入力フォーム、チェック、Insertまで全て済ませられませんか

    PHP4.4.4+MySQL4.0.26 PHPの入門書に、form.html から、update文を含むPHPにPOSTする 掲示板サンプルがあるのですが、これにある入力チェックサンプルですと、 別画面に遷移して(例えば投稿者名は)「全角10文字以下にして」、とか メッセージを表示します。そうではなく、 値を入力   ↓ 登録ボタン押下   ↓問題なしなら     ↓問題あるなら INSERT文を実行    問題ある【フォームの脇に】「10文字以下で」と表示 のように1つのPHPファイルで全てを済ませたいのですが、可能でしょうか。 下記サンプルで、update.phpのところを<?= $PHP_SELF ?>にして、 <html> <body> <form method="post" action="update.php"> 投稿者名<input type="text" name="name" value=""> <input type="submit" name="reg" value="登録"> </form> </body> </html> 投稿者名の脇に if (strlen($name) == 0) {   $errmsg .= "回答者名が入力されていません。<br>"; } print $errmsg; みたいなものを仕込めばよさそうですが、 (1) これを登録ボタン押下時だけ動作させなければだめですよね? (初めに表示するときにチェックにHITしてしまうでしょうから) それをどうしたらいいかわかりません。 (2) ↑が克服できたとしても、問題がなければSQLでINSERT or UPDATEを かけなければならないですが、POST先が$PHP_SELFだと、永久にUPDATEが かからず、入力チェックばかりが無限ループしてしまうと思うのですけど。 (3) それと、Insert ot Updateがかかったら「ありがとう」を出して、別画面に リダイレクトしたいです。 以上の極めてシンプルなもので結構ですので、サンプルをご教示いただけませんか

    • ベストアンサー
    • PHP
  • PHPのエラーについて

    データベースから出力し、リンクをつけたいと考えていますが、下記のようなエラーが出力されます。 どのように対応すれば解消されるでしょうか? データベースにはthread_idという項目は存在します。 echo から始まる列が38行目にあたります。 よろしくお願いします。 【コード】 <?php $sql = "SELECT * FROM thread WHERE category_id =1"; $date = mysql_query($sql,$link); while ($post = mysql_fetch_assoc($date)) { $thread_id = $post['thread_id']; echo '<br>' . '<a href="thread.php?id=<?php echo htmlspecialchars($post['thread_id']); ?>">' . $post['thread_title'] .'</a>'.'<br>'; } ?> 【エラー】 Parse error: syntax error, unexpected 'thread_id' (T_STRING), expecting ',' or ';' in C:\xampp\htdocs\index.php on line 38

    • 締切済み
    • PHP

専門家に質問してみよう