質問: null; ``` (補足) ``` ajaxのクリックイベント部分のhtmlの記述 ``` ### 発生している問題・エラーメッセージ DBの更新がされず、ajax通信も成功しているのかが不明です。。。 申し訳ございません。ブラウザが更新されるだけで特に変化なしです。 ### 試したこと ググりました。 jqueryの変数をphpに渡すことと、その中でajaxを調べ、上記のソースコードはググりながらコピペしてカスタムしました。 ### 補足情報(FW/ツールのバージョンなど) php:5.7 mysql:5.7.28 ### ここにより詳細な情報を記載してください。
回答: > > DBの更新がされず、 > > > まずSQLのミスがありますね。それは既に指摘がある通り。 ただ、SQLはPHPからすると外部の仕組みです。 絶対にPHPからしか実行できないわけではありません。 他の言語からも実行できますし、ターミナルやツールなどからログインして直接実行することも出来ます。 直接実行して想定通りに動かないSQLであれば当然PHPなど外部から実行しても動きません。 変数など入力を受け付ける可変な情報はひとまず固定値にして直接実行して想定通りの結果が得られるか確かめてから、利用しましょう。 そうすることで、何か問題が起きても「SQLの構文自体は問題ない」と、1つ可能性を潰せるからです。 いきなりPHPから変数(やプリペアドステートメント)で実行してしまうと、 PHPのコードがいけないのか、SQLがいけないのか、値がきちんとPHPから渡せていないのか、通信状態が悪いのか、、、、、様々な可能性と向き合わなければいけません。 1つでも可能性を潰しておけば、考慮すべき部分が減るので、確かめやすくなります。 > > ajax通信も成功しているのかが不明です。。。 > > > 通信自体の成否やPHP側の出力はJavaScript側で取得可能です。 jQueryリファレンスなどを確認されると分かりますが、様々な引数が返ってくることが分かります。 > > success > > Type: Function( Anything data, String textStatus, jqXHR jqXHR ) > > error > > Type: Function( jqXHR jqXHR, String textStatus, String errorThrown ) > > > successにきたとしてもtextStatusは必ず確認しておいたほうが良いです。 ちなみに受け取る側の引数なので必須ではありません。 が、これだけ返してくれるのでなるべく全て見ておくようにしておいたほうが良いでしょう。 alert()などで直接画面に出す必要はなく、console.log()でコンソールに出すだけでも良いです。 ※もしユーザー向けに本番リリースするのであれば除くべき AjaxではPHP側での出力をsuccessの「data」で拾ってくれる仕組みがあるので、何かしら出力するようにして置いた方が良いです。 別に1とか0とかでも良いです。何も返してないことで、余計にPHP側の状況を不明にしてしまっています。 また、PHP側にDBの処理をさせるのであれば、エラーを捕捉する仕組みを導入すべきです。 ``` try{ //PDO接続からトランザクション、DB処理、コミット/ロールバックまで }catch (PDOException $e){ echo $e->getMessage(); //できれば$e全部ログ出力 } ``` PHPマニュアル:エラーおよびエラー処理 さらっと最後に書きましたが、Ajaxもデバッグできるような仕組みを導入しましょう。 ブラウザのデベロッパツールでも通信状態を確認することができますし、 PHPコードがどこまで通っているか確かめたかったらテキストファイルに状況を書きだすでも良いですし、デバッガ導入も有効でしょう。 私としてはAjax実行するといっても結局POST/GETでリクエストを送るにすぎないので、JavaScriptからでなく普通にform送信でPOST/GETリクエストを送るのが結構手っ取り早い気もします。ブラウザで見れますしね。 蛇足: success/errorは割と古めの書き方として認識されています。 本件落ち着きましたら、新しい書き方もチャレンジしてみましょう。 おじさんが若い時はね$.ajax()のオプションでsuccessとかerrorとか指定していたんだよ(追憶)