cfFormDBでエラー

質問全般・改善要望
返信する
mhiro
メンバー
メンバー
記事: 1
登録日時: 2014年9月04日(木) 15:52

cfFormDBでエラー

投稿記事 by mhiro »

Webサーバのバージョン : apache 1.3.42
PHPのバージョン : 5.4.23
データベースのバージョン : mysql 5.1.73
MODXのバージョン : 1.0.14J-r3

これまで、eFormを利用していましたが、先日、cfFormMailerを使い始めました。
何とか設定ができ、使える状態になったので、cfFormDBも使ってみようと思ったのですが、メールを送信すると、次のようなエラーが出ます。(メール自体は送信されます)

« Execution of a query to the database failed - Duplicate entry '1' for key 'PRIMARY' »
SQL > INSERT INTO `testdb`.`test_cfformdb_detail`(postid,field,value,rank) VALUES(1, 'name_l', 'john', 1)

name_lは2番目の項目で、最初の項目(name_f)は登録されています。
エラーメッセージから、主キーがかぶってしまっている、ということだと思うのですが、サンプルページをほぼそのまま使ってみたもので試しても同様でした。
また、まだ成功していないのでうまくいったときのDBの状態がどうなるかが解らないのですが、上記のエラーからそのまま推測すると、項目ごとに新しいレコードになる、ということなのでしょうか?
イメージとしては、「一つの投稿が一つのレコード」ですが、実際にはそういう形になるのでしょうか?

バグ報告かトラブル相談か迷ったのですが、ほぼサンプルのまま(メール宛先等のみ変更)で出たエラーなので、こちらで報告させていただきました。

よろしくお願いいたします。
masco
メンバー
メンバー
記事: 143
登録日時: 2014年9月26日(金) 10:43

Re: cfFormDBでエラー

投稿記事 by masco »

---------------------------------------------------------------
Webサーバのバージョン : apache 2.2.15
PHPのバージョン : 5.4.26
データベースのバージョン : 5.5.39-MariaDB-log
MODXのバージョン : 1.0.14J-r4
---------------------------------------------------------------

« Execution of a query to the database failed - Duplicate entry '1' for key 'PRIMARY' »
INSERT INTO `evo`.`modx_cfformdb_detail`(postid,field,value,rank) VALUES(1, 'name_l', '', 1)

同様の問題です。mhiroさんが全て書いてくださっているとおりです。
サンプルをそのままコピペしてもダメでした。

よろしくお願い致します。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: cfFormDBでエラー

投稿記事 by yama »

了解です、後ほど修正します。
noka
メンバー
メンバー
記事: 94
登録日時: 2013年6月19日(水) 10:02

Re: cfFormDBでエラー

投稿記事 by noka »

こんばんは。

私もcfFormDBは利用させていただいており、参考になるかわかりませんが、どこかで見たエラーだったので情報提供まで。

https://github.com/clefarray/cfFormDB/b ... .class.php
391行目、新規利用時のテーブル作成のクエリのところ。

コード: 全て選択

$sql = "CREATE TABLE {$this->tbl_cfformdb_detail} (`postid` int not null primary key, `field` varchar(255) not null, `value` text, `rank` int) ENGINE=MyISAM";
は、

コード: 全て選択

$sql = "CREATE TABLE {$this->tbl_cfformdb_detail} (`postid` int not null, `field` varchar(255) not null, `value` text, `rank` int) ENGINE=MyISAM";
と、primary keyの指定を取る必要があります。
「cfformdb_detail」のテーブルは、cfformdbテーブルと1対多のリレーションになっていて、ここのpostid(投稿ID)にはフィールド数分、同一値が重複して入ってきますので。

このため、たぶん当該コードを修正して、cfformdb_detailとcfformdbのテーブル削除後にもう一度実行すると解消されると思います。
以前のバージョンでは問題がなくて、その後にバージョンアップしただけの場合には、このテーブル新規作成が実行されませんから、気付きにくい不具合だったと思います。

時間的な問題で、検証せずでの投稿ですので、もしも勘違いだったらご容赦ください。

とりいそぎ。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: cfFormDBでエラー

投稿記事 by yama »

noka
メンバー
メンバー
記事: 94
登録日時: 2013年6月19日(水) 10:02

Re: cfFormDBでエラー

投稿記事 by noka »

yama さま

あっ、そこですね。
気付いた時点で共有できず申し訳なかったです。

とりいそぎ。
masco
メンバー
メンバー
記事: 143
登録日時: 2014年9月26日(金) 10:43

Re: cfFormDBでエラー

投稿記事 by masco »

noka様 yama様

noka様ご指摘の通りに修正して実行したところ、エラーもなくうまくいきました。

ありがとうございます。
clefarray
メンバー
メンバー
記事: 10
登録日時: 2010年2月16日(火) 16:20

Re: cfFormDBでエラー

投稿記事 by clefarray »

cfFormDB の作者です。

本件の修正を反映させました。
yamaさんありがとうございました。
https://github.com/clefarray/cfFormDB
返信する