[PHP-users 18762]Re: pg_insert()を使って配列を追加したい

KOYAMA HIDEKI hill47goodtree @ ybb.ne.jp
2003年 11月 3日 (月) 17:32:11 JST


Formの複数のCheckboxのデータ(TEXT型)を配列としてPOST
メソッドで受け取り、PostgreSQLのテーブルに追加したいので
す。テーブルは配列が入るように作りました。そして以下のス
クリプトを実行しました。

$conn = pg_connect("dbname=$dbname"); 

// 追加するデータの取得
if (count($_POST) > 0) {
for ($i = 0; $i < count(@$_POST["name"]); $i++) {
	$name = $_POST["name"][$i];
	$array[] = $name;	
}
// データが送信されたときはデータを追加する	
        $sql = pg_insert($conn, 'table', "$array");
        pg_query($conn, $sql) or
die("データ追加エラー");
}

しかし、
Warning: pg_insert() expects parameter 3 to be array,
string given in
/usr/local/apache2/htdocs/name_data.php
Warning: pg_query(): Query failed:.in
/usr/local/apache2/htdocs/name_data.php
と表示され、配列データが追加されません。sql文の前で
print_r($array);
exit();
を入れますと、$arrayに配列は入っています。この状況を自分
では解決できません。どなた様かご教示下さい。


藤田様、いわきり様、丁寧に答えて下さって誠にありがとうご
ざいます。質問の中にある「name」は「ある検査の項目」です
。「検査の項目(item)」が縦に50個ほど並んで(it1〜it50)、
「それらをいくつか組み合わしたセット(set)」が横に10個ほ
どある(s1〜s10)表があります。そしてそれぞれにCheckboxが
あります。検査はセットだけですむものもありますが(「s1」)
、「s1,it1」や「s1,it1,it40」といったものもあります。こ
れらをPOSTで受けてデータベースに載せたかったのです。一番
の目的は、ある物に対してどのような検査がなされているかを
、LAN内のどのコンピュータでも知りたいことでしたので、表
示できたらよいと考えを切り替えて implode() を使い、

$result = implode(',', $array);	
	$sql = "INSERT INTO table(name) VALUES('$result');";
	pg_query($conn, $sql) or die("データ追加エラー");

としてしまいました。これで「s1,it1」のように表示すること
はできました。(検査項目を統計処理する時また大変になるの
かもしれません。)
ところで、いわきり様の書かれている
INSERT INTO sample (name) VALUES ('{"text_01, "text_02, 
"text_03,"}');
を使おうとしたのですが、Array([0]=>s1
[1]=>it1)やArray([0]=>s1 [1]=>it1 [2]=>it40)
にどう対応したらよいのか私にはわからず、断念してしまいま
した。皆さん、ありがとうございました。その後の結果を報告
させていただきました。



PHP-users メーリングリストの案内