- ベストアンサー
PHP初心者のためのログインID別ページ表示方法
- ログインIDごとに異なるページを表示する方法について教えてください。
- 例えば、登録されたIDとPWでログインした場合、member.phpに表示されるリンクが異なるようにしたいです。
- 具体的には、IDがNO1の場合はcontents.phpへのリンクが、IDがNO2の場合はcontents.phpとcontents2.phpへのリンクが表示されるようにしたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
たとえば、以下のような感じ? データベース内に以下のようにL1 L2の欄を増やす。 NO1 ID:abc PW:1234 name:山田 L1:TRUE L2:FALSE NO2 ID:def PW:5678 name:佐藤 L1:TRUE L2:TRUE ユーザー情報を取得する際に、L1、L2も同時に取得する。 取得した、L1、L2、Trueであればリンクを表示する、Falseであれば何もしない(表示しない)。 if ($row["L1"]){ echo "<a href=\"./contents.php\">contents</a><br />"; } if ($row["L2"]){ echo "<a href=\"./contents2.php\">contents2</a><br />"; } ----- 実際には、質問に書かれた事を満足させるだけで良いなら、以下のような形でもいいけど。 //contentsへのリンク 1の場合、2の場合両方表示なので、そのまま単純に表示させる。 echo "<a href=\"./contents.php\">contents</a><br />"; //contents2へのリンク 2の場合のみ表示させる。 //IDがdefかどうかで、表示させるかどうか判定する if ($row["id"]=="def "){ echo "<a href=\"./contents2.php\">contents2</a><br />"; }
その他の回答 (3)
- BellBell
- ベストアンサー率54% (327/598)
データベースエラー... に関しては基本的に表示されることはありません。 サーバートラブルが発生した場合には、発生する可能性がありますが。 どちらかと言えば、開発時にバグを埋め込んでしまった場合、SQLが間違っていたなどの場合に、どこが間違っていたかを調査するための情報とも考えてもいいぐらいです。 ID、パスワードが間違っていた場合のメッセージですが、可能性として二つ。 ID、パスワードが共に空白の場合は、チェックをそもそも通さずにフォームを表示しているため、メッセージは表示されません。 もう一点は、メッセージの表示部分を改変していないかということです。 メッセージ表示部分は、元の質問者様の記述をそのまま使用しています。 以下の内容で、$msg部分です。 ------ echo <<< EOL $msg <form method="post" action="login.php"> ユーザーID: <input name="id" type="text" /> パスワード: <input name="password" type="password" /> <input type="submit" value="ログイン" /> </form> EOL; ------- 質問に載っていたコードは<html>~<body>~</body></html>等はなかったため、それらはご自身で追加されたと思います。 <form>等の部分も、改変されてはいないでしょうか? もし、$msg部分を削除されていれば当然出力されません。 HTML内にPHPの変数情報等を出力するには、 <?PHP echo $msg;?>と記述するか、元質問者様のようにecho <<< EOL~EOL;などとします(EOLの部分は前後が一致するならなんでも良い)。 本当に追記する前は表示されていて、追記したら表示されなくなったということでしたら、ちょっと謎です。 $_SESSION['uid'] = $_POST['id'];※1 の『※1』部分は削除されてますよね? 以下のように//を先頭につけた場合にエラーが表示され、//を消したらエラーが表示されなくなったら、たしかにその行に問題があるのは間違いないのですが。 //$_SESSION['uid'] = $_POST['id']; //をつける事を、コメントアウトと呼びます。 //を書いたそれ以降の文字は、プログラムとは関係のないただの注釈(コメント)として扱われるため、プログラムの動作確認などで一時的にその部分の機能を殺したい際に、//を付けて、確認を終えた後で簡単に戻す(//を削除する)などのデバッグ方法です。
お礼
ご返事有り難うございます。 確認したところ<?php print $msg;?>が抜けておりました。 お手数をおかけして申し訳ありませんでした。 また色々と有り難うございました。
- BellBell
- ベストアンサー率54% (327/598)
以下の判定が誤判定されてるって事ですね。 if ($row["L2"]){ L1、L2はBOOL型にしてますよね? MySQLAdminだと、『種別』って名前の欄です。 文字列型でも、おそらく誤判定にならないと思いますが、BOOL型の方が絶対確実なので。 『FALSE』など、全角だとTrueと判定されてしまいますし。 ※大文字小文字なども関係があるかも知れないが、通常やらない方法なのでその当たりは不明。
補足
ご返信有難う御座います。 BOOL型を使用したことがなかったものですから、調べたらできるようになりました。 有難う御座います。 もうひとつご質問なのですが、http://oshiete1.goo.ne.jp/qa5743557.htmlの最後のご回答にある$_SESSION['uid'] = $_POST['id'];※1 を追記すると } else { $msg = '<span style="color:#ff0000;">ユーザーIDまたはパスワードが違います。</span>'; } } else { $msg = '<span style="color:#ff0000;">データベースエラー、行が取得できません。</span>'; } } else { $msg = '<span style="color:#ff0000;">データベースエラー、SQLが失敗しました。</span>'; } がID&PWが違うのに表示されません。 普段は表示されないから大丈夫なのですが、ID&PWを間違えるとフォームページが再度表示されるだけになってしまいます。 なぜなのかお分かりでしょうか?
- BellBell
- ベストアンサー率54% (327/598)
>できませんでした。 ちゃんとクエリーも書き換えました? ↓のように取得するデータを追加しないと取得できませんよ $query = sprintf("SELECT user_name,L1,L2 FROM member WHERE id='%s' ",$uid); もしくはこっち $query = sprintf("SELECT user_name,id FROM member WHERE id='%s' ",$uid); 上の方の例で言えば、 SELECT : データベースから取得せよ user_name,L1,L2 : user_name,L1,L2の欄を FROM member : member というテーブルから WHERE : 以下の条件によって絞り込め id='%s' : id欄が '%s'のものを(※PHPのsprintf命令によって、'%s'はその時のログインユーザーのIDに置き換えられる。
補足
ご教授有難うございます。 環境は下記のように設定しています。 $query = sprintf("SELECT * member WHERE id='%s' ",$uid); ですが、NO1の方でも表示がされてしまいます。 また、$query = sprintf("SELECT user_name,L1,L2 FROM member WHERE id='%s' ",$uid);でも試させていただきました。 データベースも下記のようにちゃんと登録しています。 L1:TRUE L2:FALSE L1:TRUE L2:TRUE
補足
ご教授有難う御座います。 早速試させていただきました。 if ($row["L1"]){ echo "<a href=\"./contents.php\">contents</a><br />"; } if ($row["L2"]){ echo "<a href=\"./contents2.php\">contents2</a><br />"; } の記述にてためさせていただいたのですが、できませんでした。 if ($row["id"]=="def"){ echo "<a href=\"./contents2.php\">contents2</a><br />"; } もできませんでした。