formの名前をperlに書き込まずに簡単に取るには?(eval使用で簡単にできますか?)
やりたいことは以下のとおりです。
FORMから入力された情報をDBに書き込む。
ただし、FORMのidをいちいちコーディングしているとメンテナビリティが落ちるので避けたい。
つまり、これは避けたい。
・・・
$sth = $db->prepare("INSERT INTO db_name ($db_field) VALUES $FORM{name},$FORM{phone}・・・・・");
・・・
ちなみにDBのフィールド名称は別に定義しており、それをテーブルごとに$db_fieldに代入してinsert文を使いまわしている。
また、FORMの名称は各々意味を持たせたいので番号にはしたくない。
このとき、FORMの名前をHTMLから取ってきてvalueに入れる簡単な方法はないでしょうか。
現在、dbのフィールド名とFORMの名称はほぼ一致するため、field名からFORM名称を作ってしまうやり方を以下のように考えていますが、evalの使い方がまずいのかうまくいきません。
#field名からFORM名を作成する
my $value_name;
my $form_name;
my @field_name = split(/,/,$db_field);
foreach $form_name (@field_name) {
#"'$FORM{name}','$FORM{phone}'・・・"の形を次々につなげる
$value_name = $value_name . "'\$FORM{" . $form_name . "}',";
}
#最後にdbのフィールド名とFORMで一致しない項目を付け足す
$value_name = $value_name . "'\$date','\$time'";
#ここからが問題
#$value_nameにはFORM{name},FORM{phone}・・・と入っているので
#それを使って、$db_value = "FORM{name},FORM{phone}・・・
#という関数と同じことを実行させたい
#しかし下のevalでは出ない。
my $db_value;
my $db_value_temp;
eval "\$db_value = $value_name";
この結果、$db_valueに各FORMの入力内容(佐々木、03*******など)が入り、それをDBにinsertしたいと考えてます。
上のロジックがうまくいけば、汎用的に使えるので非常に助かるのですが、いかがでしょうか。
そもそもevalなど使わない、もっと簡単な方法があればお願いします。
ずらずらと記述する、field名は別のincludeファイル内にダラダラと書いているので、同じようにform名もダラダラ書くというのは避けたいです。
よろしくお願いします。