お世話になります。質問させていただきます。質問文のURLは以下です。
http://ryu669.sakura.ne.jp/ques2
以下のようなツリーBBSを設置しようとしています。サーバーで動作確認しましたが、今回は前回入ったid,time(日時)さえデータが入りません。
前回ご指導いただいた案件は解決いたしました。ありがとうございました。今回はtimeさえ入らないので質問させていただきます。
(ソース表示は小さいのでTeraPad等にコピペしてください)
作成PHPはphp4、データベースはPosygresql8.1,php5.3です。文字コードは全てUTFです。
まず最初に確認しておきますが、
pg-query-paramsはphp5.1.0以降にしかありませんのでphp4では動きません。
http://jp2.php.net/manual/ja/function.pg-query-params.php
php4、5のどちらでも動くコードを書きたいならば、
PEARのMDB2を使うことなどで対応することになりますが、
過去のバージョンに囚われて遅くなる方法を選択するのは賢くはありませんので、
開発環境にもphp5を用意しましょう(本題とは外れるので詳細は書きませんが、
1つのパソコン上でphp4と5を並行利用することは可能です)
http://pear.php.net/manual/ja/package.database.mdb2.php
>サーバーで動作確認しましたが・・・
あなたがサーバーにアップしたというソースコードがしめされていないので、
あくまでも想像の域を出るものではありませんが、
$_REQUESTで得られるはずの値が期待通りではないのだと思われます。
以前行っていたように、送信された内容を確認したものを$nameや$titleなどに入れるようにして、
それらすべてがOKならばpg_query_paramsで$nameなどをPostgreSQLに登録するという流れにしたほうが良いでしょう。
セキュリティの観点からも、$_REQUESTの値をそのまま使うのは良くありません。
pg_query_paramsで対処するのはPostgreSQLへの攻撃であって、
その中に例えばHTMLタグやjavascriptなどを埋め込まれると、
ブラウザ側でトラブルとなる間接攻撃になるからです。
$rs = pg_query_params( $db_con, "insert into treebbs (name, title, comment, w_time, email, display) values ($1, $2, $3, $4, $5, $6)", array($name, $title, $comment, date("Y/m/d h:i:s"), $email, 1)) or die(pg_last_error());
ログを見ろといわれてもちょっと難しいかもしれませんので、
エラー出力or die(pg_last_error())も付けておくと良いでしょう。
雑談:
printは関数ではないので(かっこ)は不要です。
(かっこ)は少しでも少ないほうが見やすくて、見やすいコードはデバッグもしやすいです。
1.動くけれども推奨できない書き方 print("<font color='#ff11ff'><tt><b>RE</b>:</tt></font>\n"); 2.print構文としては正解だけどHTMLの構文がおかしい書き方 print "<font color='#ff11ff'><tt><b>RE</b>:</tt></font>\n"; 3.古いHTMLの書き方 print '<font color="#ff11ff"><tt><b>RE</b>:</tt></font>' . "\n"; 4.現代風の書き方(FONTタグは非推奨) print '<tt style="color:#ff11ff"><b>RE</b>:</tt>' . "\n";
前回指摘があったプレースホルダのやり方に沿ってないと思われます。
普通にSQLを記述したあとに 埋め込みようの変数をセットするようにすればいいでしょう。
いや、今回のことに限らず
前回はプレースホルダを使わなくてもtime等コードで入力する部分はデータ入力されました
のでなぜなのかなと、今回も内容さわらずに提示させていただきました。
勉強しておりますので、内容はリンク先でご確認いただきますようお願いいたします。
tbbsのtreebbsテーブルに挿入できております。secondid, thirdidはNULL表示。
したがいまして、今回はtbbs-ins.incがらみで問題がありそうなので、引き続きあれやこれやスクリプトさわりながら試行錯誤続けます。
$name = $_POST['name'];
$title = $_POST['title'];
$comment = $_POST['comment'];
$email = $_POST['email'];
$rs = pg_query_params(
$db_con,
"insert into treebbs (name, title, comment, w_time, email, display) values ($1, $2, $3, $4, $5, $6)",
array($_REQUEST['name'], $_REQUEST['title'], $_REQUEST['comment'], date("Y/m/d h:i:s"), $_REQUEST['email'], 1));
リンク先は 改行うまくいってないようなので 非常にみづらい状態でした。
なので コメント欄に貼り付けてくださいとお願いしたんですが 無視されましたね。
>リンク先は 改行うまくいってない
ソースコードを表示すれば特に問題なく読み取れます。
だから、回答内のコメントのようなフォローが出来ているわけです。
しかし、
回答内コメントにも書いたとおり欠落している部分が多々あり、
あの程度までしかフォローできなかったのは残念な限りです。
>無視されましたね
質問者はコメント欄にて一部ですがコードを書いてます。
つまり、無視していたのは、takntさんのほうです。
それを質問者の落ち度であるかのような追い討ちを書き込むなど、
ポイントをもらえなかった腹いせに見えます。
いえ、腹いせにしか見えません。
そのような行為は、自分を貶めるだけですから、
そのような書き込みは以後やめておくことをお勧めしておきます。
常連回答者なら知ってるって程度で、
質問者の場合は知らないほうが多いのではないですかねぇ。
そもそも、掲示板上でのやりとりなんですから、
掲示板を読むのが当然と思ってても不思議じゃありませんし、
コメント欄のコードにしても、私の回答へのコメントにしても、
質問者は返事をする努力をしてるんです。
質問者の努力に対して、
ソースコードを軽く見る程度のこともしなければ、
質問者がコメント欄に書いたことへのコメントもせず、
無視しただとか、対応してもらいたかったなどというのは被害妄想です。
これ以上、同様の書き込みはしないでください。
あなたも知っているとおり、
質問者にも回答者にも通知がくるのですから・・・
まだ解決されてないということは残念に思って、ああいうふうに コメントしただけです。
あと
>無視しただとか、対応してもらいたかったなどというのは被害妄想です。
とか なんか いろいろ 妄想を膨らませてるようですが 迷惑ですよね。
別に 私は そうんな 妄想で コメントしているわけでは ありません。
もう少し いろいろあったら 調べようと思ってましたが、メールが きてなくて
気づかなかったということです。
当然のことながら 回答側のコメント欄に書いても 表示が まとまってしまうため
気づきにくいことは 言うまでもありません。