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

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

新規登録して質問してみよう
ただいま回答率
85.36%
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回答

1249閲覧

ajax通信でのエラーチェックを実装したいのですがうまくいきません

ulluegg

総合スコア8

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クリップ

投稿2020/04/20 15:54

スレッド式の掲示板を作成しています。データベースへの送信にajax通信を使用してデータを送信する際、エラーチェックを行う為、

・threadInsert.php <?php /* ------------------------------ 変数に格納 ------------------------------ */ /* タイトル */ $title = $_POST['title']; $title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); /* 名前 */ $name = $_POST['name']; $name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8'); /* 顔アイコン */ $icon = $_POST['icon']; /* 顔アイコン */ $category = $_POST['category']; /* メッセージ */ $message = $_POST['message']; $message = htmlspecialchars($message, ENT_QUOTES, 'UTF-8'); /* パス */ $passDefault = $_POST['pass']; $pass = htmlspecialchars($passDefault, ENT_QUOTES, 'UTF-8'); $pass = hash("sha256",$pass); /* ------------------------------ チェック処理 ------------------------------ */ $blank = array(' ',' '); $checkTitle = str_replace($blank, "", $title); $checkName = str_replace($blank, "", $name); $checkMessage = str_replace($blank, "", $message); $checkPass = str_replace($blank, "", $pass); if($checkTitle == ""){ p('noTitle'); return; } if($checkName == ""){ p('noName'); return; } if($icon == ""){ p('noIcon'); return; } if($category == ""){ p('noCategory'); return; } if($checkMessage == ""){ p('noMsg'); return; } if($checkPass == ""){ p('noPass'); return; }
・script <script type="text/javascript"> /* メッセージをDBへ登録 */ $(document).ready(function(){ /** * 送信ボタンクリック */ $('#send').click(function(){ /* POSTメソッドで送るデータを定義します var data = {パラメータ名 : 値}; */ var bbsData = { title : $('#title').val(), name : $('#name').val(), icon : $('#selectIconValue').val(), category : $('#category').val(), message : $('#message').val(), pass : $('#pass').val() }; /** * Ajax通信メソッド * @param type : HTTP通信の種類 * @param url : リクエスト送信先のURL * @param data : サーバに送信する値 */ $.ajax({ type: "POST", url: "/src/server/threadInsert.php", data: bbsData, async:false, /** * Ajax通信が成功した場合に呼び出されるメソッド */ success: function(data, dataType){ if(data == 'noTitle'){ alert("タイトルを入力してください"); }else{ alert(data); } /*location.href="/index.html";*/ }, /** * Ajax通信が失敗した場合に呼び出されるメソッド */ error: function(XMLHttpRequest, textStatus, errorThrown){ /* エラーメッセージの表示 */ alert('Error : ' + errorThrown); } }); /* サブミット後、ページをリロードしないようにする。 */ return false; }); }); </script> コード

この時、試しにタイトルが空白だった場合のエラーチェックのみを記述して動作を試したところ、アラートで「タイトルを入力してください」ではなく、else側の「'noTitle'」が出てきてしまいました。

success: function(data, dataType){ if(data == 'noTitle'){ alert("タイトルを入力してください"); }else{ alert(data)

dataのなかには「noTitle」が存在しているはずなのに、どうしてtureではなくfalseのほうになってしまうのでしょうか?
もしよろしければご教授お願い致します。

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

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

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

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

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

m.ts10806

2020/04/20 21:05

p()ってどういう実装になってるんでしょう。それ次第ですので、ご提示願います。
m.ts10806

2020/04/20 21:06

本件とは直接関係ないですが、画面出力がないところでhtmlspecialchars()を利用するのは間違いです。データの加工が発生するので、正しく入力値のチェックができません。
ulluegg

2020/04/20 23:32

失礼しました。p()は function p($str){ print $str; } で文字を出力させる関数として使用しています。else側のアラートで”noTitle”と出力できているので関数としては動いていると思います
guest

回答2

0

dataのなかには「noTitle」が存在しているはずなのに、どうしてtureではなくfalseのほうになってしまうのでしょうか?

「noTitle」ではないからです。
ブラウザの開発ツールを使って、data とそもそものレスポンスを確認してみると良いです。

あと、追記・修正依頼欄ですでに指摘されている箇所もありますが、全体的におかしいです。

掲示板の基礎から学んでみては?
参考)
【PHP初心者向け】セキュアな掲示板を最小構成から作る

投稿2020/04/20 22:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

  • 「async:false」は非推奨です、
  • successは非推奨です、チェーンしてdoneで処理してください
  • dataTypeを指定したほうがよいでしょう

投稿2020/04/24 02:47

yambejp

総合スコア116623

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問