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

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

ただいまの
回答率

87.61%

Notice: Undefined variable:

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,239

score 24

login_check.phpにおけるエラー内容

Notice: Undefined variable: manager_flg in /home/a_yonamine/public_html/login_check.php on line 68

Notice: Undefined variable: manager_flg in /home/a_yonamine/public_html/login_check.php on line 72

Notice: Undefined variable: shain_id in /home/a_yonamine/public_html/login_check.php on line 107

Notice: Undefined variable: shain_mei in /home/a_yonamine/public_html/login_check.php on line 109

login.html

<html>

<head>

<title>ログイン画面</title>

</head>

<body>

<div style="width:1200px">

<table style='border:cyan;border-style:solid;margin-left:300px;margin-right:300px;width:600px;text-align:center'>

<tr><td colspan="2" style="color:red"><###ERROR###></td></tr>

<tr>

<td colspan="2">  

ログイン

</td>

</tr>

<form method="post" action="./login_check.php">

<tr>

<td style="width:30%">

社員番号

</td>

<td>

<input type="text" style="width:100%" id="account" name="account" placeholder="アカウントを入力してください"></input>

</td>

</tr>

<tr>

<td>

パスワード

</td>

<td>

<input type="password" style="width:100%" id="password" name="password" placeholder="パスワードを入力してください"></input>

</td>

</tr>

<tr>

<td colspan="2">

<input type="submit" style="width:200px" value="送信"></input>

</td>

</tr>

</form>

</table>

</div>

</body>

</html>

login_check.php

<?php



   // 設定ファイルの読み込み

   require_once('./database_config.php');



   //Post Parameter

   $shain_bango=$_POST['account'];

   $password=$_POST['password'];





   //Database connect

   $link=mysqli_connect(DB_SERVER,DB_ACCOUNT_ID,DB_ACCOUNT_PW,DB_NAME);

   if (!$link) {

      echo "Error: Unable to connect to MySQL." . PHP_EOL;

      echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;

      echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;

      exit;

   }



   mysqli_set_charset($link,"utf8");



   //Query

   $query='select shain_id, shain_mei, manager_flg from shain_info where shain_bango="'.$shain_bango.'" and password="'.$password.'"';



 //Execute

   if ($result = mysqli_query($link, $query)) {



        $i=0;

        while ($row = mysqli_fetch_row($result)) {
           $shain_id[$i] = $row[0];
           $shain_mei[$i] = $row[1];
           $manager_flg[$i] = $row[2];
          // echo $manager_flg[0];
           $i++;
        }

        mysqli_free_result($result);


       if ($manager_flg[0]==="1"){

        header('location: ./employerlist.php');

      }else if ($manager_flg[0]!="1"){

         header('locaion: ./employerdetail.php');

      }else {

         move_login();

      }




   } else {

       // if error, move login

       move_login();

   }





   // keep login information between screens    

   session_save_path('/home/a_yonamine/session/');

   session_start();

   // inititalize session

   $_SESSION = array();

   $_SESSION['shain_id'] = $shain_id[0];

   $_SESSION['shain_mei'] = $shain_mei[0];





   mysqli_close($link);



   exit;



   function move_login() {

       header('location: ./login.php?em=1');

       exit;

   }


?>


データーベースの構成

mysql> desc shain_info;
+--------------------+-------------+------+-----+---------+----------------+
| Field              | Type        | Null | Key | Default | Extra          |
+--------------------+-------------+------+-----+---------+----------------+
| shain_id           | int(11)     | NO   | PRI | NULL    | auto_increment |
| shain_bango        | char(8)     | NO   |     | NULL    |                |
| password           | char(8)     | NO   |     | NULL    |                |
| shain_mei          | varchar(20) | NO   |     | NULL    |                |
| shain_shozokubu    | varchar(40) | NO   |     | NULL    |                |
| manager_flg        | char(1)     | NO   |     | NULL    |                |
| shain_nyuushanen   | int(4)      | NO   |     | NULL    |                |
| shain_nyuushatsuki | int(2)      | NO   |     | NULL    |                |
| shain_nyuushabi    | int(2)      | NO   |     | NULL    |                |
| shain_taishanen    | int(4)      | YES  |     | NULL    |                |
| shain_taishatsuki  | int(2)      | YES  |     | NULL    |                |
| shain_taishabi     | int(2)      | YES  |     | NULL    |                |
| shain_jusho        | text        | YES  |     | NULL    |                |
+--------------------+-------------+------+-----+---------+----------------+
13 rows in set (0.02 sec)


格納されているデータ

mysql> select  * from shain_info;
+----------+-------------+----------+--------------------+-----------------+-------------+------------------+--------------------+-----------------+-----------------+-------------------+----------------+--------------------+
| shain_id | shain_bango | password | shain_mei          | shain_shozokubu | manager_flg | shain_nyuushanen | shain_nyuushatsuki | shain_nyuushabi | shain_taishanen | shain_taishatsuki | shain_taishabi | shain_jusho        |
+----------+-------------+----------+--------------------+-----------------+-------------+------------------+--------------------+-----------------+-----------------+-------------------+----------------+--------------------+
|        1 | 1           | Akio4274 | 与那嶺あきお       | IT支援          | 0           |             2019 |                  1 |              30 |            2019 |                 2 |             30 | 千葉県千葉市       |
|        2 | 1           | Taro4274 | 山田太郎           | IT支援          | 0           |             2019 |                  1 |              30 |            2020 |                 2 |             30 | 東京都港区         |
+----------+-------------+----------+--------------------+-----------------+-------------+------------------+--------------------+-----------------+-----------------+-------------------+----------------+--------------------+
2 rows in set (0.00 sec)


PHPのヴァージョン

PHP 5.4.45 (cli) (built: Sep 11 2015 21:23:18) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

困っている事

現在従業員管理システムを作成しています。
login.htmlで表示されたテキストボックスに社員番号とパスワードを入力し、入力されたデータを元にそれぞれ、社員詳細もしくは社員一覧ページのどちらに遷移するかを振り分けるのがlogin_cehck.phpで書いてあるコードの役割なのですが、上記のようにエラーが出ます。
エラー内容はlogin_check.phpで$manager_flg, $shain_mei, $shain_idの三つの変数を定義しているのですが、68,72, 107,109行では変数がうまく反映されていないようです。

解決したい事

68,72, 107,109行目でも変数が反映されるようにしたいです。
色々試行錯誤しましたがわかりません。
お手数ですが、どなたかわかる方ご教授願います。
何か情報が不足していたら何なりとお申し付けください。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

+2

60行目で$manager_flgへの代入を行っていますが、mysqli_fetch_row()がfalse以外を返した場合だけなので、データが1件も登録されていない場合は、代入が実行されません。
つまり、データが1件も登録されていない場合の対応がされていないことが問題です。

「は変数がうまく反映されていないよう」ではなく、本当にされていないのか?どこを通っているのかをechoやerror_logを

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/02/25 13:41

    解答ありがとうございます。
    おっしゃるようにmysqli_fetch_row()の返り値がfalseとなっていたため、if文が実行されませんでした。
    解決の決めてとなりましたので、ベストアンサーにさせて頂きます。
    お時間を使っていただきありがとうございます。

    キャンセル

+2

login_check.phpで$manager_flg, $shain_mei, $shain_idの三つの変数を定義しているのですが


代入はしているけど定義はしてないからじゃないですかね。
定義というか初期化。
代入前にいきなり配列扱いの変数を出してきて$i番目に代入しろ、って処理しているもんで「ちょちょちょ、その変数知らないんだけど!?」って困っているだけです。

//Initialize
$manager = array();

//Execute


とか書いてたらいいんじゃないですか。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/02/25 13:38

    解答ありがとうございます。
    おっしゃるように配列変数の初期化を試みましたが、今度は"Noticed undifined offset"とゆうエラーが出ました。
    間違っていたのはSQLの方でした。
    お時間を使っていただきありがとうございます。

    キャンセル

+2

何かしらの特定の条件下でしか定義されていない場合、その条件を通らなかった場合には定義の処理も通らないので未定義になります。

簡単なのは冒頭で条件がなくても通る箇所で一通り初期値(何を初期値とするかは使われ方による)を入れておくことですが、それだけでは問題解決になりません。
「なぜその条件を通らなかったのか」を調べる必要があります。

そこからは「デバッグ」です。
条件のキーとなる変数をvar_dump()などで出力して確認、echo __LINE__."<br />\n";で通っているプログラムの行数を確認してください。

DB接続してデータを操作する処理を書いている場合は、操作SQLが間違っていたり接続が正常でない可能性もあるので、try-catchで囲み、Exceptionを拾うようにしてみてください。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/02/25 13:35

    解答ありがとうございます。
    解決しました。
    操作SQLの値が間違っていました。
    var_dump()を使ってわかりました。
    お時間を使っていただきありがとうございます。

    キャンセル

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る