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

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

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

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

Q&A

1回答

10002閲覧

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

prominence4563

総合スコア8

PHP

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

0グッド

0クリップ

投稿2017/09/06 13:45

現在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> コード

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

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

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

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

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

guest

回答1

0

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

html

1<html> 2<body> 3<form action="keijiban.php" method="post"> 4 <!-- create / --> 5 名前<input type="text" name="name" ><br> 6 コメント<input type="text" name="comment"><br> 7 <br> 8 <input type="submit" name="create" value="送信"> 9 <br> 10 <!-- delete / --> 11 削除対象番号<input type="text" name="deleteNo"> 12 <input type="submit" name="delete" value="削除"> 13 <br> 14 <!-- edit / --> 15 <label for="edit">編集対象番号</label><br> 16 <input type="text" name="editNo"><br> 17 <input type="submit" name="edit" value="編集する"> 18</form>

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

php

1<?php 2 3$filemei = 'keijiban.txt'; 4$line = file($filemei); 5 6// 新規登録 7if (isset($_POST['create'])) { 8 $lastline = explode("<>", $line[count($line)-1]); 9 $num = intval($lastline[0]) + 1; 10 11 // ファイルに書き込み 12 file_put_contents($filemei, $num.'<>'.$_POST['name'].'<>'.$_POST['comment'].'<>'.date('Y-m-d-H-i-s')."\n", FILE_APPEND); 13}

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

php

1// 削除 2if (isset($_POST["delete"])) { 3 $num = $_POST["deleteNo"]; 4 5 for ($j = 0; $j < count($line) ; $j++) { 6 // 指定番号<> で始まる行を削除 7 if (strpos($num.'<>', $line[$k]) === 0) { 8 unset($line[$j]); 9 break; 10 } 11 } 12 13 // ファイルに書き込み 14 file_put_contents($filemei, implode('', $line)); 15}

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

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

php

1// 1. $_POST['edit']で指定した「番号」の行の波カッコをファイルから削除する 2... 3 4// 編集 5if (isset($_POST['edit'])) { 6 $num = htmlspecialchars($_POST['editNo']); 7 8 for ($k = 0; $k < count($line) ; $k++) { 9 // {指定番号} で始まる行の波カッコ{、}を削除 10 if (strpos('{'.$num.'}', $line[$k]) === 0) { 11 $line[$k] = str_replace(['{','}'], ['',''], $line[$k]); 12 break; 13 } 14 } 15 16 // ファイルに書き込み 17 file_put_contents($filemei, implode('', $line)); 18} 19 20foreach($line as $post){ 21 list($num, $name, $message, $time) = explode("<>", $post); 22 echo h($num)."<br>\n"; 23 echo h($name)."<br>\n"; 24 echo h($message)."<br>\n"; 25 echo h($time)."<br>\n"; 26} 27 28function h($s) 29{ 30 return htmlspecialchars($s, ENT_QUOTES, "UTF-8", true); 31} 32 33?> 34</body> 35</html>

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

php

1$str = $num.'<>'.$_POST['name'].'<>'. $_POST['comment'].'<>'.date('Y-m-d-H-i-s')."\n";

php

1// 2. $_POST['editNo']で指定した「番号」の行に$_POST['name']、$_POST['comment']でファイルを上書きする 2... 3 4// 編集 5if (isset($_POST['edit'])) { 6 $num = htmlspecialchars($_POST['editNo']); 7 8 for ($k = 0; $k < count($line) ; $k++) { 9 // 指定番号<> で始まる行のコメントを上書き 10 if (strpos($num.'<>', $line[$k]) === 0) { 11 $line[$k] = $num.'<>'.$_POST['name'].'<>'.$_POST['comment'].'<>'.date('Y-m-d-H-i-s')."\n"; 12 break; 13 } 14 } 15 16 // ファイルに書き込み 17 file_put_contents($filemei, implode('', $line)); 18} 19 20foreach($line as $post){ 21 list($num, $name, $message, $time) = explode("<>", $post); 22 echo h($num)."<br>\n"; 23 echo h($name)."<br>\n"; 24 echo h($message)."<br>\n"; 25 echo h($time)."<br>\n"; 26} 27 28function h($s) 29{ 30 return htmlspecialchars($s, ENT_QUOTES, "UTF-8", true); 31} 32 33?> 34</body> 35</html>

投稿2017/09/06 20:18

Tomak

総合スコア1652

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問