50個のinputに入力されたデータをデータベースに反映したいと考えています。
入力後に直ちに反映したいため、Ajaxを用いています。
inputのidとデータベースのフィールド名は同じです。
とりあえず、単純な方法しか分からないので、やむを得ず、下記の方法をとっています。
まず、Ajaxのvar data ={}の中に、
lang
1var data={ 2"a":$("input#a").val(), 3"b":$("input#b").val(), 4・・・ 5}
という感じで、50個も書いています。
そして、ajaxでデータを飛ばす先のPHP(データベースに反映させる処理を行う)においても、
lang
1$a = sanitizeString($_POST['a']) ; 2$b = sanitizeString($_POST['b']) ; 3・・・
のように、50個を変数に入れています。
さらに、私はpearを用いているので、
$st = $db->prepare("INSERT INTO table名 (a,b,・・・) VALUES(?,?,・・・));
$result = $db->execute($st,array($a,$b,・・・);
として、それぞれ50個ずつを記述して処理しています。
50個でも結構大変でしたが、一般的にはもっとスマートに処理する方法があるのではないかと思い、それをご存じの方は、教えていただけないでしょうか。
私が思いついてやってみようと考えたのは、下記の方法です。
Ajaxでデータを飛ばしたいinputに、.ajaxというクラス名を付ける。
↓
下記のように、各inputのidと入力されたデータを取り出し、変数dataを作る。
lang
1data = ""; 2 $("input.ajax").each(function(){ 3 point = '"'+$(this).attr("id")+'"' + ':' + $(this).val() + ',' ; 4 data = data + point ; 5 }) 6 var data = '{' + data.slice(0, -1) + '}' ;
↓
Ajaxでデータが飛んできたPHPにおいては、データベースからフィールド名を取得する。
$prepared、$execute、$valuesの変数に、データを入れておく。
lang
1$pdoStatement = $pdo->query("SELECT * FROM テーブル名 LIMIT 0"); 2$columns = array(); 3$prepared = "" ; 4$execute = "" ; 5for ($i = 1; $i < $pdoStatement->columnCount()-1; $i++) { 6 $meta = $pdoStatement->getColumnMeta($i); 7 $point = $meta['name'] ; 8 $prepared = $prepared.$point."," ; 9 $execute = $execute.sanitizeString(htmlspecialchars($_POST['".$point."'])).","; 10} 11echo $prepared; 12$prepared = substr($prepared,0,-1); //最後のカンマを削除。 13$execute = substr($execute,0,-1); //最後のカンマを削除。 14 15$values = ""; 16for ($i = 1; $i < $pdoStatement -> columnCount()-1; $i++){ 17 $point = "?"; 18 $values = $values.$point.',' ; 19}; 20$values = substr($values,0,-1); //最後のカンマを削除。 21*/
↓
上記で作った$prepared、$execute、$valuesの変数を用いてデータベースへの反映処理をする。
lang
1$st = $db->prepare('INSERT テーブル名 (".$prepared.") VALUES(".$value.") '); 2$result = $db -> execute($st,array($execute));
以上のように、試行錯誤しながらやってみましたが、結局どこがうまくいっていないのかも分からず、とりあえずシンプルに手間のかかる方法(50個について全て手で記述する方法)で対応しています。
一般的に、このような時はこうやって処理するというのが分かれば大変ありがたいです。
長文で申し訳ございません。
よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/02/01 03:36