PHP DBなし ログインユーザ別投稿機能について
ユーザには1,附番ID,2,ユーザーID、3,ユーザの名前、4,パスワードが割り振られています。
それぞれのユーザの情報は、CSVファイルに書かれています。
附番は別のCSVファイルに書かれています
そして投稿した内容も別のCSVファイルに書かれています。投稿できる内容はテキストボックスに書かれた内容と日付けのみです。
top.phpをまだログインした掲示板にはなっていませんが ここにそれぞれのユーザが投稿できるようにしたいのとそれぞれ削除と編集ができるようにしたいです。
まだうまく内容をまとめられずお見苦しいですが何から手を出していいのかわかりません。
教えていただくと幸いです。またそれぞれのファイルも一部一応載せます。修正点があれば教えてほしいです。
このtop.phpにはまだユーザとの情報を紐ずけていませんが紐ずけたいです。
https://toukanno.github.io/phpNodblogincsv/
https://github.com/toukanno/phpNodblogincsv-reply
<?php
//ログインしたメンバーのみがアクセスできる初期画面
//ここでtext2.csvユーザ情報を編集させる
session_start();
print_r($_SESSION['id']);
print_r($_SESSION['name']);
// // // ログイン済みかを確認
if(!isset($_SESSION['id'])){
header('Location: login.php');
exit;
}
// print_r($_SESSOIN['id']);
// print_r($_SESSOIN['name']);
$user = fopen("csv/user.csv","r");
$value = array();
$userid = "";
$name = "";
$password = "";
while($line = fgets($user)) {
$users = explode(",",$line);
if($_SESSION['id'] == $users[0]){
$userid = trim($users[1]);
$name = trim($users[2]);
$password = trim($users[3]);
}
}
fclose($user);
if (!empty($_POST['text'])) {
$datetime = date('Y-m-d H:m:s');
$handle = fopen("csv/text.csv", "r");
while ($line4 = fgets($handle)) {
$lines4 = explode(",", $line4);
// print_r($line4);
$rands[] = $lines4[0];
}
fclose($handle);
// fclose($handle);
$min = 1;
$max = 9;
// $count =1;
if (empty($tmp)) {
$tmp = mt_rand($min, $max);
}
// $id = 0;
while (true) {
// print_r($rands);
if (!in_array($tmp, $rands)) {
$id = $tmp;
// $count++;
break;
} elseif (in_array($tmp, $rands)) {
$tmp = mt_rand($min, $max);
}
}
// print_r($rands);
$handle = fopen("csv/text.csv", "a");
// ファイルへ書き込み
fwrite($handle, $id . "," . $_POST['text'] . ",");
fwrite($handle, $datetime . "\n");
fclose($handle);
}
if (!empty($_POST['id'])) {
$handle = fopen("csv/text.csv", "r");
$value = array();
while ($line2 = fgets($handle)) {
$lines = explode(",", $line2);
if ($lines[0] != $_POST['id']) {
var_dump($lines[0]);
$value[] = $line2;
}
}
fclose($handle);
$handle = fopen("csv/text.csv", "w");
foreach ($value as $val) {
fwrite($handle, $val);
}
fclose($handle);
}
if (!empty($_POST['id2']) && !empty($_POST['textchange'])) {
$id2 = $_POST['id2'];
$textchange = $_POST['textchange'];
$datetime2 = date('Y-m-d H:m:s');
$textcontent = $id2 . "," . $textchange . "," . $datetime2 . "\n";
print_r($textcontent);
$handle = fopen("csv/text.csv", "r");
$value2 = array();
while ($line3 = fgets($handle)) {
$lines3 = explode(",", $line3);
if ($lines3[0] != $id2) {
$value2[] = $line3;
var_dump(($lines3[0]));
} elseif ($lines3[0] == $id2) {
$value2[$id2] = $textcontent;
}
}
fclose($handle);
$handle = fopen("csv/text.csv", "w");
foreach ($value2 as $val) {
fwrite($handle, $val);
}
fclose($handle);
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>テキストテーブル</title>
</head>
<body>
<h1>トップ画面</h1>
<p><?php echo $_SESSION['name'] ?>さんでログイン中</p>
<form action="texttable.php" method="post">
<input type="text" name="text">
<input type="submit" value="送信">
<input type="reset">
</form>
<form action="logout.php" method="post">
<input type="submit" name="logout" value="ログアウト">
</form>
<form action="edit.php" method="post">
<input type="hidden" name="userid" value="<?php echo $userid; ?>">
<input type="hidden" name="name" value="<?php echo $name; ?>">
<input type="hidden" name="password" value="<?php echo $password; ?>">
<input type="submit" value="ユーザ情報編集">
</form>
<?php
//読み取り専用でファイルを開く
$handle = fopen("csv/text.csv", "r");
// $user = fopen("csv/user.csv","r");
// テーブルのHTMLを生成
echo "<table border = 1>
<tr>
<th>ID</th>
<th>名前</th>
<th>内容</th>
<th>日付</th>
<th></th>
<th></th>
</tr>";
// csvのデータを配列に変換し、HTMLに埋め込んでいる
//fgetで値を一行ずつ取得する
while ($line = fgets($handle)) {
// $linesっていう配列にexplodeでカンマ区切りを指定して $lineを区切って代入する
// while($line = fgets($user)){
// $lines = explode(",", $line);
echo "<tr>";
echo "<td>" . $users[1] . "</td>";//ここにIDを入れたい
echo "<td>" . $users[2] . "</td>";
echo "<td>" . $lines[1] . "</td>";
echo "<td>" . $lines[2] . "</td>";
echo '<td>';
echo '<form action="texttable.php" method="post">';
echo '<input type="hidden" value = "' . $lines[0] . '" name= "id">';
echo '<input type ="submit" name = "destroy" value = "削除" >';
echo "</form>";
echo "</td>";
echo '<td>';
echo '<form action="textchange.php" method="post">';
echo '<input type="hidden" value = "' . $lines[0] . '" name= "id">';
echo '<input type ="submit" name = "change" value = "変更" >';
echo "</form>";
echo "</td>";
echo "</tr>";
}
echo "</table>";
// #4 ファイルを閉じる
fclose($handle);
?>
</body>
</html>
このファイルは投稿内容を変更するファイルです一旦ここで情報を受け取りますまだユーザー情報と紐ずけていません
<?php
session_start();
print_r($_SESSION['id']);
print_r($_SESSION['name']);
// // // ログイン済みかを確認
if(!isset($_SESSION['id'])){
header('Location: login.php');
exit;
}
if (!empty($_POST['id'])) {
$id = $_POST['id'];
$placeholder = "";
$handle = fopen("csv/text.csv", "r");
while ($line = fgets($handle)) {
$lines = explode(",", $line);
if ($lines[0] == $_POST['id']) {
$placeholder = $lines[1];
}
}
fclose($handle);
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>内容変更</title>
</head>
<?php
?>
<body>
<form action="texttable.php" method="post">
<input type="hidden" value="<?php echo $id; ?>" name="id2">
<input type="text" name="textchange" value="<?php echo $placeholder; ?>">
<input type="submit" value="送信">
<input type="reset">
</form>
</body>
</html>
//このCSVファイルもuser.csvと紐づけたい
9,3,2020-09-16 13:09:43
2,2,2020-09-16 13:09:43
4,4,2020-09-16 13:09:43 //このCSVファイルもuser.csvと紐づけたい
4,2,2020-09-16 13:09:43
ここにそれぞれのユーザー情報が入っている edit.phpでユーザ情報を消したりしているので附番が疎らになっている
本来ならば順番道理になる。
1,1,2,3
6,33333,444,444
7,3,3,3
9,3,222,222
9
これは附番を一応残してあるだけなので実際には使わない
1
2
3
4
5
6
7
8
9
ユーザ情報を新規登録するPHP
<?php
$e = "";
$t1 = "";
$t2 = "";
//ログインしてない人向け画面
session_start();
// if(isset($_SESSION['id'])){
// header('Location: top.php');//ログインしていればtexttable.phpへリダイレクト
// exit;
// }
if (!empty($_POST['userid']) && !empty($_POST['name']) && !empty($_POST['password'])) {
$userid = $_POST['userid'];
$name = $_POST['name'];
$password = $_POST['password'];
$user = fopen("csv/user.csv", "r");
while ($line = fgets($user)) {
$users = explode(",", $line);
$ids[] = trim($users[1]);
}
fclose($user);
if (!in_array($userid, $ids)) {
$id = file("csv/id.csv");
$id[0] += 1;
// fwrite()
print_r($id);
$idscsv = fopen("csv/ids.csv","a");
fwrite($idscsv,$id[0]."\n");
fclose($idscsv);
// $user = fopen("csv/user.csv", "a");
$user = fopen("csv/user.csv", "r");
$value = array();
while ($line = fgets($user)) {
$lines = explode(",", $line);
$value[] = $line;
}
// fwrite($user,$id[0].",". $userid . "," . $name . "," . $password . "\n");
$textcontent = implode(",", array($id[0], $userid, $name, $password. "\n"));
$value[] = $textcontent;
$user = fopen("csv/user.csv", "w");
foreach ($value as $val) {
fwrite($user, $val);
}
fclose($user);
$intid = fopen("csv/id.csv", "w");
fwrite($intid, $id[0]);
fclose($intid);
$user = fopen("csv/user.csv", "r");
while ($line = fgets($user)) {
$users = explode(",", $line);
if ($users[1] == $userid && trim($users[3]) == $password) {
$_SESSION['id'] = $users[0];
$_SESSION['name'] = trim($users[2]);
$t1 = "登録が完了しました。";
$t2 = "<a href='top.php' style = 'color:blue'>トップページへ</a>";
// exit();
}
}
} else {
$e = "IDがすでに使われています";
// exit();
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>マイページ登録</title>
<link rel="stylesheet" type="text/css" href="register_confirm.css">
</head>
<body>
<header>
<h1 style="color: red;"><?php echo $e ?></h1>
<p style = 'color:blue'><?php echo $t1 ?></p>
<?php echo $t2 ?>
</header>
<main>
<div class="confirm">
<div class="form_contents">
<h2>会員登録 確認</h2>
<p>こちらの内容で登録しても宜しいでしょうか?</p>
<div class="name">
ユーザID :
<?php echo $_POST['userid']; ?>
</div>
<div class="name">
名前 :
<?php echo $_POST['name']; ?>
</div>
<div class="password">
パスワード :
<?php echo $_POST['password']; ?>
</div>
<div class="buttons">
<div class="modoru_button">
<a href="signup.php">戻って修正する</a>
</div>
<div class="submit">
<form action="top.php" method="post">
<input type="hidden" value="<?php echo $_POST['userid']; ?>" name="name">
<input type="hidden" value="<?php echo $_POST['name']; ?>" name="mail">
<input type="hidden" value="<?php echo $_POST['password']; ?>" name="password">
<input type="submit" class="submit_button" size="35" value="登録する">
</form>
</div>
</div>
</div>
</div>
</main>
<footer>
</footer>
</body>
</html>
ここは先ほど質問して関数や別ファイルでまとめたほうがいいといわれたがまだ修正していないログインするファイル
<?php
//ログインするための画面
$e = "";
session_start();
//ログイン済みかを確認
if (isset($_SESSION['id'])) {
header('Location: top.php'); //ログインしていればtexttable.phpへリダイレクト
exit;
}
//ログイン機能
if (!empty($_POST['userid']) && !empty($_POST['password'])) {
// print_r($_POST);
// print_r($_SESSION);
$userid = $_POST['userid'];
$password = $_POST['password'];
$user = fopen("csv/user.csv", "r");
while ($line = fgets($user)) {
$users = explode(",", $line);
$ids[] = trim($users[1]);
$passwords[] = $users[3];
// print_r($users[3]);
// print_r($users[1]);
}
fclose($user);
if (in_array($userid, $ids)) {
$user = fopen("csv/user.csv", "r");
while ($line = fgets($user)) {
$users = explode(",", $line);
if ($users[1] == $userid && trim($users[3]) == $password) {
$_SESSION['id'] = $users[0];
$_SESSION['name'] = trim($users[2]);
$e = "<a href='top.php' style = 'color:blue'>トップページへ</a>";
// print_r($users[0]);
print_r($_SESSION['id']);
print_r($_SESSION['name']);
break;
} else {
$e = "<a href='login.php' style = 'color:red'>パスワードが違います</a>";
// break;
}
}
fclose($user);
} else {
$e = "<a href='login.php' style = 'color:red'>IDが違います</a>";
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php echo $e; ?>
<form action="top.php" method="post">
<input type="hidden" value="<?php echo $_POST['userid']; ?>" name="name">
<input type="hidden" value="<?php echo $_POST['name']; ?>" name="mail">
<input type="hidden" value="<?php echo $_POST['password']; ?>" name="password">
</form>
</body>
</html>
ここでユーザ情報だけを編集しているがIDがかぶってしまっているのに登録できてしまうのが問題点 エラーメッセジと登録完了メッセージが同時に出てしまうのが問題
<?php
$e = "";
$t = "";
session_start();
if (!isset($_SESSION['id'])) {
header('Location: login.php'); //ログインしていなければログインページへリダイレクト
exit;
}
// print_r($_SESSION['id']);
// print_r($_SESSION['name']);
$user = fopen("csv/user.csv", "r");
$value = array();
$userid = "";
$name = "";
$password = "";
while ($line = fgets($user)) {
$users = explode(",", $line);
if ($_SESSION['id'] == $users[0]) {
$userid = trim($users[1]);
$name = trim($users[2]);
$password = trim($users[3]);
}
}
print_r($userid);
// print_r($name);
// print_r($password);
// fclose($user);
if (!empty($_POST['userid2']) && !empty($_POST['name2']) && !empty($_POST['password2'])) {
$id = $_SESSION['id'];
$userid = $_POST['userid2'];
$name = $_POST['name2'];
$password = $_POST['password2'];
// var_dump($id);
// var_dump($userid);
// var_dump($name);
// var_dump($password);
// print_r($_POST);
$user = fopen("csv/user.csv", "r");
$value = array();
while ($line = fgets($user)) {
$lines = explode(",", $line);
if ($lines[0] != $id && trim($lines[1]) == $userid) {
print_r($lines[0]);
$e = "IDがすでに使われています";
// break;
}
if ($lines[0] != $id && trim($line[1]) != $userid) {
$value[] = $line;
// print_r($lines[0]);
}
if ($lines[0] == $id) {
// print_r($lines);
// print_r($value);
$textcontent = implode(",", array($id, $userid, $name, $password . "\n"));
// $textcontent =$id.",". $userid.",".$name.",".$password."/n";
// $n = nl2br('/n');
$value[] = $textcontent;
}
}
fclose($user);
print_r($value);
$handle = fopen("csv/user.csv", "w");
foreach ($value as $val) {
fwrite($handle, $val);
}
fclose($handle);
$_SESSION['name'] = $name;
$t = "内容を編集しました";
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>テキストテーブル</title>
</head>
<body>
<p style="color:red"><?php echo $e; ?></p>
<p style="color:blue"><?php echo $t; ?></p>
<form action="edit.php" method="post">
<p><?php echo $_SESSION['name'] . "さんのユーザ編集画面"; ?></p>
<lavel>ID</lavel><br>
<input type="text" name="userid2" value="<?php echo $userid; ?>">
<br>
<lavel>名前</lavel>
</lavel><br>
<input type="text" name="name2" value="<?php echo $name; ?>">
<br>
<lavel>パスワード</lavel><br>
<input type="password" name="password2" value="<?php echo $password ?>">
<br><input type="submit" value="編集">
<br><input type="reset">
</form>
<a href="top.php">トップページ</a>
<a href="delete.php">退会処理</a>
ユーザ情報を削除する退会処理
<?php
session_start();
$t = "";
// if (!isset($_SESSION['id'])) {
// header('Location: login.php');
// exit;
// }
if (!isset($_POST['destroy'])) {
$user = fopen("csv/user.csv", "r");
$value = array();
$value2 = array();
while ($line = fgets($user)) {
$users = explode(",", $line);
if ($_SESSION['id'] != $users[0]) {
$value[] = $line;
// break;
} else {
$value2[] = $line;
}
print_r($value);
}
fclose($user);
$user = fopen("csv/user.csv", "w");
foreach ($value as $val) {
fwrite($user, $val);
}
fclose($user);
$t = "アカウントを削除しました";
session_destroy();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<p style="color:blue"><?php echo $t; ?></p>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>アカウント退会処理</title>
</head>
<body>
<form action="delete_done.php" method="post">
<input type="submit" value="退会" name='destroy'>
</form>
</body>
</html>
<a href="top.php">トップページ</a>
<?php
session_start();
session_destroy();
header("Location:login.php");
?>