質問編集履歴

1 質問内容をシンプルにしました。

yu_moto

yu_moto score 7

2015/12/14 10:04  投稿

簡易掲示板の編集機能
簡易掲示板の編集機能(配列の差し替え)
簡易掲示板で簡易掲示板を作っていて、下記のコードで編集機能を実装しようとしています。途中までは書けていると思うのですが、投稿の差し替えがうまくいきません。
簡易掲示板を作っていて、下記のコードで編集機能を実装しようとしているのですが、編集内容として送られてきた配列の値と編集前の配列の値の差し替えが上手くいきません。
具体的には、「編集番号が送信されると、その番号に対応した投稿を編集する編集モードになり、編集モードから投稿が送信されると、新しく送信された値と編集対象の値(すでに投稿されている値)を差し替える。」という処理を書きたいです。
下記のコードにどう書けばいいのでしょうか。
下記のコードをどう書き直せば上手くいくのでしょうか。
```PHP
<?php
   $name = $_POST['name'];
   $name = htmlspecialchars($name);
   $comment = $_POST['comment'];
   $comment = htmlspecialchars($comment);
   $delete = $_POST['delete'];
   $delete = htmlspecialchars($delete);
   $edit = $_POST['edit'];
   $edit = htmlspecialchars($edit);
   $editContents = $_POST['editContents'];
   $editContents = htmlspecialchars($editContents);
   $time = date("Y/m/d H:i:s");
   $line = file("kb.txt");
   $num = count($line);
   $write = "{". $num . "}<>{" . $name . "}<>{" . $comment . "}<>{" . $time . "}";
   if (!empty($name) && !empty($comment)) {
       $fp = fopen ("./kb.txt","a");
       fputs ($fp, $write."\n");
       fclose ($fp);
   }
   
   if (!empty($delete)) {
       $delCon = file("kb.txt");
       for ($j = 0; $j < count($delCon) ; $j++) {
           $delData = explode("<>", $delCon[$j]);
           if ($delData[0] == "{".$delete."}") {
               array_splice($delCon, $j, 1);
               file_put_contents("./kb.txt", $delCon);
           }
       }
   }
   
   if (!empty($edit)) {
       $ediCon = file("kb.txt");
       for ($k = 0; $k < count($ediCon); $k++) {
           $ediData = explode("<>", $ediCon[$k]);
           if ($ediData[0] == "{".$edit."}") {
               for($h = 0; $h < count($ediData); $h++){
                   $simEdit[$h] = mb_substr(trim($ediData[$h]), 1, -1);
               }
           }
       }
   }
   if(!empty($editContents)) {
       $edi = file("kb.txt");
       for ($l = 0; $l < count($edi); $l++) {
           $ediDatat = explode("<>", $edi[$l]);
           if ($ediDatat[0] == "{".$num."}") {
               //ここに何を書けばいいのかが分からない。
               //array_replace使用?
               file_put_contents("./kb.txt", $edi);
           }
       }
   }
   
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
   <form method="POST" action="<?php echo($_SERVER['PHP_SELF']) ?>">
       <label for="name">名前:</label>
       <input type="text" name="name" value="<?php echo $simEdit[1]; ?>"><br><br>
       <label for="comment">コメント:</label>
       <textarea name="comment" cols="30" rows="5"><?php echo $simEdit[2]; ?></textarea><br>
       <input type="submit" value="投稿する">
       <?php
       if (!empty($simEdit[1]) && !empty($simEdit[2])) {
           echo '<input type="hidden" name="editContents" value="editContents">';
       }
       ?>
   </form>
   <br>
   <form method="POST" action="<?php echo($_SERVER['PHP_SELF']) ?>">
       <?php
       if (isset($simEdit[1]) && isset($simEdit[2])) {
            echo '<input type="hidden" name="delete"><br>';
       } else {
           echo '<label for="delete">削除対象番号</label><br>
                 <input type="text" name="delete"><br>
                 <input type="submit" value="削除する">';
       }
       ?>
   </form>
   <br>
   <form method="POST" action="<?php echo($_SERVER['PHP_SELF']) ?>">
       <?php
       if (isset($simEdit[1]) && isset($simEdit[2])) {
            echo '<input type="hidden" name="edit"><br>';
        } else {
           echo '<label for="edit">編集対象番号</label><br>
                 <input type="text" name="edit"><br>
                 <input type="submit" value="編集する">';
        }
       ?>
   </form>
       
<?php
   $contents = file('kb.txt');
   foreach($contents as $line){
       $data = explode("<>", $line);
       for($i = 0 ; $i < count($data); $i++){
           echo $data[$i]."<br>";
       }
   }
   
?>
</body>
</html>
```
  • PHP

    31250 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る