PHP DBなし 掲示板 返信機能について
ユーザーには1、附番ID、2、ユーザーID、3、ユーザーの名前、4、パスワードが割り振られています。それぞれの
ユーザーの情報は、CSVファイルに書かれています。
附番は別のCSVファイルに書かれています
そして投稿した内容も別のCSVファイルに書かれています。投稿できる内容はテキストボックスに書かれた内容と日付けのみです。それに対して返信できるようにしたいです。
返信は無限にできるようにしたいのですが今の構造のテーブルに挿入するのが難しいです。
画像も投稿できるようにしたいです 返信機能も画像投稿ができるようにしたいです ファイルが多いのでtop.phpだけ載せます 他はgithubに挙げています https://toukanno.github.io/phpNodblogincsv-reply/
一応最初の投稿には0を持たせて返信の投稿にはその附番を持たせました
他の問題点
問題点1、php7なら動くがphph5.3では動かない
問題点2,空の投稿内容が追加されてしまう
<?php
require_once("func/header.php");
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']);
// function getUserText($flg)
// {
// $handle = fopen("csv/text.csv", "r");
// while ($line = fgets($handle)) {
// $column = explode(",", $line);
// if ($flg > 0) {
// continue;
// }
// $user2["textid"] = trim($column[0]);
// $user2["textflg"] = trim($column[1]);
// $user2["id"] = trim($column[2]);
// $user2["comment"] = trim($column[3]);
// $user2["date"] = trim($column[4]);
// $user2["deleteflg"] = trim($column[5]);
// $value[] = $user2;
// return $user2;
// }
// return false;
// }
?>
<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="hidden" name="flg" value="0">
<input type="submit" value="投稿" class="btn btn-primary">
</form>
</div>
<div class="row">
<?php
$handle = fopen("csv/text.csv", "r");
while ($line = fgets($handle)) {
$lines = explode(",", $line);
$a[] = $lines;
// $textids[] = $lines[0];
// $textflgs[] = trim($lines[1]);
}
$b = array();
foreach ($a as $key => $value1) {
if ($value1[1] == 0) {
$b[] = $value1;
// $e[] = $value1;
// print_r($value1[2]);
foreach ($a as $key2 => $value2) {
if ($value1[0] == $value2[1]) {
$b[] = $value2;
// $c[] = $value2;
}
}
}
}
// print_r($e);
// $sorted_ary[] = $b;
$a = $b;
// print_r($a);
echo "<table class='table'>
<thead class='thead-light'>
<tr>
<th>番号</th>
<th>ログインID</th>
<th>ユーザー名</th>
<th>コメント</th>
<th>投稿日</th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
";
// $delete = array();//削除されたtextIDを保存する用の配列
foreach ($a as $key3 => $value3) {
// 削除したコメントは非表示にする。1が削除されたコメント。
// $delete = array();
if (preg_match("/1.$/", $value3[5])) {
// $delete[] = $value3[0]; //削除されたtextIDを保存する
continue;
}
//返信フラグに削除フラグがついた内容があったら消える
// if (in_array($value3[1], (array)$delete)) {
// continue;
// }
$id = $value3[2];
$login_id = "-";
$name = "-";
if (getLoginUser($id)) {
$login_id = getLoginUser($id)["login_id"];
$name = getLoginUser($id)["name"];
}
$textid = "-";
$textflg = "-";
$textid = $value3[0];
$textflg = $value3[1];
$comment = $value3[3];
$datetime = $value3[4];
$deleteflg = $value3[5];
// $value = array($textid, $textflg, $id, $name, $date, $deleteflg, $comment, $datetime);
echo "<tr>";
echo "<td>" . $textid . "</td>";
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="' . $textid . '" name= "textid">';
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 = "' . $textid . '" name= "textid">';
echo ' <input type="hidden" value = "' . $textflg . '" name= "textflg">';
echo ' <input type="hidden" value = "' . $comment . '" name= "comment">';
echo ' <input type="hidden" value = "' . $login_id . '" name= "login_id">';
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 = "' . $textid . '" name= "textid">';
echo ' <input type="hidden" value = "' . $textflg . '" name= "textflg">';
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>";
?>
</div>
</div>
</body>
1,0,11,ないよう1,2020-09-24 07:09:07,0
2,0,11,ないよう2,2020-09-24 07:09:13,0
3,0,11,ないよう3,2020-09-24 07:09:21,0
4,0,11,ないよう4,2020-09-24 07:09:51,0
5,0,12,ないよう5,2020-09-24 07:09:32,1
6,0,12,ないよう6,2020-09-24 07:09:37,0
7,0,12,ないよう7,2020-09-24 07:09:45,0
8,7,12,7番目のuser3へ返信:ないよう8,2020-09-24 08:09:23,0
9,8,12,8番目のuser3へ返信:ないよう9,2020-09-24 09:09:13,0
10,6,11,6番目のuser3へ返信:へんしんないよう,2020-09-25 01:09:58,0
11,2,11,2番目のuser2へ返信:へんしんないよう2,2020-09-25 01:09:02,0
<?php
require_once("func/header.php");
session_start();
if (!$_SESSION['id']) {
header('Location: login.php');
exit;
}
if (!$_POST['textid']) {
header('Location: login.php');
exit;
}
print_r($_POST['textid']);
print_r($_POST['login_id']);
print_r($_SESSION['id']);
?>
<!DOCTYPE html>
<title>返信内容</title>
<body>
<div class="container">
<h1>返信内容</h1>
<div class="row">
<p class="bg-success"><?php echo $_POST['textid']."番目"; ?></p><br>
<p class="text-light bg-dark"><?php echo $_POST['login_id']."さんに返信する"; ?></p><br>
<p class="bg-info"><?php echo "内容:".$_POST['comment']; ?></p><br>
<form action="reply_done.php" method="post">
コメント<br>
<input type="text" name="comment"><br>
<input type="hidden" value="<?php echo $_POST['textid']; ?>" name="textid"><br>
<input type="hidden" value="<?php echo $_POST['login_id']; ?>" name="login_id"><br>
<input type="submit" value="投稿" class="btn btn-outline-primary"><br>
</form>
</div>
</div>
</body>
<?php
session_start();
require_once("func/header.php");
if (!$_SESSION['id']) {
header('Location: login.php');
exit;
}
if (!$_POST['textid']) {
header('Location: login.php');
exit;
}
print_r($_POST['textid']);
print_r($_POST['login_id']);
print_r($_SESSION['id']);
// ユーザからの情報があるかないかの確認
function getUserText($textid)
{
$handle = fopen("csv/text.csv", "r");
while ($line = fgets($handle)) {
$column = explode(",", $line);
if ($textid != trim($column[0])) {
continue;
}
$user["textid"] = trim($column[0]);
$user["textflg"] = trim($column[1]);
$user["id"] = trim($column[2]);
$user["name"] = trim($column[3]);
$user["date"] = trim($column[4]);
$user["deleteflg"] = trim($column[5]);
return $user;
}
return false;
}
$user = getUserText($_POST['textid']);
if (!empty($_POST['comment'])) {
$handle = fopen("csv/text.csv", "r");
$data = "";
while ($line = fgets($handle)) {
$data .= $line;
}
// 投稿
$textid = file("csv/textid.csv");
$textid[0] +=1;
$textids =fopen("csv/textids.csv","a");
fwrite($textids,$textid[0]."\n");
fclose($textids);
$line = $textid[0];
$line .= "," . $_POST['textid']; //最初の投稿かへんしんかどうか
$line .= "," . $_SESSION['id'];
$line .= "," . $_POST['textid'] . "番目の" . $_POST['login_id'] . "へ返信:" . $_POST["comment"];
$line .= "," . date('Y-m-d H:m:s');
$line .= "," . 0; //削除フラグ
$line .= PHP_EOL;
$data .= $line;
fclose($handle);
// 書き込み
$handle = fopen("csv/text.csv", "w");
fwrite($handle, $data);
fclose($handle);
}
$textidfp = fopen("csv/textid.csv", "w");
fwrite($textidfp, $textid[0]);
fclose($textidfp);
?>
<meta http-equiv="refresh" content="1;URL=top.php">
コメントを投稿しました
<?php
session_start();
require_once("func/header.php");
$t = "";
if (!isset($_SESSION['id'])) {
header('Location: login.php');
exit;
}
if (!isset($_POST['textid'])) {
header('Location: top.php');
exit;
}
// 読み込み
$handle = fopen("csv/text.csv", "r");
$data = "";
while ($line = fgets($handle)) {
$lines = explode(",", $line);
if ($_POST['textid'] == $lines[0]) {
// 削除フラグとして行末に1をつけることとした
$line = $lines[0];
$line .= "," . trim($lines[1]); //最初の普通の投稿かもしくは返信内容か?
$line .= "," . $_SESSION['id'];
$line .= "," . $_POST["comment"];
$line .= "," . date('Y-m-d H:m:s');
$line .= "," . 1; //削除フラグ
$line .= PHP_EOL;
}
//postでわたってきたidとflgidを比較して一致したものを通す
if($_POST['textid'] == $lines[1]) {
$line = $lines[0];
$line .= "," . trim($lines[1]); //最初の普通の投稿かもしくは返信内容か?textflg
$line .= "," . trim($lines[2]); //userid
$line .= "," . trim($lines[3]); //comment
$line .= "," . date('Y-m-d H:m:s'); //時間
$line .= "," . 1; //削除フラグをつける
$line .= PHP_EOL;
}
$data .= $line;
}
print_r($data);
fclose($handle);
// 書き込み
$handle = fopen("csv/text.csv", "w");
fwrite($handle, $data);
fclose($handle);
?>
<meta http-equiv="refresh" content="1;URL=top.php">
コメントを削除しました。