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

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

ただいまの
回答率

90.34%

  • PHP

    21325questions

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

phpでの掲示板編集機能について

受付中

回答 1

投稿

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

現在phpを用いた掲示板を作成しているのですが、指定した番号のコメントを編集する機能がどうしても実装できません。
改善点を教えて頂けると嬉しいです。

<html>
<body>
<form action="keijiban.php" method="post">
  名前<input type="text" name="name" ><br />
  コメント<input type="text" name="comment"><br />
  <br />
  <input type="submit" value="送信" />
</form>
<form action="" method="POST"> 
     削除対象番号<input type="text" name="deleteNo"> 
         <input type="submit" name="delete" value="削除"> 
</form>
<form method="POST" action="<?php echo($_SERVER['PHP_SELF']) ?>">
        <label for="edit">編集対象番号</label><br>
        <input type="text" name="edit"><br>
        <input type="submit" value="編集する">
 </form>


<?php 

$filemei = 'keijiban.txt'; 
$line = file($filemei);
 $lastline = explode("<>", $line[count($line)-1]);
$num = $lastline[0] + 1;
 $str = $num. '<>' . $_POST['name'] . '<>' . $_POST['comment']
 . '<>' . date('Y-m-d-H-i-s') . "\n";


if (isset($_POST["delete"])) { 

 $delete = $_POST["deleteNo"]; 
 $delCon = file("keijiban.txt"); 
 for ($j = 0; $j < count($delCon) ; $j++){ 
 $delData = explode("<>", $delCon[$j]); 
 if ($delData[0] == $delete) { 
 array_splice($delCon, $j, 1); 
 file_put_contents($filemei, implode($delCon));

 } 
 } 

 } 

$edit = $_POST['edit'];
    $edit = htmlspecialchars($edit);


    if (!empty($edit)) {
        $ediCon = file("keijiban.txt"); 
        for ($k = 0; $k < count($ediCon) ; $k++) {
            $ediData = explode("<>", $ediCon[$k]);
            if ($ediData[0] == "{".$edit."}") {
                //$simEdit = explode("}<>{", $ediCon[$k]);
                for($h = 0; $h < count($ediData); $h++){
                    $simEdit[$h] = mb_substr(trim($ediData[$h]), 1, -1);
                }
            }
        }
    }


$posts = file("keijiban.txt");
foreach($posts as $post){
 list($num, $name, $message, $time) = explode("<>", $post);
echo h($num);
 echo "<br>";
 echo h($name);
 echo "<br>";
 echo h($message);
 echo "<br>";
 echo h($time);
 echo "<br>";

}

function h($s)
 {
 return htmlspecialchars($s, ENT_QUOTES, "UTF-8", true);
 }





$fp = fopen("keijiban.txt", "r");

fclose($fp);

$fp = fopen('keijiban.txt','a');
fwrite($fp, $str);
fclose($fp);


?>


</body>
</html>




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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

+1

まず、POST先のPHPファイルをkeijiban.phpだとして、HTMLは下記のようにします。

<html>
<body>
<form action="keijiban.php" method="post">
  <!-- create / -->
  名前<input type="text" name="name" ><br>
  コメント<input type="text" name="comment"><br>
  <br>
  <input type="submit" name="create" value="送信">
  <br>
  <!-- delete / -->
  削除対象番号<input type="text" name="deleteNo">
  <input type="submit" name="delete" value="削除">
  <br>
  <!-- edit / -->
  <label for="edit">編集対象番号</label><br>
  <input type="text" name="editNo"><br>
  <input type="submit" name="edit" value="編集する">
</form>

新規登録は下記のようにします。

<?php 

$filemei = 'keijiban.txt'; 
$line    = file($filemei);

// 新規登録
if (isset($_POST['create'])) {
    $lastline = explode("<>", $line[count($line)-1]);
    $num      = intval($lastline[0]) + 1;

    // ファイルに書き込み
    file_put_contents($filemei, $num.'<>'.$_POST['name'].'<>'.$_POST['comment'].'<>'.date('Y-m-d-H-i-s')."\n", FILE_APPEND);
}

削除は下記のようにします。

// 削除
if (isset($_POST["delete"])) {
    $num = $_POST["deleteNo"];

    for ($j = 0; $j < count($line) ; $j++) {
        // 指定番号<> で始まる行を削除
        if (strpos($num.'<>', $line[$k]) === 0) {
            unset($line[$j]);
            break;
        }
    }

    // ファイルに書き込み
    file_put_contents($filemei, implode('', $line));
}

編集でやりたいことがいまいち不明だったので、下記の2つの仕様でコードを書いてみました。

■編集
1.$_POST['editNo']で指定した「番号」の行の波カッコをファイルから削除する
2.$_POST['editNo']で指定した「番号」の行に$_POST['name']$_POST['comment']でファイルを上書きする

// 1. $_POST['edit']で指定した「番号」の行の波カッコをファイルから削除する
...

// 編集
if (isset($_POST['edit'])) {
    $num = htmlspecialchars($_POST['editNo']);

    for ($k = 0; $k < count($line) ; $k++) {
        // {指定番号} で始まる行の波カッコ{、}を削除
        if (strpos('{'.$num.'}', $line[$k]) === 0) {
            $line[$k] = str_replace(['{','}'], ['',''], $line[$k]);
            break;
        }
    }

    // ファイルに書き込み
    file_put_contents($filemei, implode('', $line));
}

foreach($line as $post){
    list($num, $name, $message, $time) = explode("<>", $post);
    echo h($num)."<br>\n";
    echo h($name)."<br>\n";
    echo h($message)."<br>\n";
    echo h($time)."<br>\n";
}

function h($s)
{
    return htmlspecialchars($s, ENT_QUOTES, "UTF-8", true);
}

?>
</body>
</html>

追加では下記のような行フォーマットでコメントが記入されるはずなので、コメント編集の場合も下記のフォーマットに従います。

$str = $num.'<>'.$_POST['name'].'<>'. $_POST['comment'].'<>'.date('Y-m-d-H-i-s')."\n";
// 2. $_POST['editNo']で指定した「番号」の行に$_POST['name']、$_POST['comment']でファイルを上書きする
...

// 編集
if (isset($_POST['edit'])) {
    $num = htmlspecialchars($_POST['editNo']);

    for ($k = 0; $k < count($line) ; $k++) {
        // 指定番号<> で始まる行のコメントを上書き
        if (strpos($num.'<>', $line[$k]) === 0) {
            $line[$k] = $num.'<>'.$_POST['name'].'<>'.$_POST['comment'].'<>'.date('Y-m-d-H-i-s')."\n";
            break;
        }
    }

    // ファイルに書き込み
    file_put_contents($filemei, implode('', $line));
}

foreach($line as $post){
    list($num, $name, $message, $time) = explode("<>", $post);
    echo h($num)."<br>\n";
    echo h($name)."<br>\n";
    echo h($message)."<br>\n";
    echo h($time)."<br>\n";
}

function h($s)
{
    return htmlspecialchars($s, ENT_QUOTES, "UTF-8", true);
}

?>
</body>
</html>

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • PHP

    21325questions

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