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

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

新規登録して質問してみよう
ただいま回答率
85.50%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

2回答

1658閲覧

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

waiwai1010

総合スコア16

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2019/08/09 03:21

編集2019/08/09 10: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内

html

1<form method="POST" id="regist_form"> 2 <input 以下省略… > 3 <button type="submit" name="mode" value="chkBooking" >登録</button> 4</form> 5

jalascript

1$(function() { 2 $('#regist_form').submit(function(event){ 3 //HTMLでの送信をキャンセル 4 event.preventDefault(); 5 // 送信するフォーム要素を取得 6 var regist_data = $('#regist_form').serializeArray(); 7 // POST用配列に変換する 8 var postData = {}; 9 var name = ''; 10 var val = ''; 11 for (var key in regist_data) { 12 name = regist_data[key]['name']; 13 val = regist_data[key]['value']; 14 postData[name] = val; 15 } 16 17 //Ajax通信を行う処理 18 var ajax_res = $.post({ 19 url:"./ajax_check_booking.php", 20 type:"post", 21 data:postData 22 }) 23 .done(function(data,textStatus){ 24 //通信成功時の処理 25**通信に成功したらdataの値により、0だったら仮予約枠に情報をupdateしたり、1以上だったらconfirmダイアログを出してOkならupdate、キャンセルなら予約枠のデータをdeleteしたい** 26 }) 27 .fail(function(textStatus){ 28 //通信失敗時の処理 29 alert('通信に失敗しました/' + textStatus); 30 }) 31 }); 32});

check_booking.php

PHP

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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

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

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

投稿2019/08/09 03:30

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

waiwai1010

2019/08/09 05:30

ご回答ありがとうございます。 分かりにくい説明で申し訳ありません。 もう少し勉強します。
m.ts10806

2019/08/09 06:08

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

2019/08/11 01:04

コメントいただきありがとうございます。 質問を編集しました。内容が伝わるとよいのですが…。 よろしければご覧いただきアドバイスいただければ助かります。
m.ts10806

2019/08/11 01:08

いま、doneでdataをconsole.log(data); とすると、コンソールになんと出ますか?
waiwai1010

2019/08/11 01:16

早速ありがとうございます。 重複データが0件のもので試すと「0」、2件あるもので試したら「2」と出ます。
m.ts10806

2019/08/11 01:18

ではひとまず想定通り動いてますね。 重複チェックをするのに2って論理的におかしいといえばおかしいですが。
m.ts10806

2019/08/11 01:20

要はPHP側で出力した内容が基本的にそのまま返されるので。 データをやりとりしたいのでしたらdataType:"JSON"に指定してJSON形式でやりとりするのが通例ですが、今回のようにスポットな使い方ですと件数だけそのまま受け取るので十分と思います。
waiwai1010

2019/08/11 01:26

ものによっては、同一顧客が同じ内容の講習(日時は異なりますが)を複数回受けることを希望する場合もあるので、そのようなダミーデータを用意したもので試しました。 doneで受け取った結果によって、PHP→DB処理をさせるにはどこに記述をすればよいでしょうか?
m.ts10806

2019/08/11 01:38

>そのようなダミーデータを用意したもので試しました。 了解です。ただ本来は主キーなどで制限をかけたいところですね。 >doneで受け取った結果によって、PHP→DB処理をさせるにはどこに記述をすればよいでしょうか? 一度返す必要はないと思います。 Ajax→PHPで チェックした結果、OKであればそのままDB処理を行い、「OK」と結果を返し、 NGであれば「NG」を結果で返せば良いです。 つまり「チェック用PHP」ではなく、「登録用PHP」として「登録前のチェックを行う」というのが追加になるというイメージです。
waiwai1010

2019/08/11 01:44

重複がなければそのまま登録してもOKですが、重複があった場合は確認ダイアログで「そのまま登録する」か「キャンセルする」かを選びたいと思います。 check_booking.phpで、  echo"<script>confirm('そのまま登録しますか')</script>"; としても確認ダイアログは出ないようです。
m.ts10806

2019/08/11 01:46

それはJavaScriptの話なので、doneにconfirm書けばよいです。 で、「はい」を取ったら同じパラメータでAjaxでPHP実行。 要はdoneの中で条件によってAjaxを投げることになりますね。
waiwai1010

2019/08/11 01:53

なるほど!! ajaxのネストととらえていいでしょうか? 参考になりました。ありがとうございます!
m.ts10806

2019/08/11 01:55

>ajaxのネストととらえていいでしょうか? そうですね。 欲を言えばネストだとあまりコードの見栄えもよくないので、 重複チェックくらいならsubmit時ではなく入力時(blurとかchangeとかのタイミング)で行っておいても良いかなとは思います。
waiwai1010

2019/08/11 01:59

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

2019/08/11 02:25

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

2019/08/11 02:30

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

0

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

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

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

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

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

投稿2019/08/09 03:54

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

waiwai1010

2019/08/09 05:04

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問