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

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

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

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

Q&A

解決済

3回答

541閲覧

Notice: Undefined variable:

akioyonamine

総合スコア24

PHP

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

0グッド

0クリップ

投稿2019/02/24 10:38

編集2019/02/24 10:41

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

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

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

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

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

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

guest

回答3

0

ベストアンサー

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

「は変数がうまく反映されていないよう」ではなく、本当にされていないのか?どこを通っているのかをechoやerror_logを使ってきちんと確認しましょう。

投稿2019/02/25 00:34

kasa0

総合スコア578

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

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

akioyonamine

2019/02/25 04:41

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

0

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

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

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

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

投稿2019/02/24 10:49

編集2019/02/25 00:36
m.ts10806

総合スコア80850

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

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

akioyonamine

2019/02/25 04:35

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

0

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

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

PHP

1//Initialize 2$manager = array(); 3 4//Execute

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

投稿2019/02/24 10:44

kunai

総合スコア5405

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

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

akioyonamine

2019/02/25 04:38

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問