前提・実現したいこと
jqueryでjson型のデータschedules, trip_idをpostしています。
例
"trip_id" : "";
"schedules" : {"0":{"startTime":[],"name":[],"requiredTime":[],"lat":[],"lng":[],"kind":[]},
"1":{"startTime":[],"name":[],"requiredTime":[],"lat":[],"lng":[],"kind":[]},
"2":{"startTime":[],"name":[],"requiredTime":[],"lat":[],"lng":[],"kind":[]}}
このデータをつかってpdoで一行ずつinsertしているのですがデータベースには更新されず、エラーメッセージも表示されません。
原因がわかる方教えてください。
該当のソースコード
php
1$insert_sql = 'insert into schedule (trip_id, start_time, destination_name, required_time, lat, lng, kind) '. 2 'values(:trip, :start, :name, :time, :lat, :lng, :kind)'; 3 4try { 5$schedules = $_POST['schedules']; 6$trip_id = $_POST['trip_id']; 7 8$dbh = new PDO($dsn, $dbUser, $dbPass); 9$stmt = $dbh->prepare($insert_sql); 10 11foreach ( $schedules as $count ) { 12 13 $stmt->bindValue(':trip',intval($trip_id), PDO::PARAM_INT); 14 $start_time = new DateTime($count['startTime']); 15 $start_time = $start_time->format('Y-m-d H:i:s'); 16 $stmt->bindParam(':start',$start_time, PDO::PARAM_STR); 17 $stmt->bindParam(':name',$count['name'], PDO::PARAM_STR); 18 $stmt->bindValue(':time',intval($count['requiredTime']), PDO::PARAM_INT); 19 $stmt->bindParam(':lat',$count['lat'], PDO::PARAM_STR); 20 $stmt->bindParam(':lng',$count['lng'], PDO::PARAM_STR); 21 $stmt->bindParam(':kind',$count['kind'], PDO::PARAM_STR); 22 23 24$stmt->execute(); 25 26$stmt = null; 27$dbh = null; 28 29}catch (PDOExceaption $e) { 30 err_log($e->getMessage()); 31 header('Content-Type: text/plain; charset=UTF-8', true, 500); 32 exit(); 33} 34} 35
javasctipt
1function insertSchedules(){ 2 "trip_id" : ""; 3 "schedules" : {"0":{"startTime":[],"name":[],"requiredTime":[],"lat":[],"lng":[],"kind":[]}, 4 "1":{"startTime":[],"name":[],"requiredTime":[],"lat":[],"lng":[],"kind":[]}, 5 "2":{"startTime":[],"name":[],"requiredTime":[],"lat":[],"lng":[],"kind":[]}}; 6 7 var sendSchedules = JSON.stringify(schedules); 8 var json = $.parseJSON(sendSchedules); 9 10 $.ajax({ 11 type: "POST", 12 url: "insertSchedules.php", 13 datatype: "json", 14 data:{ 15 'schedules': json, 16 'trip_id' : 1 17 }, 18 }).done( (data) => { 19 console.log(data); 20 return data; 21 }) 22 .fail( (data) => { 23 console.log(data); 24 }) 25 .always( (data) => { 26 }); 27}
試したこと
dateTime型をバインドするところでエラーが出ていたので、その部分を直していたらエラーメッセージは消えたのですが、
更新はされない状態になりました。
ご指摘にあったとおりにjson_decodeにデータを通してみたところ
$post_array = json_decode($schedules,true);
<b>Warning</b>: json_decode() expects parameter 1 to be string, array given in <b>/var/www/html/koba/plover/dao/insertSchedules.php</b> on line <b>53</b><br />
<b>Warning</b>: Invalid argument supplied for foreach() in <b>/var/www/html/koba/plover/dao/insertSchedules.php</b> on line <b>61</b><br />
が表示されてしまいました。
var_dump($_POST);の結果は以下です。 array(2) { ["schedules"]=> array(3) { [0]=> array(6) { ["startTime"]=> string(19) "YYYY-mm-dd hh:mm:ss" ["name"]=> string(9) "***" ["requiredTime"]=> string(1) "0" ["lat"]=> string(9) "00.000000" ["lng"]=> string(9) "000.000000" ["kind"]=> string(4) "**" } [1]=> array(6) { ["startTime"]=> string(19) "YYYY-mm-dd hh:mm:ss" ["name"]=> string(12) "****" ["requiredTime"]=> string(2) "60" ["lat"]=> string(9) "00.000000" ["lng"]=> string(10) "000.000000" ["kind"]=> string(0) "" } [2]=> array(6) { ["startTime"]=> string(19) "YYYY-mm-dd hh:mm:ss" ["name"]=> string(13) "******" ["requiredTime"]=> string(2) "30" ["lat"]=> string(9) "00.000000" ["lng"]=> string(10) "000.000000" ["kind"]=> string(4) "****" } } ["trip_id"]=> string(1) "1" }
回答3件
あなたの回答
tips
プレビュー