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

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

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

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

Q&A

解決済

1回答

3327閲覧

php 簡易掲示板 編集機能について

big_sky

総合スコア23

PHP

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

0グッド

0クリップ

投稿2019/05/15 07:06

前提・実現したいこと

1<>高瀬<>こんにちわ<>2019-05-11<>
2<>山田<>こんにちわ<>2019-05-11<>
3<>田中<>こんにちわ<>2019-05-11<>
test.txtというファイルにこの三行があり、簡易掲示板での編集機能の実装が上手く行かず困っています。
a.入力フォームとは別に、編集番号指定用フォームを用意する。項目は編集対象番号。
b.POST送信にて編集番号を送信する。その際if文で編集フォームから値が送信された場合のみの処理に分岐させておく
c.fileで配列化して読み込み、ループさせる
d.explodeを使って投稿番号を取得する
e.各投稿番号とPOSTで送信された編集番号を比較し、イコールの時の配列値を取得する
f.元々あった普通の入力フォームに、取得した配列値を入力済み状態で表示させる
g.その値をPOSTで送信して編集を行うが、編集かどうかわかるように<input type="hidden">タグを用いて、編集モードかどうかを判別する
h.編集内容の値が送信されたら、同じくc~dの処理を行い、eと同じように番号の比較を行って、イコールの時に配列値を取得するのではなく送信された値と差し替える
i.差し替えた配列をテキストに上書き保存する

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

hの配列値を取得するのではなく送信された値と差し替える、送信された値と差し替えるというところでつまずいています。
プログラミングを初めてまだ1ヶ月ほどで、hの文章の意味もイメージできていません。

該当のソースコード

<?php if(isset($_POST["edit"])) { $filename = "test.txt"; $file = file($filename); $edit = $_POST["number"]; for($i = 0; $i < count($file); $i++) { $edit_number = explode("<>",$file[$i]); if($edit_number[0] == $edit) { $data = $edit_number[0]; } } } if(isset($_POST["normal"])) { if($_POST["edit_post"]) { $file = file("test.txt"); $edit = $_POST["edit_post"]; for($j = 0; $j < count($file); $j++) { $edit_number = explode("<>",$file[$j]); if($edit_number[0] == $edit) { } } } } ?> <!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>課題</title> </head> <body> <form action="" method="POST"> <input type="hidden" name="edit_post" value="<?php echo $data; ?>"> <input type="text" name="name" value=""> <textarea name="comment" rows="4" cols="40"></textarea> <input type="submit" name="normal" value="送信"> </form> <form action="" method="POST"> 編集したい番号を入力<input type="text" name="number" value=""> <input type="submit" name="edit" value="送信"> </form> </body> </html>
ソースコード

試したこと

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

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

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

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

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

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

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

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

m.ts10806

2019/05/15 07:11 編集

コードはマークダウンの機能を利用してご提示ください。 また同様の「簡易掲示板」に関する投稿はteratailに多く投稿されています。 そちらを一通り確認されては如何でしょうか。起きている問題、やりたいことのヒントになる質問・その回答は転がっていると思います。(そもそも「課題」ですし、非推奨になりえる質問です)
guest

回答1

0

ベストアンサー

課題って書いてるので課題なのでしょうが、とりあえずコメント付きでそれっぽく動くようなものを記載しておきます

php

1<?php 2 // ファイルからデータ読み取り 3 $filename = "test.txt"; 4 // オプションのパラメータの意味は 5 // https://www.php.net/manual/ja/function.file.php 6 $lines = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 7 8 // 編集用データ格納変数 9 $editNumber = ''; 10 $editName = ''; 11 $editComment = ''; 12 13 // 送信内容によって処理が分かれる 14 if(isset($_POST["edit"])) { 15 // ここは編集番号よりデータを求める所 16 17 // データ件数分処理 18 foreach($lines as $row) { 19 // <>で分割して配列に 20 $bbsRowData = explode("<>", $row); 21 // 編集対象番号のときはデータをセットする 22 if($bbsRowData[0] == $_POST["number"]) { 23 $editNumber = $bbsRowData[0]; 24 $editName = $bbsRowData[1]; 25 $editComment = $bbsRowData[2]; 26 // 即抜ける 27 break; 28 } 29 } 30 } 31 else if(isset($_POST["normal"])) { 32 // 書き込みか上書きかをするところ 33 34 // 書き込むデータを作る 35 $writeData = ($_POST['edit_post'] ?: count($lines) + 1) . "<>" . $_POST['name'] . "<>" . $_POST['comment']; 36 37 // 編集番号があればデータループして場所を特定して上書きする 38 if($_POST["edit_post"]) { 39 // データ件数分処理(&で参照にしてる) 40 foreach($lines as &$row) { 41 // <>で分割して配列に 42 $bbsRowData = explode("<>", $row); 43 // 編集番号のところだったら上書き 44 if($bbsRowData[0] == $_POST["edit_post"]) { 45 $row = $writeData; 46 } 47 } 48 } 49 else { 50 // 新規投稿なので最後に追加 51 $lines[] = $writeData; 52 } 53 54 // ファイルに書き込む(implodeで配列を改行付き文字列へ) 55 file_put_contents($filename, implode("\n", $lines)); 56 } 57?> 58<!doctype html> 59<html lang="ja"> 60<head> 61<meta charset="UTF-8"> 62<title>課題</title> 63</head> 64<body> 65<form action="" method="POST"> 66<input type="hidden" name="edit_post" value="<?php echo $editNumber; ?>"> 67<input type="text" name="name" value="<?php echo $editName; ?>"> 68<br /> 69<textarea name="comment" rows="4" cols="40"><?php echo $editComment; ?></textarea> 70<br /> 71<input type="submit" name="normal" value="送信"> 72</form> 73<hr> 74<form action="" method="POST"> 75編集したい番号を入力<input type="text" name="number" value=""> 76<input type="submit" name="edit" value="送信"> 77</form> 78</body> 79</html>

投稿2019/05/17 08:38

rururu3

総合スコア5545

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

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

big_sky

2019/05/20 06:29

ありがとうございます。 コメント付きで分かりやす参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問