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

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

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

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

Q&A

解決済

1回答

2132閲覧

PHPで掲示板に編集機能をつけたいのですがそもそもどのように記入すればいいですか?

Moyashiwa

総合スコア18

PHP

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

0グッド

0クリップ

投稿2021/09/19 10:29

編集2021/09/20 04:02

PHPで掲示板に編集機能をつけたいのですがそもそもどのように記入すればいいかわかりません?
下のコードの2個目のelseif(isset($_POST["delete"]) === true) の書き込みを変更するのはわかるのですが、ただ自分が初心者な事もあり、どこに何をつければいいのかが分かりません。
ここでも同じような質問がたくさんあったのでほぼすべて見てみましたが、自分とはコードの書き方が違っていて理解することが出来ませんでした。
教材の問題文は以下のようになっています。
Mission_3-4
掲示板に「編集機能」を付加しよう。指定された番号の投稿を編集できるようにする
問題文
※ミッションの解釈・補足:
編集の手順を分解すると、
・編集元のテキストを、投稿フォームに表示させる
・編集してから送信する
という2段階になる。そして、
・上記の送信をされた時点で、これは編集すべきものと判断できる「目印」が要る
・その目印が送られてきた場合は、編集として処理をする(それ以外は新規投稿として処理する)
事が必要。
順序だてて進めていこう。
ミッション要素の分解:
新しいフォーム作成 + 条件分岐 + テキストファイルの配列への読み込み + ループ処理 + 文字列の分割・取り出し + フォーム内でのプログラム実行 + フラグの考え方
【「入力フォーム」「削除フォーム」と並べて「編集番号指定用フォーム」を用意・「編集対象番号」の入力と「編集」ボタンが1つある】
【POST送信で「編集対象番号」を送信。受信する際は、if文で既存の各フォームとはまた別に「編集フォーム」で処理を分岐させる】
【ファイル読み込み関数で、ファイルの中身を1行1要素として配列変数に代入する。 ファイルを開き、先ほどの配列の要素数(=行数)だけループさせる】
【ループ処理内:区切り文字「<>」で分割して、投稿番号を取得】
【同・ループ処理内:投稿番号と編集対象番号を比較。イコールの場合はその投稿の「名前」と「コメント」を取得】
【既存の投稿フォームに、上記で取得した「名前」と「コメント」の内容が既に入っている状態で表示させる】
ここまで出来た状態で、プログラムを動かすと…
【既存の投稿フォーム内に「いま送信された場合は新規投稿か、編集か(新規登録モード/編集モード)」を判断する情報を追加する】
投稿フォームが「新規投稿」と「編集」を兼ねているため「新規投稿か、編集か」を判断できるようにする必要がある。
作成の過程としてフォーム内に新しい項目(テキストボックス※)を用意して、そこに編集したい投稿番号が表示される状態にしておこう
(※これは最終的に利用者から見えないようにします)。
【編集内容が問題ない場合:投稿番号と編集対象番号を比較して、等しい場合は、ファイルに書き込む内容を送信内容に差し替える】
このフォ―ムから送信があった場合、
・上記テキストボックス内が空かどうか確認する:
・空でないときは、テキストファイルの中身を取り出し、各行の投稿番号を比較。
・一致した時のみ、編集のフォームから送信された値と差し替える。
・空のときは、通常の新規投稿として扱われるようにする。
【上記でフォームに追加した情報が、ブラウザから見えてしまう場合は、type属性をhiddenに変更して見えなくする】
ミッションクリア条件
編集番号指定フォーム(編集対象番号入力欄と編集ボタン)が追加されていること

指定した編集番号の行がテキストファイル、ブラウザ表示、共に最新に更新されること

指定した編集番号が存在しない時は新規作投稿と同じ動きをすること ※このときの投稿番号は一番大きい数字にするのが一般的

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>mission_3-3</title> 6</head> 7 8<body> 9 <h3>削除機能付きWEB掲示板</h3> 10 11 <!--POST送信--> 12 13 <!--入力フォーム--> 14 <form action="" method="post"> 15 お名前 :<input type="str" name="name" placeholder="お名前"><br> 16 コメント:<input type="str" name="comment" placeholder="コメント"><br> 17 <input type="submit" name="submit" value="送信"><br> 18 </form> 19 20 <!--削除フォーム--> 21 <form action="" method="post"> 22 削除対象番号:<input type="number" name="delete_num" placeholder="数字を入力してください"><br> 23 <input type="submit" name="delete" value="削除"><br> 24 </form> 25 26<!--編集フォーム--> 27 <form action="" method="post"> 28 削除対象番号:<input type="number" name="edit_num" placeholder="数字を入力してください"><br> 29 <input type="submit" name="edit" value="編集"><br> 30 </form> 31 32 <?php 33 34 $name = ""; // null 35 $comment = ""; 36 $num = 1; // 初期値 37 $delete_num = null; // == 0 38 $filename="practice.txt"; 39 $edit_num = null; // == 0 40 41 if(isset($_POST["submit"]) === true) { #送信ボタンがクリックされたら ----- 42 43 # POST受信 44 $name = $_POST["name"]; 45 $comment = $_POST["comment"]; 46 $date = date("Y-m-d H:i:s"); 47 if(file_exists($filename)) { # ファイルが存在したら 48 $lines = file($filename); 49 $end_line = $lines[count(file($filename))-1]; //投稿番号取得 50 if(filesize($filename)!=0){ 51 $num = (int)substr($end_line, 0, 1)+1; 52 } else { 53 $num = count(file($filename))+1; 54 } 55 } 56 $submission = $num."<>".$name."<>".$comment."<>".$date; // 文字列の連結 57 58 # 入力データのファイル追記 59 $fp = fopen($filename,"a"); 60 fwrite($fp, $submission.PHP_EOL); 61 fclose($fp); 62 63 if(file_exists($filename)) { 64 $lines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // ファイルの中身を配列に格納 65 foreach($lines as $line) { 66 $exploded_values = explode("<>", $line); // 文字列を "<>" 毎に分割 67 foreach($exploded_values as $exploded_value) { 68 echo $exploded_value."<br>"; // 分割した文字列毎に改行しながら表示 69 } 70 } 71 } 72 } elseif(isset($_POST["delete"]) === true) { #削除ボタンがクリックされたら ----- 73 74 # POST受信 75 $delete_num = $_POST["delete_num"]; 76 $delete_num = $delete_num -1; 77 78 if(file_exists($filename)) { # ファイルが存在したら 79 $lines = file($filename); // ファイルの中身を配列に格納 80 # 入力データのファイルからの削除 81 $fp = fopen($filename,"w"); 82 foreach($lines as $line) { 83 if(substr($line, 0, 1)!=$delete_num+1) { 84 fwrite($fp, $line); 85 } 86 } 87 fclose($fp); 88 } 89 90 if(file_exists($filename)) { 91 $lines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // ファイルの中身を配列に格納 92 foreach($lines as $line) { 93 $exploded_values = explode("<>", $line); // 文字列を "<>" 毎に分割 94 foreach($exploded_values as $exploded_value) { 95 echo $exploded_value."<br>"; // 分割した文字列毎に改行しながら表示 96 } 97 } 98 } 99 } elseif(isset($_POST["delete"]) === true) { #編集ボタンがクリックされたら ----- 100 101 # POST受信 102 $delete_num = $_POST["delete_num"]; 103 $delete_num = $delete_num -1; 104 105 if(file_exists($filename)) { # ファイルが存在したら 106 $lines = file($filename); // ファイルの中身を配列に格納 107 # 入力データのファイルからの編集 108 $fp = fopen($filename,"w"); 109 foreach($lines as $line) { 110 if(substr($line, 0, 1)!=$delete_num+1) { 111 fwrite($fp, $line); 112 } 113 } 114 fclose($fp); 115 } 116 117 if(file_exists($filename)) { 118 $lines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // ファイルの中身を配列に格納 119 foreach($lines as $line) { 120 $exploded_values = explode("<>", $line); // 文字列を "<>" 毎に分割 121 foreach($exploded_values as $exploded_value) { 122 echo $exploded_value."<br>"; // 分割した文字列毎に改行しながら表示 123 } 124 ?> 125 126</body> 127</html>

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

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

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

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

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

tanat

2021/09/19 21:03

おそらくインターンシップの課題だと思いますが、課題のソースコードをインターネットに公開する事の許可は得ているのでしょうか?
tanat

2021/09/20 04:41

そうなんですよね。 インターンシップの課題の場合は雇用契約や守秘義務違反になっているケースが結構あるんじゃないかと思っています。
Moyashiwa

2021/09/20 06:14

特にそのようなことは言われてないので問題はないかと解釈してます
m.ts10806

2021/09/20 07:33

「言われてないから大丈夫」というのは結構危険です。 「出題者以外、例えばインターネット掲示板で質問して良い」と命題にない限りは。 それに課題なら通常は出題者以外に質問するものではなく、質問するのも仕様くらいでしょうね。
guest

回答1

0

ベストアンサー

「全く分からないのでコードください」だと作業依頼になってしまうので、考え方のみ記載します。

まず
elseif(isset($_POST["delete"]) === true)ではなく
elseif(isset($_POST["edit"]) === true) かと思います。

その上で $_POST["edit_num"] を元にして、編集対象のデータを取得、表示するところから始めるのが良いかと思います。

投稿2021/09/20 04:31

Eggpan

総合スコア3205

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

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

Moyashiwa

2021/09/20 11:11

回答ありがとうございます。 何をするのかがわかったので作業を進めていきたいと思います。 編集データ取得・表示・書き換えを順番筒記入していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問