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

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

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

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

Q&A

0回答

906閲覧

php 編集機能について

a55

総合スコア0

PHP

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

0グッド

0クリップ

投稿2021/12/19 09:50

前提・実現したいこと

掲示板に「編集機能」を付加しよう。指定された番号の投稿を編集できるようにする

1、「入力フォーム」「削除フォーム」と並べて「編集番号指定用フォーム」を用意・「編集対象番号」の入力と「編集」ボタンが1つある】

2,【POST送信で「編集対象番号」を送信。受信する際は、if文で既存の各フォームとはまた別に「編集フォーム」で処理を分岐させる】

3,【ファイル読み込み関数で、ファイルの中身を1行1要素として配列変数に代入する。 ファイルを開き、先ほどの配列の要素数(=行数)だけループさせる】

4,【ループ処理内:区切り文字「<>」で分割して、投稿番号を取得】

5,【同・ループ処理内:投稿番号と編集対象番号を比較。イコールの場合はその投稿の「名前」と「コメント」を取得】

6,【既存の投稿フォームに、上記で取得した「名前」と「コメント」の内容が既に入っている状態で表示させる】

7,【既存の投稿フォーム内に「いま送信された場合は新規投稿か、編集か(新規登録モード/編集モード)」を判断する情報を追加する】
投稿フォームが「新規投稿」と「編集」を兼ねているため「新規投稿か、編集か」を判断できるようにする必要がある。
作成の過程としてフォーム内に新しい項目(テキストボックス※)を用意して、そこに編集したい投稿番号が表示される状態にしておこう
(※これは最終的に利用者から見えないようにします)。

8.【編集内容が問題ない場合:投稿番号と編集対象番号を比較して、等しい場合は、ファイルに書き込む内容を送信内容に差し替える】
このフォ―ムから送信があった場合、
・上記テキストボックス内が空かどうか確認する:
・空でないときは、テキストファイルの中身を取り出し、各行の投稿番号を比較。
・一致した時のみ、編集のフォームから送信された値と差し替える。
・空のときは、通常の新規投稿として扱われるようにする。

9,【上記でフォームに追加した情報が、ブラウザから見えてしまう場合は、type属性をhiddenに変更して見えなくする】
ミッションクリア条件
編集番号指定フォーム(編集対象番号入力欄と編集ボタン)が追加されていること

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

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

発生している問題・エラーメッセージ

この課題で、似たような質問している方のを参考に7番まではできたのですが、8番目の「投稿番号と編集対象番号を比較して、等しい場合はファイルに書き込む内容を送信内容に差し替える」というところが出来ません。

エラーメッセージ

該当のソースコード

`<!DOCTYPE html>

<html lang="ja"> <head> <meta charset="UTF-8"> <title>mission_3-4</title> </head> <body> <?php //投稿処理 $name=$_POST["name"]; $str=$_POST["str"]; $date=date("Y/m/d,H:i:s"); $filename="mission_3-4.txt"; //$fp=fopen($filename,"a"); $lines=(file($filename,FILE_IGNORE_NEW_LINES)); $lastline=$lines[count($lines)-1]; $num=explode("<>",$lastline)[0]+1; $text=$num."<>".$name."<>".$str."<>".$date.PHP_EOL; if($name=="" && $str==""){;} elseif($name==""){;} elseif($str==""){;} elseif(!empty($name) && !empty($str)) { if($_POST["edit_n"]!="") { $filename="mission_3-4.txt"; $fp2=fopen($filename,"w"); $lines=(file($filename,FILE_IGNORE_NEW_LINES)); $lastline=$lines[count($lines)-1]; $num=explode("<>",$lastline)[0]+1; //if($num==$edit_n) fwrite($fp2,$edit_n."<>".$name."<>".$str."<>".$data.PHP_EOL); fclose($fp2) ; } elseif($_POST["edit_n"]==""){ $fp=fopen($filename,"a"); fwrite($fp,$text); fclose($fp);} } //削除 $delete=$_POST["delete"]; if(!empty($_POST["delete"])){ $delcon=file($filename); for($i=0; $i<count($delcon) ; $i++) {$deldata=explode("<>",$delcon[$i]); if($deldata[0]==$delete) {array_splice($delcon,$i,1); file_put_contents($filename,implode("",$delcon)); } } } //編集フォーム 元の内容を表示させる if(isset($_POST["edit"])){ $edit=$_POST["edit"]; $edit2=file($filename); for($i=0; $i<count($edit2); $i++) {$editdata=explode("<>",$edit2[$i]); if($editdata[0]==$edit) {$newname=$editdata[1]; $newcomment=$editdata[2]; //var_dump($editdata); } } }//if終わり ;?>
<form action="mission_3-4.php" method="post"> 入力フォーム:<br> <input type="text" name="name" placeholder="名前" value="<?php if(!empty($_POST["edit"])){ echo $newname;}?>"><br> <input type="text" name="str" placeholder="コメント" value="<?php if(!empty($_POST["edit"])){ echo $newcomment;}?>"><br> <input type="submit" value="送信"> </form> <form action="mission_3-4.php" method="post"> 削除フォーム: <input type="text" name="delete" placeholder="削除対象番号"> <input type="submit" value="削除"> </form> <form action="mission_3-4.php" method="post"> 編集フォーム: <input type="text" name="edit" placeholder="編集対象番号"> <input type="submit" value="編集"> <input type="text" name="edit_n" value="<?php if(!empty($_POST["edit"])){echo $edit;}?>"> </form>
<?php if(file_exists($filename)) {$lines=file($filename,FILE_IGNORE_NEW_LINES); $line=explode("<>",$text); foreach($lines as $text){ echo str_replace("<>"," ",$text)."<br>";} ;} ;?> </body> </html>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

FKM

2021/12/20 05:14

なんか専門学校か大学あたりの課題なんでしょうか? 関数の意味もわからず鵜呑みに使っているから、すごい基本の基本を見落としているだけのような気がして なりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問