- ベストアンサー
チェックボックスからpsqlに書き込み
現在、PHPとPostgreSQLを利用してアンケートサイトを作成しています。 アンケートは基本的にチェックボックスとラジオボタンを利用してpsqlにデータを登録したいと思っています。 PHPでPostgreSQLと接続はできたのですが、PHPからPostgreSQLへデータを登録することができません。 単純にphpからpsqlにデータを登録する方法を教えてください。 PHP・PostgreSQLに詳しい方、お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
説明不足でした(漢字を使うとは思わなかったので)。 CGIは漢字を渡すときにurlエンコードします。 受け取ったPHPで、urlデコードしてやらないと変な文字列で格納してしまいます。 insertする前にurldecode()関数を使ってください。 もしCGIとPostgreSQLで漢字コードが違う場合はmb_convert_encoding()関数を利用することも。
その他の回答 (1)
- ts3m-ickw
- ベストアンサー率43% (1248/2897)
CGIの基礎を理解していれば簡単な話ですよ。 checkboxはチェックすると"on"(またはvalue値)、チェックしないと""を返します。 radioは項目ごとに設定したvalue値を返します。1つもチェックされていなければ""を返します。 post先のPHPでは、CGIから渡された値がcheckboxやradioのname値と同じ名前の変数に入ります。 その変数を使ってinsertなりupdateのSQL文を作って実行するだけです。 チェック項目ごとにデータベースの項目を作っておくと後で判りやすいでしょう。 例えば <input type="checkbox" name="anquete1"> <input type="radio" name="anquete2" value="OK"> <input type="radio" name="anquete2" value="NG"> をpostした先では、$anquete1に"on"か""が入り、$anquete2には"OK"か"NG”が入ります。 ですので、 insert into table (KOUMOKU1,KOUMOKU2) values ('$anquete1','$anquete2'); を実行すればテーブルに格納できます。 登録した日時も合わせてテーブルに格納しておくと分類しやすくなっていいですね。
お礼
お返事ありがとうございます! さっそくプログラムを作ってみました。 ※アンケートサイト <html> <head> <title>テスト</title> </head> <body> <form method="post" action="sample.php"> <input type="radio" name="sam" value="山">山<br> <input type="radio" name="sam" value="川">川<br> <input type="radio" name="sam" value="谷">谷<br><br> <input type="submit" name="OK" value="OK"> </form> </body> </html> ※php処理 <html> <head> <title>結果</title> </head> <body> <?php $dbconn = pg_connect ("dbname=***** user=*****"); $result = pg_query ($dbconn, "insert into sample values('$sam');"); pg_close($dbconn); ?><br> </body> </html> ※TeraTermからデータ入力の確認 *****=> create table sample( *****(> sumi text); CREATE TABLE *****=> select * from sample; sumi ------ (0 rows) *****=> grant select on sample to a9p31037; GRANT *****=> select * from sample; sumi ------ (1 row) *****=> select * from sample; sumi ------ (2 rows) *****=> select * from sample; sumi ------ (3 rows) このような結果になりました。 データは入力されているみたいなんですが文字として認識されませんでした。 詳しい説明ありがとうございました!
お礼
お返事ありがとうございます! データベースでなぜか文字が表示されないので、urldecode()関数を試してみたいと思います。 親切に教えてくれて助かりました。 またわからないことがあるときはよろしくお願いします。 ありがとうございました!