こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

mysql perl  2回保存される。

perlとmysqlを使っています。

htmlのformタグからえたテキストをCGIに送って
データベースに保存しているのですが、送信ボタンを押すと2回データベースに
保存されてしまいます。
同じデータがふたつ保存されるのではなく、
一つ目はすべてNULLのデータが保存され
二つ目にmformの内容が保存されます。
CGIのほうのSQL文はひとつしか書いていません。for文も使っていません。

<-----以下form部分のソースーーーーー>
print "<form method=\"POST\" action=\"./CGI/save_DB.cgi\" name=\"saveform_2\"target=\"subwindow\" onSubmit=\"openwin();\">";

print "<div>タイトル:<input type=\"text\" name=\"TITLE\" autocomplete=off value='";
print "$TITLE\'></div>";
print "<input type=\"submit\" value=\"保存\">";
print "</form>";


<-----以下save_DB.cgi SQL実行部分のソースーーーーー>

my $TITLE = $cgi->param('TITLE');

my $dbh = DBI->connect("DBI:mysql:host=${db_host};database=${db_name}", $db_user, $db_pass);
my $sth = $dbh->prepare("INSERT INTO テーブル名 ( `title`) VALUES ($TITLE);
my $rv = $sth->execute();


データベースへの接続などの問題はありません。
ブラウザはクロームですが、IEで試しても同じ現象がでました。

考えられる原因、おもいあたる原因がありましたら、教えてください。
また、原因がわからなくても、回避できそうなやり方があれば教えてください。
よろしくお願いいたします。

投稿日時 - 2011-11-22 16:35:21

QNo.7148300

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

>my $sth = $dbh->prepare("INSERT INTO テーブル名 ( `title`) VALUES ($TITLE);

そもそも文法的に間違っていますけどtypoですかね?
(ダブルクォーテーションやかっこが閉じてない)

$TITELを渡していますが、文字列なのでシングルクォーテーションで
くくる必要があるのでは?

投稿日時 - 2011-11-22 16:51:34

補足

申し訳ありません、複数のデータを保存しているのですが、
ここに載せるソースに加工する際に焦って忘れてしまいました。
動かしているほうは、変数はダブルクォーテーションでくくり、かっこも閉じています。
データの保存のほうはしっかりと動いてます。

投稿日時 - 2011-11-22 17:20:38

あなたにオススメの質問