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

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

ただいまの
回答率

88.62%

php 掲示板の消去機能

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,941

shoutikubai

score 11

```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)){  
$number = file_get_contents("counter.txt");  
$name = $_POST["name"];  
$comment = $_POST["comment"];  
$date = date('Y-m-d-G-i');  

$file_number = "k_2_3.txt";  
$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);  
}  
elseif($delDate == $delete){  
$c = fopen("k_2_3.txt", "a");  
@fwrite($c,"消去しました。" );  
fclose($c);  
}  
}  
}  
?>  



<?php echo $message; ?>  
<form action="k_2_4.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" );   
}  


?>

```

前提・実現したいこと

送信された番号の投稿を消去したい。

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

投稿されている番号の取得が上手くいかない。
消去された場合に消去したことを表示できていない。

自分なりにコードを組んでみたのですが、消去番号を4にしたりすると、四番
目の投稿を消してしまい、投稿番号4を消すように上手くできていません。
それと消去された投稿に消去されたことを表示したいのですが、それも上手く出来ていません。
どうか改善点などご教授くだされば、幸いです。

counter.txtは別のところにあらかじめ、0を入力しておいてあります。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • shoutikubai

    2016/09/17 14:24

    ありがとうございます。

    キャンセル

  • kei344

    2016/09/17 15:14

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

    キャンセル

  • shoutikubai

    2016/09/17 16:12

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

    キャンセル

回答 3

checkベストアンサー

+1

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

<?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)) {
        $number  = (int)file_get_contents("counter.txt");
        $name    = $_POST["name"];
        $comment = $_POST["comment"];
        $date    = date('Y-m-d-G-i');
        $number++;
        $fp = fopen("k_2_3.txt", "a");
        fwrite($fp, "$number'<>'$name'<>'$comment'<>'$date\n");
        fclose($fp);
        file_put_contents("counter.txt", $number);
    }


}
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[0] != $delete) {
            $b = fopen("k_2_3.txt", "a");
            @fwrite($b, $delCon[$j]);
            fclose($b);
        } elseif ($delDate[0] == $delete) {
            $c = fopen("k_2_3.txt", "a");
            @fwrite($c, "消去しました。\n");
            fclose($c);
        }
    }
}
?>



<?php
echo $message;
?>
<form action="k_2_4.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");
}


?>


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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/17 14:23

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

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

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

fwrite($fp, "$number'<>'$name'<>'$comment'<>'$date\n");

 のところのシングルクォーテーションは必要か。投稿したときに何か変な表示になってないか。
$delDateに[]はいらないのか。書き込まれる順番はあっているのか。
自分が気になった点です。何かしらのヒントになればいいなと思い書いておきます。

<?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/17 14:21

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

    キャンセル

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

  • ただいまの回答率 88.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る