🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

1710閲覧

php簡易掲示板の削除機能 削除後の投稿番号を「最後の投稿の投稿番号+1」として新しい投稿番号を得る方法

yukiiiiii

総合スコア4

COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/08/19 16:54

前提・実現したいこと

php初心者です。phpで簡単な掲示板を作っています。削除機能を実装しています。投稿番号を削除した投稿番号をとばし、最後の投稿の投稿番号+1を新たな投稿番号にしたいです
こちらでも同じような質問がたくさんあったのでほぼすべて見てみましたが、理解することが出来ませんでした。
言葉が足らず申し訳ありませんがご回答のほどよろしくお願いします

発生している問題・エラーメッセージ

現在これらの投稿がされているとします
1  鈴木 一郎  コメント    
2  田中 次郎  コメント    
3  棚 太郎  できたよ  
これから投稿番号2番を削除すると
1  鈴木 一郎  コメント   
3  棚 太郎  できたよ  
このように表示されます
その後新たに投稿すると
1  鈴木 一郎  コメント    
3  棚 太郎  できたよ   
3  田中 次郎  コメント  
このようになってしまいます

これを
1
3
4
としたいです

エラーメッセージ

該当のソースコード

php

1コードif(!empty($_POST['deleten'])){ 2 3 $delete=$_POST['deleten']; 4 5 $delCon = file($filename); 6 7 $fp = fopen("mission_3-3.txt" , "w"); 8 9 for ($j = 0; $j < count($delCon); $j++) { 10 11 $delDate = explode("<>", $delCon[$j]); 12 13 14 if ($delDate[0] != $delete) { 15 16 fwrite($fp, $delCon[$j]); 17 18 } 19 else { 20 fwrite($fp, ""); 21 } 22 } 23 fclose($fp); 24 25 echo $delete."を削除しました<br>"; 26 } 27 28 else{ 29 30 echo "削除したい番号記入してください<br>"; 31 }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

全体のも載せます

php

1コード<html> 2<head> 3 <meta charset="utf-8"> 4 <title>3-3</title> 5</head> 6 7<form method="POST" action="mission_3-3.php"> 8 9<p><label>名前:</label><input type="name" name="name" 10 placeholder="苗字 名前"></p> 11 12<p><label>コメント:</label><input type="text" 13 name="comment"placeholder="コメント"> 14<input type="submit" value="送信する"></p> 15 16<p><label>削除対象番号:</label><input type = "text" name = "deleten"> 17<input type="submit" name="delete" value="削除"></p> 18 19 20 21</form> 22</html> 23 24<?php 25 26$filename="mission_3-3.txt"; 27 28 29 30if(!empty($_POST['comment'])&&($_POST['name'])){ 31 $comment=$_POST['comment']; 32 $name=$_POST['name']; 33 echo "ご記入ありがとうございます<br>"; 34 35 36if(file_exists($filename)){ 37 $num=count(file($filename))+1; 38 } 39 else{$num=1; 40 } 41 42 $date=date("Y,F j, G:i:s, a"); //日付データ 43 44 $comment=$_POST['comment'];//入力フォームからのデータ 45 46 $name=$_POST['name']; //入力フォームからのデータ 47 48 49 $words =$num."<>". $name."<>".$comment."<>".$date; 50 51 $fp = fopen($filename,"a"); 52 53 fwrite( $fp , $words. "\n" ); 54 55 fclose($fp); 56 57 } 58 59 else{ 60 61 echo "入力してください<br>"; 62} 63//3-3 64 65if(!empty($_POST['deleten'])){ 66 67 $delete=$_POST['deleten']; 68 69 $delCon = file($filename); 70 71 $fp = fopen("mission_3-3.txt" , "w"); 72 73 for ($j = 0; $j < count($delCon); $j++) { 74 75 $delDate = explode("<>", $delCon[$j]); 76 77 78 if ($delDate[0] != $delete) { 79 80 fwrite($fp, $delCon[$j]); 81 82 } 83 else { 84 fwrite($fp, ""); 85 } 86 } 87 fclose($fp); 88 89 echo $delete."を削除しました<br>"; 90 } 91 92 else{ 93 94 echo "削除したい番号記入してください<br>"; 95 } 96 97 98 99 100echo "<strong>コメント一覧<br></strong>"; 101 102 103if(file_exists($filename)){ 104 105 $lines = file($filename); 106 107 foreach($lines as $line){ 108 109 $xlines=explode("<>",$line); 110 111 foreach($xlines as $value){ 112 113 echo $value."  "; 114 } 115 echo"<br>"; 116} 117} 118 119?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/08/19 23:29

過去質問にphp掲示板は多数でています。それはどれも参考になりませんでしたか? txtのファイル名からすると同じ課題(書籍かな?)のものと思われるので必ず合致する質問があるはずです。
m.ts10806

2019/08/19 23:32

それにその過去質問ですら「理解できなかった」となるとどのような回答がついても理解にはつながらないと思いますよ。teratailの回答者は過去に同様の質問がでていることを知っている人も少なくないです。大抵過去質問への誘導か同じような回答がつくだけになります。 大事なのは「何を見てどう理解できなかったか」です。その部分が過去質問と違うのであればまたそれに即したアドバイスもつきます。
guest

回答1

0

ちゃんと見ると全部直したくなるので、関係ありそうな箇所だけ見ました

$words =$num."<>". $name."<>".$comment."<>".$date;

なので

$num=count(file($filename))+1;

としている箇所のロジックを見直してください。

投稿2019/08/19 19:07

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukiiiiii

2019/08/19 23:20

ご回答いただきありがとうございます。 "ちゃんと見ると全部直したくなるので" と、ありますが具体的にどこを直したらいいでしょうか? もしお時間に余裕があるのであれば教えていただきたいです。
m.ts10806

2019/08/19 23:27

それだと作業依頼に等しい内容になるので現在の問題だけにフォーカスされた方が良いです。
退会済みユーザー

退会済みユーザー

2019/08/19 23:47

よくあるファイル保存の掲示板で思うことなので、思いつくままに書くと以下な感じ ・インデントの整理 ・ロジックの変更 ・グローバル変数の排除 ・保存形式の変更 ・バリデーションの実施 ・view とロジックの分離 ・ファイル保存箇所の変更 ・CSRF/XSS対策 ・連投対策 等々
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問