前提・実現したいこと
PHP始めたての初心者で、PHPで人物を登録管理できるシステムを作っております。
登録したものの一覧を表示する画面で、ログインした人が登録したデータだけを表示させたいのですが、他の人が登録したデータも表示されてしまいます。
databaseを使わずに、JSONを使用しないといけないため、JSONを使ってデーターを保存しています。
ログインしているユーザIDと、JSONのユーザIDが一致するものだけを表示するようにすればいいということはわかるのですが、実装方法がわかりません。
どなたかご教授頂けると幸いです。(コードが汚いのは、ご了承ください)
該当のソースコード
PHP
1//実装方法がわからないページです 2<?php 3session_start(); 4?> 5 6 7<!DOCTYPE html> 8<html> 9<body> 10 11<?php if(isset($_SESSION['login_user'])) { ?> 12 こんにちは <?= $_SESSION['login_user'] ?>さん 13 <?php } else { ?> 14 ログインしてください 15<?php } ?></br> 16<a href="logout.php">ログアウトする</a> 17 18<h1>名前一覧</h1> 19<tr> 20 <td><a href="form.php">新規登録する</a></td> 21</tr></br> 22<tr> 23 <td><a href="index.php">詳細一覧へ</a></td> 24</tr> 25<table> 26 <tr> 27 <th>名前</th> 28 </tr> 29 30 <?php 31 foreach (glob('*.json') as $filename) { 32 if ( ($fp = fopen($filename, 'rb')) !== FALSE ) { 33 $json_str = fread($fp, filesize($filename)); 34 fclose($fp); 35 $json = json_decode($json_str, TRUE); 36 ?> 37 <tr> 38 <td><?= $json['name'] ?></td> 39 </tr> 40 <?php 41 } 42 } 43 ?> 44</table> 45 46</body> 47</html>
PHP
1//form登録の際にログインする人のユーザーIDを保存しております。 2<?php 3 session_start(); 4 5 $user = $_SESSION['login_user']; 6 $name = $_POST['name']; 7 $day = $_POST['day']; 8 $description = $_POST['description']; 9 10 $json = array("login_user"=> $user, 11 "name"=> $name, 12 "day" => $day, 13 "description" => $description); 14 $json_str = json_encode($json); 15 $filename = date('YmdHis') . ".json"; 16 if ( ($fp = fopen($filename, 'wb')) !== FALSE ) { 17 fwrite($fp, $json_str); 18 fclose($fp); 19 } 20?> 21<a href="home.php">名前一覧へ</a>
PHP
1//一応ログインできるか確認する画面です 2<?php 3 session_start(); 4 5 $login_id = $_POST['login_id']; 6 $password = $_POST['password']; 7 8 foreach (glob('*.json') as $filename) { 9 if ( ($fp = fopen($filename, 'rb')) !== FALSE ) { 10 $json_str = fread($fp, filesize($filename)); 11 fclose($fp); 12 13 $json = json_decode($json_str, TRUE); 14 if ($json['login_id'] == $login_id && password_verify($password, $json['password'])) { 15 $_SESSION['login_user'] = $login_id; 16 break; 17 } 18 } 19 } 20?> 21<?php if (isset($_SESSION['login_user'])) { ?> 22 ログインしました。<a href="home.php">ホームへ</a> 23<?php } else { ?> 24 ログインできませんでした。 25<?php } ?> 26
なんでファイル名を日時にしてんの?
素直にデータベースにデータ登録して、抽出もSQLで解決すればいいところを、jsonファイルでの管理にこだわり理由はなんですか? 気になる箇所の変数を var_dump($json_str); などとデバッグ出力させれば、想定通りデータが入ってきているか確認できるのですが、やっていますか?
ファイル名を日時にしている理由はありません。他のファイル名に変えた方がよいのでしょうか
課題での制作のため、データベースでデータを登録せずにjsonファイルでの管理するよう条件があるからです。すみません。変数もまだPHP始めたばかりでデバックの出力の仕方もわからずなので、やっておりません。
1 ユーザーにつき 1ファイル作るんだったら、ユーザー.json みたいな名前にしたら処理しやすいんじゃ?
てか、配列にして 1ファイルで扱うのがよさそげでもあったり?
課題として守らなければいけない要求、自分で肉付けした仕様、がわかるようにしてほしいかな。
「課題で」なら出題者、講師に聞かれたほうが良いかと思います。
課題には目的があり、要件があります。
全く事情の知らない第三者のアドバイスで果たして「課題の達成」と言えるんでしょうか。
「一般論」を求めることになるので「JSONでの動的データ管理は悪手」という前提で話が来るのも無理はありません。
回答書いてみたけど、ファイルのデータ構造が示されていないから合ってるのか間違ってるのかも判断つかないわー。
自分で全て打ったものなので、わかりにくくなってしまい、すみません。
講師に何回も聞いたのですが、自分の理解が及ばず、このような形で聞かせてもらいました。ごもっともです。申し訳ありません。
他の実装部分は自分で課題達成に向けて頑張ります。
「分かるまで聞く」です。
聞き方を変えたら分かるような回答もあるかもしれませんよ。
確かに今回の自分の質問のように聞き方が、曖昧になってしまっているところがあったかもしれません。
もっと相手が理解しやすいように質問の仕方を変えてみるべきですね。
私自身も反省して次から頑張ってみようと思います。
既に結構悪いですね。
聞き方で答えの方向性は決まりますよ。
「可能ですか」と聞けばCan/Can notなので「可能です/不可能です」としか返ってきません。
というか大抵のことは「可能です」としか言いようがないです。
「そのように作れば可能」なので。「自分の力でできるか」を聞きたいならそう聞くべきで、
自身が理解していることなど、自身の技術力や理解を相手に伝えなければなりません。
考えた結果を述べたうえで「これでいいか」とYes/Noを聞くのならまだOKですが、
この手の質問サイトでは悪手でしょうね。
「質問するときのヒント」熟読してください。
可能か、不可能か聞かれたら、確かにどっちかしか解答しようがありませんね。
自身のことをもう少し伝えたうえで、求めている解答が得られるような質問を考えられるよう、今後気を付けます。
ご助言ありがとうございます。
回答1件
あなたの回答
tips
プレビュー