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

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

ただいまの
回答率

89.51%

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 243

hh_ww

score 18

表題の通りですが、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);」部分です。

/********************************************************************************
Title        :    Login.js
*********************************************************************************/

$(function() {

    if(!$.support.opacity){

        alert('このメッセージが表示された場合は、F12を押して表示された画面の\n右上のドキュメントモード切り替えで9以上を選択してください。');
    }

    // ログインユーザー表示エリアを非表示にする(HTMLを取り除く)
    $('#areaLoginUser').remove();

    // 開いたときにユーザーIDにフォーカスする
    $('#userID').focus();
//    setTimeout(function() {$('#userID').focus();}, 1000);
});

// ログインボタンクリック
$(document).on('click', '#btnLogin', function() {

    try {
        var objPost = new Object();
        objPost.userID = $('#userID').val();
        objPost.password = $('#password').val();

        if (objPost.userID == '') throw new Error('ユーザIDを入力してください');
        if (objPost.password == '') throw new Error('パスワードを入力してください');

        var html = '';
        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;">';
        html += '  <img src="../Common/Images/loading.gif" />';
        html += '</div>';
        $('#messageArea').html(html);

        $.ajax({
            url: '../Login/GetUserInfo.php?' + mySerialDate(),
            data: {'objPost' : $.toJSON(objPost)}
        })
        .done(function(data) {
            try {
                var obj = $.evalJSON(data);    // PHPからJSON形式で受け取る

                // ログイン失敗ならメッセージを表示
                if (obj.resultCode == 'OK') {

                    // ログイン成功ならお知らせ画面に移動
                    location.href = '../Information/Information.php?' + mySerialDate();

                } else {

                    switch (obj.msgCode) {
                    case 'LoginUserError':
                        throw new Error('ユーザーIDが登録されていません');
                        break;
                    case 'PasswordError':
                        throw new Error('パスワードが違います');
                        break;
                    default:
                        throw new Error(obj.msgCode);
                        break;
                    }
                }

            } catch (e) {
                var message = '<label style="color: red;">'+escapeHTML(e.message)+'</label>';
                $('#messageArea').html(message);
            }
        })
        .fail(function(XMLHttpRequest, textStatus, errorThrown) {
            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);
            $('#messageArea').html('');
        });

    } catch (e) {
        var message = '<label style="color: red;">' + escapeHTML(e.message) + '</label>';
        $('#messageArea').html(message);
    }
});

// クリアボタンクリック
$(document).on('click', '#btnClear', function() {

    $('#userID').val('');
    $('#password').val('');
    $('#messageArea').html('');

    $('#userID').focus();
});
<?php
/********************************************************************************
 Title        : Login.php
*********************************************************************************/
require_once dirname(__FILE__).'/../../.ini.php';
require_once dirname(__FILE__).'/../Common/Const.php';
require_once dirname(__FILE__).'/../Common/MyFunction.php';
?>
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="../Common/CSS/Common.css">                                    <!-- 共通CSS -->
    <link rel="stylesheet" href="./Login.css">                                                                <!-- 専用CSS -->
</head>
<body>
    <script src="../Common/Library/js/jquery-3.1.0.min.js"></script> -->                    <!-- jQuery 3.1 -->
    <script src="../Common/Library/js/jquery-1.12.4.min.js"></script>                            <!-- jQuery 1.12.4 -->
    <script src="../Common/Library/js/jquery.json-2.6.0.min.js"></script>                    <!-- jQuery JSON 2.6 -->
    <script>
        // タイトル
        window.document.title = '<?php echo MainTitle;?>'; // Const.php が必要

        var ROOT_FOLDER = '<?php echo ROOT_FOLDER; ?>'; // .ini.php が読み込まれている必要あり
    </script>
    <script src="../Common/MyFunction.js"></script>                                                    <!-- 共通関数 -->
    <script src="./Login.js"></script>                                                                            <!-- 専用スクリプト -->

    <div id="main">

        <!-- ヘッダー -->
        <?php require_once dirname(__FILE__).'/../Common/Header.php'; ?>

        <!-- ログインエリア -->
        <div id="areaLogin">
             <form action="" onsubmit="return false;">

                 <!-- ユーザID -->
                 <label id="lblUserID" class="login lblUserID">ユーザID</label><input class="login" id="userID" type="text" value="" style="ime-mode:disabled;" />
                 <div style="clear:both;"></div>

                 <!-- パスワード -->
                 <label id="lblPassword" class="login lblPassword">パスワード</label><input class="login" id="password" type="password" value="" style="ime-mode:disabled;" />
                <div style="clear:both;"></div>

                 <!-- メッセージエリア -->
                <div id="messageArea"></div>
                 <br />

                 <!-- ボタンエリア -->
                 <div style="text-align: center;">
                     <!-- ログイン -->
                    <input id="btnLogin" class="btnDefault btnLogin" type="submit" value="ログイン" />
                     <!-- クリア -->
                    <input id="btnClear" class="btnDefault btnCancel" type="button" value="クリア" />
                </div>
            </form>
        </div>

        <!-- フッター -->
        <?php require_once dirname(__FILE__).'/../Common/Footer.php'; ?>
    </div>
</body>
</html>
<?php
require_once dirname(__FILE__).'/../Common/SessionStart.php';                                 // セッション開始用
require_once dirname(__FILE__).'/../Common/DB/DB.php';
require_once dirname(__FILE__).'/../Common/SetLog.php';

$myName = 'GetUserInfo.php';

// ポストデータを取得
$objPost = json_decode($_POST['objPost'], true);

$userID = '';
$userName = '';
$msgCode = '';
$flagLogin = '';

$role_edit_master = 0;
$role_edit_order = 0;

try {
    $db = new DB(MY_DBNAME, MY_DBUSR, MY_DBPASS, MY_DBTYPE, MY_DBHOST);

    $sql = '
        SELECT user_id, user_name, password, full_name, role_edit_master, role_edit_order
        FROM mst_user
        WHERE
            UPPER(user_name) = UPPER(:user_name)
    ';
    $params = array(':user_name' => $objPost['userID']);

    $row = $db->getRow($sql, $params);

    if (empty($row)) {
        $msgCode = 'LoginUserError';    // ユーザーIDが登録されていません
    } else {
        $password = $row['password'];

        if (trim($password) === trim($objPost['password'])) {

            $userID = $row['user_id'];
            $userName = trim($row['full_name']);

            $role_edit_master         = $row['role_edit_master'];
            $role_edit_order         = $row['role_edit_order'];

            $flagLogin = 'OK';
        } else {
            $msgCode = 'PasswordError';        // パスワードが違います
        }
    }

    $db = null;
    unset($db);

    $_SESSION["yousetsu_info"] = array(
            "user_id"                    => $userID,
            "user_name"                => strtoupper($objPost['userID']),
            "full_name"                => $userName,
            "role_edit_master"        => $role_edit_master,
            "role_edit_order"        => $role_edit_order
    );

    $result = array(
        'resultCode'    => $flagLogin,
        'msgCode'        => $msgCode,
        'userName'    => $userName
    );

} catch (Exception $e) {

    $result = array(
        'resultCode'    => 'error',
        'msgCode'        => mb_convert_encoding($e->getMessage(), SYSTEM_CHAR_CODE, "auto"),
        'userName'    => ''
    );

    // エラーログ出力
    setLog($myName, 'error', $e->getMessage());
}

echo json_encode($result);    //JSONにエンコード
@charset "UTF-8";
/********************************************************************************
Title        :    Login.css
*********************************************************************************/

#areaLogin {
    position: absolute;
    top: 150px;
    left: 50%;
    margin-left:-110px;
    width: 220px;
    height: 150px;
}

label.login {
    font-size: 12px;
    display: block;
    width: 80px;
    float: left;
    text-align: left;
    padding-top: 6px;
}

input.login {
    float: right;
    font-size: 12px;
    width: 120px;
    height: 22px;
    margin-bottom: 10px;
    padding: 5px 2px 0px 3px;
}

input.btnDefault {
    font-size: 12px;
    width: 64px;
    height: 26px;
}

#messageArea {
    height: 34px;
    text-align: center;
    font-size: 12px;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hh_ww

    2020/03/23 11:05

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

    キャンセル

  • takasima20

    2020/03/23 11:06

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

    キャンセル

  • FKD

    2020/03/23 14:26

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

    キャンセル

回答 3

+2

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/23 11:27 編集

    JavaScript 側の error じゃないの?

    } catch (e) {
    var message = '<label style="color: red;">'+escapeHTML(e.message)+'</label>';
    $('#messageArea').html(message);
    }

    で拾ってるように見える。

    chrome のメッセージと合わせて考えると JSON が適切な形じゃないんだろうねぇ。

    キャンセル

  • 2020/03/23 11:29

    キャンセル

  • 2020/03/23 11:41 編集

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

    キャンセル

check解決した方法

0

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/23 10:40

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

    キャンセル

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

  • ただいまの回答率 89.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • PHPに関する質問
  • phpで作ったwebシステムのログイン画面で「文字が正しくありません。」と出てログインできない