質問: PHPとPostgresqlのデータの受け渡し。 お世話になります。質問させていただきます。質問文のURLは以下です。 以下のようなツリーBBSを設置しようとしています。サーバーで動作確認しましたが、今回は前回入ったid,time(日時)さえデータが入りません。 前回ご指導いただいた案件は解決いたしました。ありがとうございました。今回はtimeさえ入らないので質問させていただきます。 (ソース表示は小さいのでTeraPad等にコピペしてください) 作成PHPはphp4、データベースはPosygresql8.1,php5.3です。文字コードは全てUTFです。
回答: まず最初に確認しておきますが、 pg-query-paramsはphp5.1.0以降にしかありませんのでphp4では動きません。 php4、5のどちらでも動くコードを書きたいならば、 PEARのMDB2を使うことなどで対応することになりますが、 過去のバージョンに囚われて遅くなる方法を選択するのは賢くはありませんので、 開発環境にもphp5を用意しましょう(本題とは外れるので詳細は書きませんが、 1つのパソコン上でphp4と5を並行利用することは可能です) >サーバーで動作確認しましたが・・・ あなたがサーバーにアップしたというソースコードがしめされていないので、 あくまでも想像の域を出るものではありませんが、 $_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("RE:\n"); 2.print構文としては正解だけどHTMLの構文がおかしい書き方 print "RE:\n"; 3.古いHTMLの書き方 print 'RE:' . "\n"; 4.現代風の書き方(FONTタグは非推奨) print 'RE:' . "\n"; ```