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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

2554閲覧

phpで作ったwebシステムのログイン画面で「文字が正しくありません。」と出てログインできない

hh_ww

総合スコア22

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/03/23 01:00

編集2020/03/23 02:14

表題の通りですが、phpで作ったwebシステムのログイン画面で「文字が正しくありません。」と出てログインできません。
どのような原因が考えられますでしょうか?

ちなみに、ログインのIDとパスワードはmysqlに登録しており、間違ったID等を入力すると、phpで作りこんだエラーを出すのでmysqlまでは見に行って処理ではじくことはできているようです。

・環境
mysql8.0
php7.3.9
ブラウザ IE

試した内容は以下です。
・google等で「文字が正しくありません。」で調べたとこころ、ブラウザのキャッシュクリアが有効と聞き試したがかわらず
・F12を押してエラーを確認するもなにも見当たらず
・phpやmysqlのエラー内容にもそれらしきものは見当たらず

追記1
当システムは、これまではphp5.6、Mysql5では正常に動いており、
ログイン画面のソースは変わっていませんので、ソースではないのではないかと推測しております。
サーバーを別のサーバーへ移行しているのでMysqlからDBをエクスポート→インポートをしているのでそこで文字コードがおかしくなったのかなと思いましたが、
該当のユーザーログイン情報は元のutf8_general_ciで問題なさそうに見えました。

追記2
エラールートは以下の「throw new Error(obj.msgCode);」部分です。

javascript

1/******************************************************************************** 2Title : Login.js 3*********************************************************************************/ 4 5$(function() { 6 7 if(!$.support.opacity){ 8 9 alert('このメッセージが表示された場合は、F12を押して表示された画面の\n右上のドキュメントモード切り替えで9以上を選択してください。'); 10 } 11 12 // ログインユーザー表示エリアを非表示にする(HTMLを取り除く) 13 $('#areaLoginUser').remove(); 14 15 // 開いたときにユーザーIDにフォーカスする 16 $('#userID').focus(); 17// setTimeout(function() {$('#userID').focus();}, 1000); 18}); 19 20// ログインボタンクリック 21$(document).on('click', '#btnLogin', function() { 22 23 try { 24 var objPost = new Object(); 25 objPost.userID = $('#userID').val(); 26 objPost.password = $('#password').val(); 27 28 if (objPost.userID == '') throw new Error('ユーザIDを入力してください'); 29 if (objPost.password == '') throw new Error('パスワードを入力してください'); 30 31 var html = ''; 32 html += '<div style="width: 50px; height: 40px; background-color: white; opacity: 0.8; margin: auto; border: 1px #ddd solid;border-radius: 8px; padding-top: 10px;">'; 33 html += ' <img src="../Common/Images/loading.gif" />'; 34 html += '</div>'; 35 $('#messageArea').html(html); 36 37 $.ajax({ 38 url: '../Login/GetUserInfo.php?' + mySerialDate(), 39 data: {'objPost' : $.toJSON(objPost)} 40 }) 41 .done(function(data) { 42 try { 43 var obj = $.evalJSON(data); // PHPからJSON形式で受け取る 44 45 // ログイン失敗ならメッセージを表示 46 if (obj.resultCode == 'OK') { 47 48 // ログイン成功ならお知らせ画面に移動 49 location.href = '../Information/Information.php?' + mySerialDate(); 50 51 } else { 52 53 switch (obj.msgCode) { 54 case 'LoginUserError': 55 throw new Error('ユーザーIDが登録されていません'); 56 break; 57 case 'PasswordError': 58 throw new Error('パスワードが違います'); 59 break; 60 default: 61 throw new Error(obj.msgCode); 62 break; 63 } 64 } 65 66 } catch (e) { 67 var message = '<label style="color: red;">'+escapeHTML(e.message)+'</label>'; 68 $('#messageArea').html(message); 69 } 70 }) 71 .fail(function(XMLHttpRequest, textStatus, errorThrown) { 72 alert("AjaxError\n\n FileName : Login.js\n Module : btnLogin.click\n\n StatusCode : "+XMLHttpRequest.status+"\n ReadyState : "+XMLHttpRequest.readyState+"\n Status : "+textStatus+"\n Message : "+errorThrown); 73 $('#messageArea').html(''); 74 }); 75 76 } catch (e) { 77 var message = '<label style="color: red;">' + escapeHTML(e.message) + '</label>'; 78 $('#messageArea').html(message); 79 } 80}); 81 82// クリアボタンクリック 83$(document).on('click', '#btnClear', function() { 84 85 $('#userID').val(''); 86 $('#password').val(''); 87 $('#messageArea').html(''); 88 89 $('#userID').focus(); 90});

php

1<?php 2/******************************************************************************** 3 Title : Login.php 4*********************************************************************************/ 5require_once dirname(__FILE__).'/../../.ini.php'; 6require_once dirname(__FILE__).'/../Common/Const.php'; 7require_once dirname(__FILE__).'/../Common/MyFunction.php'; 8?> 9<!DOCTYPE html> 10<html> 11<head> 12 <title></title> 13 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 14 <meta charset="utf-8"> 15 <meta name="viewport" content="width=device-width, initial-scale=1"> 16 <link rel="stylesheet" href="../Common/CSS/Common.css"> <!-- 共通CSS --> 17 <link rel="stylesheet" href="./Login.css"> <!-- 専用CSS --> 18</head> 19<body> 20 <script src="../Common/Library/js/jquery-3.1.0.min.js"></script> --> <!-- jQuery 3.1 --> 21 <script src="../Common/Library/js/jquery-1.12.4.min.js"></script> <!-- jQuery 1.12.4 --> 22 <script src="../Common/Library/js/jquery.json-2.6.0.min.js"></script> <!-- jQuery JSON 2.6 --> 23 <script> 24 // タイトル 25 window.document.title = '<?php echo MainTitle;?>'; // Const.php が必要 26 27 var ROOT_FOLDER = '<?php echo ROOT_FOLDER; ?>'; // .ini.php が読み込まれている必要あり 28 </script> 29 <script src="../Common/MyFunction.js"></script> <!-- 共通関数 --> 30 <script src="./Login.js"></script> <!-- 専用スクリプト --> 31 32 <div id="main"> 33 34 <!-- ヘッダー --> 35 <?php require_once dirname(__FILE__).'/../Common/Header.php'; ?> 36 37 <!-- ログインエリア --> 38 <div id="areaLogin"> 39 <form action="" onsubmit="return false;"> 40 41 <!-- ユーザID --> 42 <label id="lblUserID" class="login lblUserID">ユーザID</label><input class="login" id="userID" type="text" value="" style="ime-mode:disabled;" /> 43 <div style="clear:both;"></div> 44 45 <!-- パスワード --> 46 <label id="lblPassword" class="login lblPassword">パスワード</label><input class="login" id="password" type="password" value="" style="ime-mode:disabled;" /> 47 <div style="clear:both;"></div> 48 49 <!-- メッセージエリア --> 50 <div id="messageArea"></div> 51 <br /> 52 53 <!-- ボタンエリア --> 54 <div style="text-align: center;"> 55 <!-- ログイン --> 56 <input id="btnLogin" class="btnDefault btnLogin" type="submit" value="ログイン" /> 57 <!-- クリア --> 58 <input id="btnClear" class="btnDefault btnCancel" type="button" value="クリア" /> 59 </div> 60 </form> 61 </div> 62 63 <!-- フッター --> 64 <?php require_once dirname(__FILE__).'/../Common/Footer.php'; ?> 65 </div> 66</body> 67</html>

php

1<?php 2require_once dirname(__FILE__).'/../Common/SessionStart.php'; // セッション開始用 3require_once dirname(__FILE__).'/../Common/DB/DB.php'; 4require_once dirname(__FILE__).'/../Common/SetLog.php'; 5 6$myName = 'GetUserInfo.php'; 7 8// ポストデータを取得 9$objPost = json_decode($_POST['objPost'], true); 10 11$userID = ''; 12$userName = ''; 13$msgCode = ''; 14$flagLogin = ''; 15 16$role_edit_master = 0; 17$role_edit_order = 0; 18 19try { 20 $db = new DB(MY_DBNAME, MY_DBUSR, MY_DBPASS, MY_DBTYPE, MY_DBHOST); 21 22 $sql = ' 23 SELECT user_id, user_name, password, full_name, role_edit_master, role_edit_order 24 FROM mst_user 25 WHERE 26 UPPER(user_name) = UPPER(:user_name) 27 '; 28 $params = array(':user_name' => $objPost['userID']); 29 30 $row = $db->getRow($sql, $params); 31 32 if (empty($row)) { 33 $msgCode = 'LoginUserError'; // ユーザーIDが登録されていません 34 } else { 35 $password = $row['password']; 36 37 if (trim($password) === trim($objPost['password'])) { 38 39 $userID = $row['user_id']; 40 $userName = trim($row['full_name']); 41 42 $role_edit_master = $row['role_edit_master']; 43 $role_edit_order = $row['role_edit_order']; 44 45 $flagLogin = 'OK'; 46 } else { 47 $msgCode = 'PasswordError'; // パスワードが違います 48 } 49 } 50 51 $db = null; 52 unset($db); 53 54 $_SESSION["yousetsu_info"] = array( 55 "user_id" => $userID, 56 "user_name" => strtoupper($objPost['userID']), 57 "full_name" => $userName, 58 "role_edit_master" => $role_edit_master, 59 "role_edit_order" => $role_edit_order 60 ); 61 62 $result = array( 63 'resultCode' => $flagLogin, 64 'msgCode' => $msgCode, 65 'userName' => $userName 66 ); 67 68} catch (Exception $e) { 69 70 $result = array( 71 'resultCode' => 'error', 72 'msgCode' => mb_convert_encoding($e->getMessage(), SYSTEM_CHAR_CODE, "auto"), 73 'userName' => '' 74 ); 75 76 // エラーログ出力 77 setLog($myName, 'error', $e->getMessage()); 78} 79 80echo json_encode($result); //JSONにエンコード

css

1@charset "UTF-8"; 2/******************************************************************************** 3Title : Login.css 4*********************************************************************************/ 5 6#areaLogin { 7 position: absolute; 8 top: 150px; 9 left: 50%; 10 margin-left:-110px; 11 width: 220px; 12 height: 150px; 13} 14 15label.login { 16 font-size: 12px; 17 display: block; 18 width: 80px; 19 float: left; 20 text-align: left; 21 padding-top: 6px; 22} 23 24input.login { 25 float: right; 26 font-size: 12px; 27 width: 120px; 28 height: 22px; 29 margin-bottom: 10px; 30 padding: 5px 2px 0px 3px; 31} 32 33input.btnDefault { 34 font-size: 12px; 35 width: 64px; 36 height: 26px; 37} 38 39#messageArea { 40 height: 34px; 41 text-align: center; 42 font-size: 12px; 43}

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

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

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

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

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

nanami12

2020/03/23 01:15

クローム等、別のブラウザだとどうなりますか?
hh_ww

2020/03/23 01:39

回答ありがとうございます。 現在、IE以外使えないセキュリティの厳しい環境ですので、Chrome等の他のブラウザでは確認できません。 ちなみに、これまではphp5.6、Mysql5では正常に動いていたので、ソースも変わっていませんし、その可能性はひくいのかなと思います。 もしかすると、MySQL等をバージョンアップしているのでMysqlのエクスポート→インポートをしているので文字コードがおかしくなったのかなと思い調べましたが、utf8_general_ciで問題なさそうに見えました。
nanami12

2020/03/23 01:44

ie はマイクロソフトが企業に対し、使用しないで下さいといわれている 古いタイプのブラウザでかつもうサポートもされなくなります。 クロームで実行してどうなるか試したほうがよいとおもいます。 もう、サポートされなくなるブラウザにこだわるのは。。。です
hh_ww

2020/03/23 01:47

そうですよね。 私もそう思うのですが、企業全体でそういったルールのようでしばらくはまだIEで運用するものだと思われます。
hh_ww

2020/03/23 01:52

ちょっと社内的にはダメなのですが、Chromeで実施してみました。 このようなエラーがでています。 「Unexpected token < in JSON at position 0」 変数の値を取得できていないときに出るエラーのようです。 社内のセキュリティの影響か、エラー内容が違うのでIEと違うところでエラーとなっているように見受けられます。
m.ts10806

2020/03/23 01:54

現象が再現するコードをご提示ください。
m.ts10806

2020/03/23 02:01

変わってないと言われても、我々には比較する元がないので、なんとも。
hh_ww

2020/03/23 02:05

それは把握しております。 しばらくお待ちください。
takasima20

2020/03/23 02:06

ログになんか出てないスか? JSON を parse してるあたりでなんかマズってるっぽい気がしますけど、その前あたりで不具合がないか少しづつ検証するのかなあ。
FKD

2020/03/23 05:26

ajaxのdatatypeが未指定なのは関係ありませんか?
guest

回答3

0

素の php のエラーメッセージで、「文字が正しくありません。」と出ることはないと思います。
「文字が正しくありません。」と出しているのはあなたのコードだと思われるので、条件分岐を重点にデバッグすると良いです。

投稿2020/03/23 01:18

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hh_ww

2020/03/23 01:34

回答ありがとうございます。 ソース上にはそういった作りこみはしておらず、mysqlのエラーをそのまま出しておりますので、mysqlのエラーだとおもわれます。
m.ts10806

2020/03/23 02:16

「文字が正しくありません」というのはMySQLも持ってないと思いますけど。というかそもそも日本語のメッセージを返さないと思います。
退会済みユーザー

退会済みユーザー

2020/03/23 02:27 編集

JavaScript 側の error じゃないの? } catch (e) { var message = '<label style="color: red;">'+escapeHTML(e.message)+'</label>'; $('#messageArea').html(message); } で拾ってるように見える。 chrome のメッセージと合わせて考えると JSON が適切な形じゃないんだろうねぇ。
退会済みユーザー

退会済みユーザー

2020/03/23 02:42 編集

ソレより、生のレスポンスを確認してください。 開発ツールを使用すると、返却された JSON もどきを確認できます。 入手できたものをフォーマットチェッカー等で確認してみると原因が分かるかと。
guest

0

自己解決

var obj = $.evalJSON(data); // PHPからJSON形式で受け取る

質問内に記載しているjavascriptのソース内の、上記の部分の直前に
alert(data);を追記し、data内に何が入っているか確認しました。

すると、ログイン時のユーザIDとパスワードのチェック結果がOKという情報以外に、
エラー内容がもりもりと入っていました。
エラー内容を見ますと、ログイン時のセッション構築時に作られる
セッションテンポラリーファイルを作ろうとしたが
アクセス権がないために作れなかったというエラーが入っていました。

処理は、dataにログインの可否情報を待っているのに、返ってきたdataに
上記のようなアクセスエラーのメッセージも
入っていたために、dataを解析できずに「文字が正しくありません。」とでていました。

まだ解決に向け対応中ですが、そういうことでしたのでクローズさせていただきます。
回答していただいた皆さんありがとうございました。

投稿2020/03/26 08:05

hh_ww

総合スコア22

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

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

0

私のコメントや hoshi-takanori さんのコメントはお読みでしょうか?

投稿2020/03/23 01:38

nanami12

総合スコア1015

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

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

hh_ww

2020/03/23 01:40

先ほど確認し、コメントさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問