PHP DBなし 掲示板 返信機能について
ユーザーには1、附番ID、2、ユーザーID、3、ユーザーの名前、4、パスワードが割り振られています。それぞれの
ユーザーの情報は、CSVファイルに書かれています。
附番は別のCSVファイルに書かれています
そして投稿した内容も別のCSVファイルに書かれています。投稿できる内容はテキストボックスに書かれた内容と日付けのみです。それに対して返信できるようにしたいです。
返信は無限にできるようにしたいのですが今の構造のテーブルに挿入するのが難しいです。
画像も投稿できるようにしたいです 返信機能も画像投稿ができるようにしたいです ファイルが多いのでtop.phpだけ載せます 他はgithubに挙げています
github url: https://github.com/toukanno/phpNodblogincsv-reply
replykinのほうです
<?php
require_once("func/header.php");
//ログインしたメンバーのみがアクセスできる初期画面
//ここでtext.csvユーザ情報を編集させる
session_start();
// // // ログイン済みかを確認
if (!isset($_SESSION['id'])) {
header('Location: login.php');
exit;
}
function getLoginUser($session_id)
{
$handle = fopen("csv/user.csv", "r");
while ($line = fgets($handle)) {
$column = explode(",", $line);
if ($session_id != $column[0]) {
continue;
}
$user["id"] = trim($column[0]);
$user["login_id"] = trim($column[1]);
$user["name"] = trim($column[2]);
return $user;
}
return false;
}
$user = getLoginUser($_SESSION['id']);
?>
<title>テキストテーブル</title>
<body>
<div class="container">
<h1>トップページ</h1>
<div style="text-align:right;">
<?php echo $_SESSION['name'] ?>さんでログイン中
<a href="edit.php">[ユーザー情報編集]</a>
<a href="logout.php">[ログアウト]</a>
</div>
<div class="row">
<form action="comment_insert_done.php" method="post">
コメント
<input type="text" name="comment">
<input type="submit" value="投稿" class="btn btn-primary">
</form>
</div>
<div class="row">
<?php
//読み取り専用でファイルを開く
$handle = fopen("csv/text.csv", "r");
// テーブルのHTMLを生成
echo "<table class='table'>
<thead class='thead-light'>
<tr>
<th>ログインID</th>
<th>ユーザー名</th>
<th>コメント</th>
<th>投稿日</th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
";
// csvのデータを配列に変換し、HTMLに埋め込んでいる
//fgetで値を一行ずつ取得する
// 主キー UPDATE / DELETE用
$line_number = 0;
// 自分自身のCSVの内容を表示
while ($line = fgets($handle)) {
$line_number++;
// 削除したコメントは非表示にする。-から始まるものが削除されたコメント。
if (preg_match("/^-/", $line)) {
continue;
}
// $linesっていう配列にexplodeでカンマ区切りを指定して $lineを区切って代入する
$lines = explode(",", $line);
$id = $lines[0];
$login_id = "-";
$name = "-";
if (getLoginUser($id)) {
$login_id = getLoginUser($id)["login_id"];
$name = getLoginUser($id)["name"];
}
$comment = $lines[1];
$datetime = $lines[2];
echo "<tr>";
echo "<td>" . $login_id . "</td>";
echo "<td>" . $name . "</td>";
echo "<td>" . $comment . "</td>";
echo "<td>" . $datetime . "</td>";
echo '<td>';
if ($id == $_SESSION["id"]) {
echo '<form action="comment_change.php" method="post">';
echo ' <input type="hidden" value="' . $line_number . '" name= "line_number">';
echo ' <input type="submit" class="btn btn-success" value="変更" >';
echo "</form>";
}
echo "</td>";
echo '<td>';
if ($id == $_SESSION["id"]) {
echo '<form action="comment_delete_done.php" method="post" onClick="return confirm(\'削除しますか?\');">';
echo ' <input type="hidden" value = "' . $line_number . '" name= "line_number">';
echo ' <input type="submit" class="btn btn-danger" value="削除" >';
echo "</form>";
}
echo "</td>";
echo '<td>';
echo '<form action="reply.php" method="post" onClick="return confirm(\'返信しますか?\');">';
echo ' <input type="hidden" value = "' . $line_number . '" name= "line_number">';
echo ' <input type="hidden" value = "' . $login_id . '" name= "login_id">';
echo ' <input type="hidden" value = "' . $comment . '" name= "comment">';
echo ' <input type="submit" class="btn btn-secondary" value="返信" >';
echo "</form>";
echo "</td>";
echo "</tr>";
}
echo "</table>";
// #4 ファイルを閉じる
fclose($handle);
?>
</div>
</div>
</body>
<?php
session_start();
if (!$_SESSION['id']) {
header('Location: login.php');
exit;
}
if (!$_POST['line_number']) {
header('Location: login.php');
exit;
}
//postの値がからだったら送信できないようにもしたい
//この場合だとすべての投稿が削除されてしまう
// 読み込み
if (!empty($_POST['comment'])) {
$handle = fopen("csv/text.csv", "r");
$line_number = 0;
$data = "";
while ($line = fgets($handle)) {
$line_number++;
if ($_POST["line_number"] == $line_number) {
// 編集
$line = $_SESSION['id'];
$line .= "," . $_POST["comment"];
$line .= "," . date('Y-m-d H:m:s');
$line .= PHP_EOL;
}
$data .= $line;
}
fclose($handle);
}
// 書き込み
$handle = fopen("csv/text.csv", "w");
fwrite($handle, $data);
fclose($handle);
?>
<meta http-equiv="refresh" content="1;URL=top.php">
コメントを変更しました。
ここから返信処理をする
<?php
require_once("func/header.php");
session_start();
if (!$_SESSION['id']) {
header('Location: login.php');
exit;
}
if (!$_POST['line_number']) {
header('Location: login.php');
exit;
}
// // 投稿
// $line = $_SESSION['id'];
// $line.= "," . $_POST["comment"];
// $line.= "," . date('Y-m-d H:m:s');
// $line.= PHP_EOL;
// $data .= $line;
// fclose($handle);
?>
<!-- <meta http-equiv="refresh" content="1;URL=top.php"> -->
<!-- 返信を投稿しました。 -->
<!DOCTYPE html>
<title>返信内容</title>
<body>
<div class="container">
<h1>返信内容</h1>
<div class="row">
<h2><?php echo $_POST['login_id']."さんに返信する"; ?></h2>
<h3><?php echo "内容:".$_POST['comment']; ?></h3>
<form action="comment_insert_done.php" method="post">
コメント
<input type="text" name="comment">
<input type="submit" value="投稿" class="btn btn-outline-primary">
<input type="hidden" value="<?php echo $_POST['line_number']; ?>" name="line_number">
</form>
</div>
</div>
</body>