seatsはグローバルに移動します
ローカルじゃだめでした
ここまで
seat.js
$(function(){
//console.log("hoge");
var seats = [];//配列
$('#ymd').on('change',function(){
$.ajax({
url:'api/get_seat.php',
type:'get',
data:{'ymd':$('#ymd').val()},
dataType:'json',
})
.done(function(d){
//console.log(d);
$('#bus').empty();
for(i=0; i<d.length; i++){
seats[d[i].seat_id] = 0;//予約まだしていません
console.log(seats);
var elehoge = $('<div>').text(d[i].seat_id);
//予約済みかしら
if(d[i].reserved == 1){
//予約済みクラスを付与
elehoge.attr('class','reserved');
}else{
//まだ空ですよ
elehoge.attr('class','emp');
}
$('#bus').append(elehoge);
}
/*空席のクリック*/
$('#bus div.emp').on('click',function(){
//console.log($(this).css('background-color'));
var num = $(this).text();//クリックされた要素に何の座席番号が記述してあるか取得
//背景色を変え座席番号を取得し配列に入れる
if($(this).css('background-color')=='rgb(255, 255, 255)'){
$(this).css('background','#afa');
seats[num] = 1;
}else{
$(this).css('background','#fff');
seats[num] = 0;
}
});
})
.fail(function(){
alert('NG');
});
});
//決定ボタンを押したとき
$('#b1').on('click',function(){
console.log(seats);
});
});
これでどこが自分が申し込んだ席かは分かった
これをpostできれば楽ちんなんだが
配列、奥行のある情報は送れない
よってカンマ区切りのテキストに直したい
受け取ったphp側でまたそれを配列に組み立てなおす
これをもとに予約番号だけを取り出す
//決定ボタンを押したとき
$('#b1').on('click',function(){
console.log(seats);
//配列はそのままで送れないので文字列づくり
var seatStr = "";//初期値は空文字
for(var i=1; i<seats.length ; i++){//座席番号は1から始まるが勝手に0番が付与されているので-1する
if(seats[i]==1){//席が予約されていたら
seatStr += i + ',';//席番号とカンマをつなげていく。予約席番だけが追加される
}
}
console.log(seatStr);
最後のカンマだけは取りたい
(いま17,18,19,20,となっている)
C系にはサブストラというメソッドがある
//最後のカンマだけは取りたい
var hoge = seatStr.substr(0,seatStr.length -1);
console.log(hoge);
とれた
(ちなみにこれが「勝手に追加された0番の配列の中身」)
get_seat.phpをリネームして保存
set_seat.phpとする
さてカンマが入っている文字はgetでは送れない
postにしましょう
UPDATE文というのは内容の書き換えに使う
UPDATEとSETを用いる
$sql="UPDATE seats SET reserved = 1";
$sql .= " WHERE ymd=:ymd AND seat_id=:seat_id";
WHERE句がないと全部予約済みになっちゃうのでWHEREでしぼる
6席予約したら6回まわさないといけない
カンマ区切りのああいうデータを配列にいれなおす関数がある
古い関数であまり使わないらしい
explode
文字列を分解して配列化してくれるので便利らしい
第一引数は区切り文字
第二は配列化したいやつ
これをforeachでまわしてデータに入れる
foreach($sArr as $val){
$stmt->bindValue(":ymd",$_POST["ymd"],PDO::PARAM_STR);
$stmt->bindValue(":seat_id",$val],PDO::PARAM_INT);//いちおう悪さができないように
$stmt->execute();
}
seat.jsに戻って、
読みこまれるファイルからみてのパスだから
url:'api/set_seat.php',
でよろしい