質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

10920閲覧

コメントフォームでのデータ登録に関するエラー

pinsong

総合スコア26

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/11/24 03:37

###PHPからPostgreSQLのデータベースにデータを登録する。
今回、データベースの勉強と称してWordPress以外を使いコメントフォームを作っております。
その際、PHPからPostgreSQLにデータ登録を行うところでエラーが出てしまいました。
今回、PostgreSQLを扱うのが初めてだったというのもあり、PHPのリファレンスを見ながらの作業を行っていたのですがどうしてデータが登録されないのかがわかりません。

###発生している問題・エラーメッセージ

Warning: pg_query() expects parameter 1 to be resource, string given in /home/students/gakusekibangou/html/webprogramming2016/project A/regist.php on line 27

###該当のソースコード

HTML

1<!DOCTYPE html> 2<html> 3<head> 4 <title>コメントフォーム</title> 5 <meta charset="utf-8" /> 6</head> 7<body> 8 <form action="regist.php" method="post"> 9 名前(ニックネーム):<br /> 10 <input type="text" name="name" size="10" value="" /><br /> 11 番号:<br /> 12 <input type="text" name="number" size="30" value="" /><br /> 13 コメント:<br /> 14 <textarea name="comment" cols="30" rows="5"></textarea><br /> 15 <br /> 16 <input type="submit" value="投稿する" /> 17 </form> 18</body> 19</html>

PHP

1<html> 2<head> 3 <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 4 <title>コメント投稿</title> 5</head> 6<body> 7 <?php 8 $dbconn=pg_connect("dbname=test user=user password=password"); 9 if(!$dbconn){ 10 exit('データベースに接続できませんでした'); 11 } 12 13 $result=pg_connect("dbname=test user=user password=password"); 14 if(!$result){ 15 exit('データベースを選択できませんでした'); 16 } 17 18 $result=pg_query('SELECT * FROM commentform'); 19 if(!$result){ 20 exit('文字コードを指定できませんでした'); 21 } 22 23 $name = $_REQUEST['name']; 24 $number = $_REQUEST['number']; 25 $comment = $_REQUEST['comment']; 26 27 $result = pg_query("INSERT INTO address(name,number,comment)VALUES('$name','$number','$comment')",$dbconn); 28 if(!$result){ 29 exit('コメントを投稿できませんでした'); 30 } 31 32 $dbconn = pg_close($dbconn); 33 if(!$dbconn){ 34 exit('データベースとの接続を閉じられませんでした'); 35 } 36 37 38 ?> 39 <p>投稿が完了しました<br /><a href="プロ演2016 コメントフォーム.html">戻る</a></p> 40</body> 41</html>

SQL

1create table commentform 2(name text not null, 3number integer not null, 4comment char(4) , 5primary key (number));

###試したこと
本当にテーブルが作られているかの確認。
###補足情報
IDE Visual Studio 2015 PHP tools for visual studio

非常にわかりづらい質問になっているかもしれませんが、ご教授ください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

warningメッセージとpg_query() の仕様をよく読みましょう。

pg_query() expects parameter 1 to be resource, string given

「警告 pg_query()の第1パラメーターにはresourceが必要ですが string が与えられてます。」

第1引数と、第2引数が逆です。
resource pg_query ([ resource $connection ], string $query )

投稿2016/11/24 03:51

Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pinsong

2016/11/24 05:46

PHP 27行目 こういうことでしょうか。 $result = pg_query($dbconn,"INSERT INTO address(name,number,comment)VALUES('$name','$number','$comment')"); 安直でごめんなさい。 リファレンスを見たのですが、いまいち理解ができませんでした。
Y.H.

2016/11/24 05:54 編集

そうです。 説明そのままですが。。。 第1引数の「$connection」: PostgreSQL データベース接続リソース。 第2引数の「$query」   : 実行する 1 つまたは複数の SQL 文。 http://php.net/manual/ja/function.pg-query.php >パラメータ > >connection >PostgreSQL データベース接続リソース。connection が指定されていない場合はデフォルトの接続が使用されます。 デフォルトの接続は、直近の pg_connect() あるいは pg_pconnect() によって作成されたものです。 > >query >実行する 1 つまたは複数の SQL 文。複数の文が関数に渡された場合は、 明示的に BEGIN/COMMIT コマンドを指定していない限りはそれらの文は ひとつのトランザクションとして実行されます。しかし、1 回のコールで 複数のトランザクションを実行することは推奨されません。
pinsong

2016/11/26 01:15

データベースに無事登録ができましたので、ご報告させていただきます。 今回PHP27行目のPHP 27行目 こういうことでしょうか。 $result = pg_query($dbconn,"INSERT INTO address(name,number,comment)VALUES('$name','$number','$comment')");の引数が真逆だった以外にも、insert into のデータベースのテーブル名を入れる所が"address"になっておりここを"commentform"に直す必要がありました。 そこを直した結果、無事データベースの方にデータを登録できました。 回答していただいた方ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問