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

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

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

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

Q&A

解決済

1回答

5296閲覧

PHP 簡易掲示板の編集機能

fkaztera

総合スコア7

PHP

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

0グッド

0クリップ

投稿2017/09/27 04:34

###前提・実現したいこと
phpで簡易的な掲示板を作っています。 ディレクトリにはphpファイルとは別でsample2_2というテキストファイルをつくっており、そこで投稿者の番号と名前とコメントを保存しています。

現在投稿を削除する機能の実装まではできたのですが、編集する機能をどう実装すればいいのか分かりません。
どう実装すればいいのか教えて頂けると幸いです。

編集する番号を編集フォームで入力し編集が押されたとき入力フォームに、編集する番号の名前とコメントが入力済み状態で表示し、編集かどうかわかるように<input type="hidden">タグを用いて実装し、そこから差し替えた配列をテキストに上書き保存する
まで実装したいです。

###該当のソースコード

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>kadai2_5</title> </head> <body> <?php date_default_timezone_set('Asia/Tokyo'); $time = date('Y/m/d H:i:s'); $fp = fopen("sample2_2.txt", "a"); $str = $_POST["name"]; $com = $_POST["comment"]; $time = date('Y年m月d日 H時i分s秒'); $datafile='sample2_2.txt'; $num = sizeof(file($datafile))+1; if (isset($_POST['sent'])){ fwrite($fp,$num."<>".$str."<>".$com."<>".$time."\n"); fclose($fp); } ?> <form action="" method="post"> 名前:<br/> <input type="text" name="name" size="30" value="" /><br/> コメント:<br/> <textarea name="comment" cols="30" rows="5"></textarea><br /> <br /> <input type="submit" name="sent" value="送信" /> </form> <form action="" method="post"> 削除対象番号:<br> <input type="number" name="delno" value="" /><br/> <input type="submit" name="delete" value="削除"> </form> <?php if (isset($_POST['delete'])){ //削除 $file_name = "sample2_2.txt"; $array = file($file_name); for ($i=0;$i<count($array);++$i){ $line = explode("<>",$array[$i]); if($line[0] == $_POST['delno']){ $file = file('sample2_2.txt'); unset($file[$i]); file_put_contents('sample2_2.txt', $file); } } } $file_name = "sample2_2.txt"; $array = file($file_name); for ($i=0;$i<count($array);++$i){ $line = explode("<>",$array[$i]); echo ($line[0]." ".$line[1]." ".$line[2]." ".$line[3]."<br />\n"); } ?> </body> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

編集フォームは入力フォームとほぼ同じ(編集対象の投稿番号が加わるだけ)ですし、データの書き換えも削除とほぼ同じ(unsetで消す部分を、新しいデータに差し替えるだけ)だと思いますが?

つまずくとしてはUI(ユーザーインタフェース)をどうするか的なとこでしょうか?主に2パターン考えられます。

1ページで実装:

  1. ユーザー:[編集] ボタンそれを押す → JavaScript で投稿フォームに投稿済みの内容が転記される
  2. ユーザー:表示された内容を変更して [送信] ボタンを押す
  3. PHP:送信されたデータが新規投稿か編集かを判断し、場合分けして処理

つまりユーザーによってはフォームが 新規投稿フォーム 兼 編集フォームになっているということです。

ページを分けて実装:

  1. ユーザー:[編集]ボタンそれを押す → 編集専用のページ(例えば kadai2_5_edit.php)に飛ぶ
  2. ユーザー:編集フォームに記入し [送信] ボタンを押す
  3. PHP:編集処理 → メインページへリダイレクト

現在、表示・投稿・削除 を1ページで実装しているので、編集も同様に同じページでやるのがスマートな気がしますがUIを作る難易度が高めです。ナイーブに作るならページを分けた方が楽だと思います。


ちなみに投稿されたコードはいくつかの脆弱性があります。

  1. 区切り文字 <> や改行を含んだ投稿を行うとデータ構造が壊れて正常に動かなくなる
  2. JavaScriptのコードが投稿できてしまうため、XSS:クロスサイトスクリプティング攻撃を許してしまう

今は学習のためのサンプルアプリ作成だと思うので不要ですが、今後実用的なWebアプリを作っていきたいのなら必ず考慮してください。

投稿2017/09/28 00:50

miyahan

総合スコア3095

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問