前提
PHPでログインページを作っています。
MySQLからデータを取得する処理を実装中に問題に遭遇しました。
実現したいこと
- ユーザーがフォームへメールアドレス、パスワードを入力する
- xhrでPHPに送信
- PHP側で受け取ったメールアドレスをWHERE条件としてMySQLより取得
- メールアドレスがデータベースに存在すればパスワードを照合、存在しない・パスワード不一致は同一のエラーを返す
発生している問題・エラーメッセージ
ステータスコード500が返され、PHPでのエラーメッセージ表示設定
PHP
1<?php 2ini_set("display_errors", 1); 3error_reporting(E_ALL);
を行っても表示されないため、トラブルシューティングが出来ず困っています。
新規登録処理用の別の.phpに含まれているINSERT文では正常に処理されます。
該当のソースコード
PHP
1function login_check(){ 2 $pdo = new PDO( 3 'mysql:host=localhost;dbname=database;', 4 'user', 5 'password' 6 ); 7 $mail = $_POST['mail']; 8 $password = $_POST['passwd']; 9 10 try { 11 $stmt = $pdo->prepare('SELECT * FROM account WHERE mail = :mail'); 12 $stmt->bindValue(':mail', $mail, PDO::PARAM_STR); 13 $response = $stmt->execute(); 14 if($response){ 15 $data = $stmt->fetch(); 16 $saved_passwd =$data['password']; 17 if(password_verify($password, $saved_passwd)){ 18 $return = 'match'; 19 }; 20 }else{ 21 $return = 'wrong'; 22 } 23 24 }catch(PDOException $e){ 25 echo $e->getMessage(); 26 $return = 'error' 27 } finally { 28 $pdo = null; 29 } 30 31 return $return; 32}
MySQLへの接続は関数内で行い、戻り値をswitchで分岐させクライアントへレスポンスする、といった構造にしています。
補足情報(FW/ツールのバージョンなど)
phpバージョン:7.0、サーバー:XREA
「PHP側で受け取ったメールアドレスをWHERE条件としてMySQLより取得」MySQLより何を取得するのですか?
「メールアドレスがデータベースに存在すればパスワードを照合、存在しない・パスワード不一致は同一のエラーを返す」"、"は何の意味ですか? 場合によっては違った意味に捉えられるのでわかりやすく書き直して下さい。"・"は何の意味ですか?「または(OR)」という意味ですか「かつ(AND)」という意味ですか?
順番にお答えさせていただきます。
>MySQLより何を取得するのですか?
メールアドレスを検索条件として、データベース上に一致するものがあれば、一致する行(カラム)を取得します。
>「または(OR)」という意味ですか「かつ(AND)」という意味ですか?
・メールアドレスがデータベースに存在すればパスワードを照合
・存在しない、またはパスワード不一致は同一のエラーを返す
これで理解いただけましたでしょうか?
こちらの記事を参考にしてエラー表示を有効にすることは出来ますか?
CORESERVERの記事ですがXREAも同じ業者が提供しているので似た仕様の可能性があります。
https://help.coreserver.jp/faq/php-error/
質問は編集できますので、適宜調整願います。
>phpバージョン:70
現在リリースされているバージョンに70というのはありません。
https://openstandia.jp/oss_info/php/version/
もしかしたら7.0のつもりかもしれませんが、7.3まではサポート終了しており7.4も今年11月までですので、早い段階で8系への切り替えをご検討ください。
https://qiita.com/bezeklik/items/72d1ff8393f66673e2bc
そういえば、XREAってサーバーのログは確認できませんか?
コード上で設定有効にできない仕様の場合、何かしらでエラーログ等を確認する手段はあるかと思います。
また、可能ならローカル環境作って出来上がったものを実際のWebサーバーにアップした方が良いと思いますが・・・(質問のコードの動作確認するのも多くの人はローカル環境だと思います)
回答2件
あなたの回答
tips
プレビュー
