質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Q&A

解決済

3回答

5009閲覧

php 掲示板の消去機能

shoutikubai

総合スコア11

PHP

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

0グッド

0クリップ

投稿2016/09/16 04:18

編集2016/09/16 10:04
```php コード

php

1<?php 2ini_set('display_errors', 1); 3error_reporting(E_ALL); 4 5date_default_timezone_set('Asia/Tokyo'); 6 7$err_msg1 = ""; 8$err_msg2 = ""; 9$message =""; 10$name = ( isset( $_POST["name"] ) === true ) ?$_POST["name"]: ""; 11$comment = ( isset( $_POST["comment"] ) === true ) ? trim($_POST["comment"]) : ""; 12 13if ( isset($_POST["toukou"] ) === true ) { 14 if ( $name === "" ) $err_msg1 = "名前を入力してください"; 15 16 if ( $comment === "" ) $err_msg2 = "コメントを入力してください"; 17 18 if( $err_msg1 === "" && $err_msg2 ==="" ){ 19 $message ="書き込みに成功しました。"; 20 } 21 22} 23 24 25 26if (null != filter_input_array(INPUT_POST)) { 27 $name = filter_input(INPUT_POST, 'name'); 28 $comment = filter_input(INPUT_POST, 'comment'); 29 30 31if (!empty($name) && !empty($comment)){ 32$number = file_get_contents("counter.txt"); 33$name = $_POST["name"]; 34$comment = $_POST["comment"]; 35$date = date('Y-m-d-G-i'); 36 37$file_number = "k_2_3.txt"; 38$number_array = file( $file_number ); 39 for( $i = 0; $i <= count($number_array );++$i ){ 40 $number++ ;} 41 42 43 44$fp = fopen("k_2_3.txt", "a"); 45fwrite($fp, "$number'<>'$name'<>'$comment'<>'$date\n"); 46fclose($fp); 47 } 48 49 50} 51if (isset($_POST["delete"])) { 52 53$delete = $_POST["delete"]; 54$delCon = file("k_2_3.txt"); 55$a = fopen("k_2_3.txt", "w"); 56 @fwrite($a,"" ); 57 fclose($a); 58for ($j = 0; $j < count($delCon) ; $j++){ 59$delDate = explode("<>", $delCon[$j]); 60array_splice($delDate,1); 61 62if ($delDate != $delete) { 63$b = fopen("k_2_3.txt", "a"); 64 @fwrite($b,$delCon[$j] ); 65 fclose($b); 66} 67elseif($delDate == $delete){ 68$c = fopen("k_2_3.txt", "a"); 69 @fwrite($c,"消去しました。" ); 70 fclose($c); 71} 72} 73} 74?> 75 76 77 78<?php echo $message; ?> 79<form action="k_2_4.php" method="post" > 80名前を入力してください。<br/> 81<input type="text" name="name" value="<?php echo $name; echo $err_msg1; ?>" /><br/> 82コメント<br/> 83<textarea name ="comment"cols="50" rows="5"><?php echo $comment;echo $err_msg2; ?></textarea> 84<br> 85<input type="submit" name="toukou" value="投稿" /> 86 87</form> 88 89 <form action="" method="POST"> 90 削除対象番号<input type="text" name="delete"> 91 <input type="submit" name="deleteNo" value="削除"> 92 </form> 93 <h2>投稿一覧</h2> 94 95 96<?php 97 98$file_name = "k_2_3.txt"; 99 100 $ret_array = file( $file_name ); 101 102 103 for( $i = 0; $i < count($ret_array); ++$i ) { 104 $line = explode( '<>', $ret_array[$i]); 105 echo ( $ret_array[$i] . "<br />\n" ); 106 } 107 108 109?> 110 111
###前提・実現したいこと 送信された番号の投稿を消去したい。 ###発生している問題・エラーメッセージ 投稿されている番号の取得が上手くいかない。 消去された場合に消去したことを表示できていない。 自分なりにコードを組んでみたのですが、消去番号を4にしたりすると、四番 目の投稿を消してしまい、投稿番号4を消すように上手くできていません。 それと消去された投稿に消去されたことを表示したいのですが、それも上手く出来ていません。 どうか改善点などご教授くだされば、幸いです。 counter.txtは別のところにあらかじめ、0を入力しておいてあります。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/09/16 05:30 編集

$delDataと$delDateが混在してますが、大丈夫か? $commentに改行コードを含んでいる場合や、「<>」を含んでいる場合に障害が発生しそうですね。
toutou

2016/09/16 06:08

こっちが間違ってたらあれなんですが、投稿したときのexplode的なものが抜けてる気が。あとcounter.txtはどこに?
shoutikubai

2016/09/16 10:19

ご指摘ありがとうございます。修正すると、消去機能も反応しなくなったのですが、なにか根本的におかしなところがあれば、ご指摘ください。
退会済みユーザー

退会済みユーザー

2016/09/16 11:07

インデント見辛いから見るきが失せる
shoutikubai

2016/09/16 11:21

すみません。以後気をつけます。今回はご容赦ください。
shoutikubai

2016/09/17 05:24

ありがとうございます。
kei344

2016/09/17 06:14

まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。また、解決されていないなら状況をお教えください。
shoutikubai

2016/09/17 07:12

ご指摘ありがとうございました!
guest

回答3

0

ベストアンサー

正しく動くように修正してみました。

php

1<?php 2ini_set('display_errors', 1); 3error_reporting(E_ALL); 4 5date_default_timezone_set('Asia/Tokyo'); 6 7$err_msg1 = ""; 8$err_msg2 = ""; 9$message = ""; 10$name = (isset($_POST["name"]) === true) ? $_POST["name"] : ""; 11$comment = (isset($_POST["comment"]) === true) ? trim($_POST["comment"]) : ""; 12 13if (isset($_POST["toukou"]) === true) { 14 if ($name === "") 15 $err_msg1 = "名前を入力してください"; 16 17 if ($comment === "") 18 $err_msg2 = "コメントを入力してください"; 19 20 if ($err_msg1 === "" && $err_msg2 === "") { 21 $message = "書き込みに成功しました。"; 22 } 23 24} 25 26 27 28if (null != filter_input_array(INPUT_POST)) { 29 $name = filter_input(INPUT_POST, 'name'); 30 $comment = filter_input(INPUT_POST, 'comment'); 31 32 if (!empty($name) && !empty($comment)) { 33 $number = (int)file_get_contents("counter.txt"); 34 $name = $_POST["name"]; 35 $comment = $_POST["comment"]; 36 $date = date('Y-m-d-G-i'); 37 $number++; 38 $fp = fopen("k_2_3.txt", "a"); 39 fwrite($fp, "$number'<>'$name'<>'$comment'<>'$date\n"); 40 fclose($fp); 41 file_put_contents("counter.txt", $number); 42 } 43 44 45} 46if (isset($_POST["delete"])) { 47 48 $delete = $_POST["delete"]; 49 $delCon = file("k_2_3.txt"); 50 $a = fopen("k_2_3.txt", "w"); 51 @fwrite($a, ""); 52 fclose($a); 53 for ($j = 0; $j < count($delCon); $j++) { 54 $delDate = explode("'<>'", $delCon[$j]); 55 array_splice($delDate,1); 56 if ($delDate[0] != $delete) { 57 $b = fopen("k_2_3.txt", "a"); 58 @fwrite($b, $delCon[$j]); 59 fclose($b); 60 } elseif ($delDate[0] == $delete) { 61 $c = fopen("k_2_3.txt", "a"); 62 @fwrite($c, "消去しました。\n"); 63 fclose($c); 64 } 65 } 66} 67?> 68 69 70 71<?php 72echo $message; 73?> 74<form action="k_2_4.php" method="post" > 75名前を入力してください。<br/> 76<input type="text" name="name" value="<?php 77echo $name; 78echo $err_msg1; 79?>" /><br/> 80コメント<br/> 81<textarea name ="comment"cols="50" rows="5"><?php 82echo $comment; 83echo $err_msg2; 84?></textarea> 85<br> 86<input type="submit" name="toukou" value="投稿" /> 87 88</form> 89 90<form action="" method="POST"> 91削除対象番号<input type="text" name="delete"> 92<input type="submit" name="deleteNo" value="削除"> 93</form> 94<h2>投稿一覧</h2> 95 96 97<?php 98 99$file_name = "k_2_3.txt"; 100 101$ret_array = file($file_name); 102 103 104for ($i = 0; $i < count($ret_array); ++$i) { 105 $line = explode('<>', $ret_array[$i]); 106 echo ($ret_array[$i] . "<br />\n"); 107} 108 109 110?>

書き込みもおかしくなっていたので直しました。
counter.txtも現状のカウンタに合わせて更新しています。
なるべく細かい部分は直さずに根本的におかしいところだけ直したので、
元のコードと比較してどこがおかしかったのか見ていただけるとよいかと。
自分が作業する前にkei344さんが教えてくれたコードを整形するツールでインデントさせています。
http://beta.phpformatter.com/

制限として、コメントが複数行だとうまく動きません。ファイル上の行数がずれるので...
複数行に対応させたいなら、改行文字を何かに置き換えて保存するなどの工夫が必要だと思います。

不明な点、質問等あれば、コメント欄に書いてください。

投稿2016/09/16 23:12

編集2016/09/16 23:18
popobot

総合スコア6586

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

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

shoutikubai

2016/09/17 05:23

無事実装することができました。ありがとうございます。 複数行に対応させるために、少し勉強して対応させていきたいと思います。 もし、そこでまたつまずきましたら、質問させていただきます。
guest

0

削除機能のほうの答えじゃなくて申し訳ないんですが、段落ごとに横にずらしたり、コメントアウトで説明文をつけると後で見たとき読みやすくなりますね。ほかの人が読んだときも。例は一応作ったけどあってるかは不明。中身で少し気になった点は、一番下辺りの$lineが使われてない点、fileにした時に変数に入れたり名前を直で入れたりでまちまちなところ、一番上とかにまとめてグローバス変数にしてもいいかなと思いました。一回書くだけですみますし。機能のほうにはふれてません。すいません。

追記:確認してほしいことがあります。

fwrite($fp, "$number'<>'$name'<>'$comment'<>'$date\n"); ``` のところのシングルクォーテーションは必要か。投稿したときに何か変な表示になってないか。 ``$delDate``に[]はいらないのか。書き込まれる順番はあっているのか。 自分が気になった点です。何かしらのヒントになればいいなと思い書いておきます。 ```php <?php ini_set('display_errors', 1); error_reporting(E_ALL); date_default_timezone_set('Asia/Tokyo'); $err_msg1 = ""; $err_msg2 = ""; $message =""; $name = ( isset( $_POST["name"] ) === true ) ?$_POST["name"]: ""; $comment = ( isset( $_POST["comment"] ) === true ) ? trim($_POST["comment"]) : ""; if ( isset($_POST["toukou"] ) === true ) { if ( $name === "" ) $err_msg1 = "名前を入力してください"; if ( $comment === "" ) $err_msg2 = "コメントを入力してください"; if( $err_msg1 === "" && $err_msg2 ==="" ){ $message ="書き込みに成功しました。"; } } if (null != filter_input_array(INPUT_POST)) { $name = filter_input(INPUT_POST, 'name'); $comment = filter_input(INPUT_POST, 'comment'); if (!empty($name) && !empty($comment)){ $file_number = "k_2_3.txt"; $aaa = file($file_number); $number = count($aaa)+1; $name = $_POST["name"]; $comment = $_POST["comment"]; $date = date('Y-m-d-G-i'); $number_array = file( $file_number ); for( $i = 0; $i <= count($number_array );++$i ){ $number++ ;} $fp = fopen("k_2_3.txt", "a"); fwrite($fp, "$number'<>'$name'<>'$comment'<>'$date\n"); fclose($fp); } } //削除機能 if (isset($_POST["delete"])) { $delete = $_POST["delete"]; $delCon = file("k_2_3.txt"); $a = fopen("k_2_3.txt", "w"); fwrite($a,"" ); fclose($a); for ($j = 0; $j < count($delCon) ; $j++){ $delDate = explode("<>", $delCon[$j]); array_splice($delDate,1); if ($delDate != $delete) { $b = fopen("k_2_3.txt", "a"); fwrite($b,$delCon[$j] ); fclose($b); }else if($delDate == $delete){ $c = fopen("k_2_3.txt", "a"); fwrite($c,"消去しました。" ); fclose($c); } } } ?> <?php echo $message; ?> <form action="tes.php" method="post" > 名前を入力してください。<br/> <input type="text" name="name" value="<?php echo $name; echo $err_msg1; ?>" /><br/> コメント<br/> <textarea name ="comment"cols="50" rows="5"><?php echo $comment;echo $err_msg2; ?></textarea> <br> <input type="submit" name="toukou" value="投稿" /> </form> <form action="" method="POST"> 削除対象番号<input type="text" name="delete"> <input type="submit" name="deleteNo" value="削除"> </form> <h2>投稿一覧</h2> <?php $file_name = "k_2_3.txt"; $ret_array = file( $file_name ); //書き込むところ for( $i = 0; $i < count($ret_array); ++$i ) { $line = explode( '<>', $ret_array[$i]); echo ( $ret_array[$i] . "<br />\n" ); } ?>

投稿2016/09/16 12:07

編集2016/09/16 16:27
toutou

総合スコア2050

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

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

shoutikubai

2016/09/17 05:21

[]は、いるみたいでした。丁寧な回答ありがとうございます。
guest

0

$delDataと$delDateの混在でご動作を招いていますので、まず点検してください。

投稿2016/09/16 05:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問