formから配列を用いてPOSTされたデータを受け取って、UPDATEしたいのですが、、
配列を受け取るとこまではなんとかなりましたが、そこからのコードがよくわかっておりません。
とりあえず、普通にUPDATEする時(一行だけとか)のコードを書いて、そこから始めればいいかと思い、下記に記載いたします。
PHP
1// POSTの受取 2$ary = $_POST['data']; 3$row_ct = count($ary); 4 5for($i = 0; $i < $row_ct; $i++) { 6$row['data'][$i]['id'] = $_POST['data'][$i]['id']; 7$row['data'][$i]['dakoku'] = $_POST['data'][$i]['dakoku']; 8$row['data'][$i]['hour'] = $_POST['data'][$i]['hour']; 9$row['data'][$i]['minutes'] = $_POST['data'][$i]['minutes']; 10} 11// 一応確認 12// 2行データの例 13print_r($_POST); 14 15// 結果(コードとは別です。表示させただけ) 16Array([data]=>Array([0]=>Array(['dakoku']=>○○['hour']=>○○['minutes']=>○○['id']=>○○) 17[1]=>Array(['dakoku']=>××['hour']=>××['minutes']=>××['id']=>××))) 18 19// 基本的な?DBへのコード 20try{ 21$dbh = new PDO(DSN, DB_USER, DB_PASSWORD); 22$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 23$stmt = $dbh->prepare( 24"UPDATE dakokus SET dakoku = ?, hour = ?, minutes = ? WHERE id = ?"); 25 26$stmt->bindParam(1, ???(dakoku), PDO::PARAM_STR); 27$stmt->bindParam(2, ???(hour), PDO::PARAM_STR); 28$stmt->bindParam(3, ???(minutes), PDO::PARAM_STR); 29$stmt->bindParam(4, ???(id), PDO::PARAM_STR); 30 31$stmt->execute(); 32} catch(PDOException $e) { 33echo $e->getMessage(); 34exit; 35}
上記のようにまずは書きました。
配列の取得にforeachでまわすのかなと思ったのですが、、、、
まだ使ったことがほとんどないので、よくわからず、質問させていただきました。
※例外処理等は省略しています。
[追記]
回答者様に教えていただきましたコードにて変更を加えました。
PHP
1try{ 2$dbh = new PDO(DSN, DB_USER, DB_PASSWORD); 3$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 4// 変更点 5foreach($ary as $row) { // 質問上部で$ary = $_POST['data']としていたので、$aryでもいいのかと思い、、、 6$stmt = $dbh->prepare( 7"UPDATE dakokus SET dakoku = ?, hour = ?, minutes = ? WHERE id = ?"); 8 9$stmt->bindValue(1, $row['dakoku'], PDO::PARAM_STR); 10$stmt->bindValue(2, $row['hour'], PDO::PARAM_INT); 11$stmt->bindValue(3, $row['minutes'], PDO::PARAM_INT); 12$stmt->bindValue(4, $row['id'], PDO::PARAM_INT); 13 14$stmt->execute(); 15} 16} catch(PDOException $e) { 17echo $e->getMessage(); 18exit; 19} 20
下記のようにコードを書き直してみました。
結果なのですが、、、どうもUPDATEされておりません。。。
エラー的なものは表示されませんが、、、、
わからないのですが、print $ary . "/" . $row;のようにしてみると
ArrayArrayArray / Arrayと表示されました。
使い方などが間違っているのかもしれません。。。ご指摘ください。
[追記]
ハードルが高いものの中回答いただきありがとうございます。
さて、現在悩んでいるのは教えていただいたコードを入れていくだけではなぜか、値まで辿り着かないという部分です。
頭をリセットするために、最初から少しずつprint_rしながらやってみました。
PHP
1// formからのname(確認のために記載だけ。。。) 2name=data[添字]['dakoku'] 3 4$ary = $_POST['data']; 5print_r($ary); 6// 結果 7// Array([0]=>Array(['dakoku']=>○○['hour']=>○○['minutes']=>○○['id']=>○○)[1]=>Array(['dakoku']=>××['hour']=>××['minutes']=>××['id']=>××))) 8 9$row_ct = count($ary); 10print_r($row_ct); 11// 結果 12// 2 13 14for($i = 0; $i < $row_ct; $i++) { 15$row = $_POST; 16} 17print_r($row); 18// 結果 19// Array([data]=>Array([0]=>Array(['dakoku']=>○○['hour']=>○○['minutes']=>○○['id']=>○○)[1]=>Array(['dakoku']=>××['hour']=>××['minutes']=>××['id']=>××))) 20 21foreach($row['data'] as $key) { 22print_r($key); 23// Array(['dakoku']=>○○['hour']=>○○['minutes']=>○○['id']=>○○)Array(['dakoku']=>××['hour']=>××['minutes']=>××['id']=>××) 24 25print_r($row); 26// for文の結果と同じだが、2行2行の4行で表示 27 28print_r($key['data']); 29print_r($key['data'][0]); 30print_r($key['data'][0]['dakoku']); 31print_r($key['dakoku']);// ['hour']なども同様 32// Null(画面に何も表示なし) 33 34print_r($row['data']); 35// Array([0]=>Array(['dakoku']=>○○['hour']=>○○['minutes']=>○○['id']=>○○)[1]=>Array(['dakoku']=>××['hour']=>××['minutes']=>××['id']=>××))Array([0]=>Array(['dakoku']=>○○['hour']=>○○['minutes']=>○○['id']=>○○)[1]=>Array(['dakoku']=>××['hour']=>××['minutes']=>××['id']=>××)) 36 37print_r($row['data'][0]); 38// Array(['dakoku']=>○○['hour']=>○○['minutes']=>○○['id']=>○○)Array(['dakoku']=>○○['hour']=>○○['minutes']=>○○['id']=>○○) 39 40print_r($row['data'][0]['dakoku']); 41// Null(表示なし) 42 43
たぶん、変なことしてるんだと思うのですが、、、、
上記のようにいろいろやってみました。
他にも、いろいろやってると、なんか表示されたりしてましたが、、、
配列エラー?のようなものとか、、、、
forやforeachの動きから見ればと思ってこんな感じでやってしまいました。
どうも、値がヒットしないんですよね。。。
PHP
1foreach($row['data'] as $key) { 2print_r($key); 3print "<br><br>\n"; 4print "key['dakoku']=" . $key['dakoku'] . "<br>";
上記もやってみました。
// 結果
Array(['dakoku']=>○○['hour']=>○○['minutes']=>○○['id']=>○○)
key['dakoku']=
Array(['dakoku']=>××['hour']=>××['minutes']=>××['id']=>××)
key['dakoku']=
となりました。
また、、、for文のところを少し変えてみました
PHP
1for($i = 0; $i < $row_ct; $i++) { 2$row['data'][$i]['dakoku'] = $_POST['data'][$i]['dakoku']; 3$row['data'][$i]['hour'] = $_POST['data'][$i]['hour']; 4$row['data'][$i]['minutes'] = $_POST['data'][$i]['minutes']; 5$row['data'][$i]['id'] = $_POST['data'][$i]['id']; 6}
上記のfor文の場合は、上記のforeachの結果に○○や××が無い状態でした。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/22 03:50
2016/02/23 03:06