質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.37%

ajax通信後のPHPの記述場所は?

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 989

score 14

目的

<form>で、講習の予約情報(顧客氏名、講習名、講習日時、他)をDBに登録したいと思います。
基本的には、予約の重複は避けたいので重複チェックをするのですが、まれに重複を受け付ける場合もあるため、確認ダイアログにて人の判断を反映させる仕組みが必要だと考えます。

環境

HTML、JAVASCRIPT(JQUERY)、PHP、SQLSERVER

現状

regist.php
該当する講習の予約状況を調べ、定員に達していなければ仮予約ボタンを表示する。
仮予約ボタンをクリックして自身にsubmitする。
PHP→DBにて、主キーとなる項目のみinsertする(仮予約枠を確保するイメージ)。併せて本登録用のフォームを表示する。
formに入力して、本登録ボタンでajax通信を実施する(→check_booking.php)。

check_booking.php
ajax通信を受けて、同じ顧客の予約情報(講習日の前後3カ月)がDBにあるか重複の確認をする。
PHP→DBにて該当するデータ数をカウントして結果をajaxに戻す。

想定中のこと

重複がなければ予約情報を登録する
(ajaxに戻ってきたカウントが0なら、全ての予約情報を仮予約枠に対しupdateする)

重複がある(カウントが1以上)場合、confirmダイアログを表示して処理を分岐する
「OK」    → 全ての予約情報を仮予約枠に対しupdateする
「キャンセル」→ 仮予約枠をdeleteする

お聞きしたいこと

ajaxによる通信が成功したら.done()の中の処理が行われるはずで、javascriptのconfirmなどは記述できると思いますが、PHPでDBを操作する処理をどこに記述したらいいのかが分かりません。

「想定中のこと」を実現するために、以下のことをご教示願います。
1.confirmや、update・delete等の処理を記述する具体的な場所。
2.「ajax使うならこうすべき」などのアドバイス。
3.「そもそも、処理の流れをこうするべき」などのアドバイス。

よろしくお願いします。

ご意見をいただき質問内容を具体的にします。

そこは質問を編集して他者に伝わる表現に調整してもらえたらと。

ajax通信の結果、重複するデータがあれば1以上の数値が、なければ0が.done()のdataとして戻ってくる想定です。

regist.php内

<form method="POST" id="regist_form">
    <input 以下省略… >
    <button type="submit" name="mode" value="chkBooking" >登録</button>
</form>
$(function() {
    $('#regist_form').submit(function(event){
        //HTMLでの送信をキャンセル
        event.preventDefault();
        // 送信するフォーム要素を取得
        var regist_data = $('#regist_form').serializeArray();
        // POST用配列に変換する
        var postData = {};
        var name = '';
        var val = '';
        for (var key in regist_data) {
            name     = regist_data[key]['name'];
            val     = regist_data[key]['value'];
            postData[name] = val;
        }

        //Ajax通信を行う処理
        var ajax_res = $.post({
                url:"./ajax_check_booking.php",
                type:"post",
                data:postData
        })
        .done(function(data,textStatus){
            //通信成功時の処理
**通信に成功したらdataの値により、0だったら仮予約枠に情報をupdateしたり、1以上だったらconfirmダイアログを出してOkならupdate、キャンセルなら予約枠のデータをdeleteしたい**
        })
        .fail(function(textStatus){
            //通信失敗時の処理
            alert('通信に失敗しました/' + textStatus);
        })
    });
});

check_booking.php

//POSTされたデータの重複を判定する
if($_POST){
    //SQLを投げて重複するデータ数を返す関数
    $dup = check($_POST);
}
echo $dup['count_id'];

処理の流れとしては.done()の部分でDB処理をさせたいのですが、.done()内にPHPは記述できないと思います。
どこにDB処理をさせるPHPを書くべきでしょうか?

重ねてお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

どこまでわかっていてどこがわかっていなくて、
今どこまでできていてどこができていないのか、なんだかふわっとする内容なので
ふわっとした回答にしかなりませんが。

PHPでDBを操作する処理をどこに記述したらいいのかが分かりません。

PHPファイルに書いてください。
ajaxで実行する先のURLにそのPHPが動作するURLを記述すると良いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/11 10:59

    そうですね。
    その方がコードもシンプルになりそうです。
    早速検討してみます。アドバイスありがとうございます!

    キャンセル

  • 2019/08/11 11:25

    ただ、注意点は実際に送信するときのチェックではないため、
    「いいえ」の場合はボタンを非活性にするとかの工夫は必要です。

    キャンセル

  • 2019/08/11 11:30

    注意点に留意して書いていきます。
    重ね重ね、ありがとうございます!

    キャンセル

+1

ご質問はまだ要求定義段階の内容なので、まずは何をどうしたいかを
きっちり具体化することです
その上でシステム側で何が必要か仕様を絞り込んでいきます。

講習の予約と言うことですが、まずはユーザー登録が必要です
ユーザー管理ができていないと不正な仮登録が多発します
ユニークにするかしないかはおいておいて、講習を予約する人は事前に
ユーザー登録させてください。
その上でログインしたIDを利用して講習予約をします。

ログインIDを利用してばajaxでも普通のsubmitでも好きに使えばよいでしょう

仮予約をそうていしているのであれば、十分な席数がない場合、
仮予約開始から完了までの時間制限をなるべく短くすることです。
予め必要事項はユーザー登録の際に別途入力しておいてもらうことで
仮予約内の作業は選択肢形式でおこない手入力がなるべく発生しないようにしてください

また必要に応じてキャンセル待ちの優先順位番号の発行などあると便利かも

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/09 14:04

    ご回答ありがとうございます。
    キャンセル待ちの事まで考えていませんでした。早速検討して盛り込みたいと思います。
    今後ともよろしくお願いいたします。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る