お世話になっております。
PHP初心者です。
どなたかおわかりの方がいらっしゃいましたら、ご教授お願いいたします。
http://oshiete1.goo.ne.jp/qa5743557.html
を拝見させていただいたのですが、上記のURLの記述にてログインIDによるページを変更するのはどうしたらよろしいのでしょうか?
例↓
NO1 ID:abc PW:1234 name:山田
NO2 ID:def PW:5678 name:佐藤
とDBに登録していたとします。
両方のIDとPWでログインしたときはmember.phpが表示される。
ここでIDによってmember.phpに表示されるリンクがかわる。
NO1でログインした場合member.phpにはcontents.phpあてのリンクが表示されている。
NO2でログインした場合はmemebr.phpにはcontents.phpとcontents2.phpあてのリンクが表示されるようにするにはどうしたらよろしいでしょうか?
上記のURLを参考にしたいので宜しくお願いいたします。
No.1ベストアンサー
- 回答日時:
たとえば、以下のような感じ?
データベース内に以下のように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 />";
}
この回答への補足
ご教授有難う御座います。
早速試させていただきました。
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 />";
}
もできませんでした。
No.4
- 回答日時:
データベースエラー...
に関しては基本的に表示されることはありません。
サーバートラブルが発生した場合には、発生する可能性がありますが。
どちらかと言えば、開発時にバグを埋め込んでしまった場合、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;?>が抜けておりました。
お手数をおかけして申し訳ありませんでした。
また色々と有り難うございました。
No.3
- 回答日時:
以下の判定が誤判定されてるって事ですね。
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を間違えるとフォームページが再度表示されるだけになってしまいます。
なぜなのかお分かりでしょうか?
No.2
- 回答日時:
>できませんでした。
ちゃんとクエリーも書き換えました?
↓のように取得するデータを追加しないと取得できませんよ
$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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- PHP php に関して質問です。 各ユーザーがログインした後に 各ユーザーごとに、登録したデータなどを表示 2 2022/04/23 13:46
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- MySQL UPDATE my_items SET item_name '赤い,甘い,ケーキ' WHERE id 1 2023/01/03 09:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
PHPからCSVをアップロード後、m...
-
PHPで入力フォームでデータを確...
-
phpでcookieがうまく保存されない
-
フォームで戻った際に入力済み...
-
[php初心者]サイトを見てデータ...
-
PHP8を使うと、大量のWarningが...
-
ワードプレスサイト PHP8.0.25...
-
プログラミング言語で、使える...
-
phpのクラスメソッドの定義が長...
-
アマゾンのような評価の星を選...
-
ファイルアップロードに関して...
-
掲示板のセキュリティについて...
-
Q&Aサイトを作成していてURLの...
-
アップロード画像数でCSSを分け...
-
PHP一覧表示した項目にリンクを...
-
PHPのセッション有効期限について
-
php 確認表示画面で値をSESSION...
-
php 完了画面の送信メールのコ...
-
PHPで訪問回数を表示するカウン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで[]の使い方について
-
エクセルVBAについて
-
DBで検索結果に該当するデータ...
-
アラートでyes noを作りたいです。
-
phpでmysqlを使ってデータベー...
-
checkboxクリック時、SQLを実行...
-
dbに登録したデータをphpのプル...
-
PHP+MySQLでの配列のinsert文に...
-
pg_queryの結果を2回とりだす...
-
検索結果($_POST)が2ページ目...
-
PHPについてなのですが未定義の...
-
VBA初心者です。
-
sortable ギブアップです…助け...
-
PEAR::DBで取得したデータで処...
-
DBのデータを表示させたい
-
データベース表示結果のデザイン
-
PHP 勤務時間の合計を出したい
-
mySQLからデータを取り出す
-
PHP と MySQL でテーブルの行数...
-
連想配列、オブジェクト配列の...
おすすめ情報