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

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

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

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

Q&A

解決済

1回答

14912閲覧

PHP:簡易掲示板の編集機能

yu_moto

総合スコア7

PHP

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

0グッド

0クリップ

投稿2015/11/26 09:10

編集2015/11/26 18:59

PHPで簡易掲示板を作っております。
下記コードで編集機能を実装しようとしています。
「各投稿番号とPOST送信されてきた編集番号を比較し、等しい場合、配列値を取得する」
ことはできたと思うのですが、
「入力フォームに取得した配列値を入力済み状態で表示する」
ことができません。どのように書き直したらいいか、回答お願いいたします。

補足:
編集するボタンを押すと、その指定した配列の名前とコメントの値を表示させたいです。
例えば、投稿番号が1、名前がabcd、コメントがhogehogeという投稿がもともとあるとします。その状態で編集対象番号に1を入力し、送信すると、フォームの名前のところにabcd、コメントのところにhogehogeが出力されるといった処理です。

PHP

1<!DOCTYPE html> 2<html> 3 4<head> 5<meta charset="UTF-8"> 6</head> 7 8<body> 9 10 <form method="POST" action="<?php echo($_SERVER['PHP_SELF']) ?>"> 11 <label for="name">名前:</label> 12 <input type="text" name="name" value="<?php echo $simEdit[1]; ?>"><br><br> 13 14 <label for="comment">コメント:</label> 15 <textarea name="comment" cols="30" rows="5" value="<?php echo $simEdit[2]; ?>"></textarea><br> 16 <input type="submit" value="投稿する"> 17 </form> 18 19 <br> 20 21 <form method="POST" action="<?php echo($_SERVER['PHP_SELF']) ?>"> 22 <label for="delete">削除対象番号</label><br> 23 <input type="text" name="delete"><br> 24 <input type="submit" value="削除する"> 25 </form> 26 27 <br> 28 29 <form method="POST" action="<?php echo($_SERVER['PHP_SELF']) ?>"> 30 <label for="edit">編集対象番号</label><br> 31 <input type="text" name="edit"><br> 32 <input type="submit" value="編集する"> 33 </form> 34 35 36 37 <?php 38 39 $name = $_POST['name']; 40 $name = htmlspecialchars($name); 41 42 $comment = $_POST['comment']; 43 $comment = htmlspecialchars($comment); 44 45 $delete = $_POST['delete']; 46 $delete = htmlspecialchars($delete); 47 48 $edit = $_POST['edit']; 49 $edit = htmlspecialchars($edit); 50 51 $time = date("Y/m/d H:i:s"); 52 53 $line = file("kb.txt"); 54 $num = count($line); 55 56 $write = "{". $num . "}<>{" . $name . "}<>{" . $comment . "}<>{" . $time . "}"; 57 58 if (!empty($name) && !empty($comment)) { 59 $fp = fopen ("./kb.txt","a"); 60 fputs ($fp, $write."\n"); 61 fclose ($fp); 62 } 63 64 if (!empty($delete)) { 65 $delCon = file("kb.txt"); 66 for ($j = 0; $j < count($delCon) ; $j++) { 67 $delData = explode("<>", $delCon[$j]); 68 if ($delData[0] == "{".$delete."}") { 69 array_splice($delCon, $j, 1); 70 file_put_contents("./kb.txt", $delCon); 71 } 72 } 73 } 74 75 if (!empty($edit)) { 76 $ediCon = file("kb.txt"); 77 for ($k = 0; $k < count($ediCon) ; $k++) { 78 $ediData = explode("<>", $ediCon[$k]); 79 if ($ediData[0] == "{".$edit."}") { 80 $simEdit = explode("}<>{", $ediCon[$k]); 81 } 82 } 83 } 84 85 $contents = file('kb.txt'); 86 foreach($contents as $line){ 87 $data = explode("<>", $line); 88 for($i = 0 ; $i < count($data); $i++){ 89 echo $data[$i]."<br>"; 90 91 } 92 } 93 94 ?> 95 96 </body> 97 </html> 98

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

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

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

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

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

guest

回答1

0

ベストアンサー

--再編集--
こういうことでしょうかね。
編集したのは編集ブロックのとこだけ。

該当する配列のそれぞれの値に対して
1.trim()を使って前後の余計な文字を除去する。timestampだけ後ろに改行コード(\n)がひっついてるので。
2.mb_substr()を使って{}を除去した文字列を抜き出す。(1文字目から-1文字まで抜き出し)
3.配列に突っ込む。

PHP

1<?php 2 3 $name = $_POST['name']; 4 $name = htmlspecialchars($name); 5 6 $comment = $_POST['comment']; 7 $comment = htmlspecialchars($comment); 8 9 $delete = $_POST['delete']; 10 $delete = htmlspecialchars($delete); 11 12 $edit = $_POST['edit']; 13 $edit = htmlspecialchars($edit); 14 15 $time = date("Y/m/d H:i:s"); 16 17 $line = file("kb.txt"); 18 $num = count($line); 19 20 $write = "{". $num . "}<>{" . $name . "}<>{" . $comment . "}<>{" . $time . "}"; 21 22 if (!empty($name) && !empty($comment)) { 23 $fp = fopen ("./kb.txt","a"); 24 fputs ($fp, $write."\n"); 25 fclose ($fp); 26 } 27 28 if (!empty($delete)) { 29 $delCon = file("kb.txt"); 30 for ($j = 0; $j < count($delCon) ; $j++) { 31 $delData = explode("<>", $delCon[$j]); 32 if ($delData[0] == "{".$delete."}") { 33 array_splice($delCon, $j, 1); 34 file_put_contents("./kb.txt", $delCon); 35 } 36 } 37 } 38 39 // $editが'0'のときif文通らない 40 if (!empty($edit)) { 41 $ediCon = file("kb.txt"); 42 for ($k = 0; $k < count($ediCon) ; $k++) { 43 $ediData = explode("<>", $ediCon[$k]); 44 if ($ediData[0] == "{".$edit."}") { 45 //$simEdit = explode("}<>{", $ediCon[$k]); 46 for($h = 0; $h < count($ediData); $h++){ 47 $simEdit[$h] = mb_substr(trim($ediData[$h]), 1, -1); 48 } 49 } 50 } 51 } 52 53 54?> 55<!DOCTYPE html> 56<html> 57 58<head> 59<meta charset="UTF-8"> 60</head> 61 62<body> 63 <form method="POST" action="<?php echo($_SERVER['PHP_SELF']) ?>"> 64 <label for="name">名前:</label> 65 <input type="text" name="name" value="<?php echo $simEdit[1]; ?>"><br><br> 66 67 <label for="comment">コメント:</label> 68 <textarea name="comment" cols="30" rows="5"><?php echo $simEdit[2]; ?></textarea><br> 69 <input type="submit" value="投稿する"> 70 </form> 71 72 <br> 73 74 <form method="POST" action="<?php echo($_SERVER['PHP_SELF']) ?>"> 75 <label for="delete">削除対象番号</label><br> 76 <input type="text" name="delete"><br> 77 <input type="submit" value="削除する"> 78 </form> 79 80 <br> 81 82 <form method="POST" action="<?php echo($_SERVER['PHP_SELF']) ?>"> 83 <label for="edit">編集対象番号</label><br> 84 <input type="text" name="edit"><br> 85 <input type="submit" value="編集する"> 86 </form> 87 88<?php 89 90 $contents = file('kb.txt'); 91 foreach($contents as $line){ 92 $data = explode("<>", $line); 93 for($i = 0 ; $i < count($data); $i++){ 94 echo $data[$i]."<br>"; 95 96 } 97 } 98 99?> 100</body> 101</html>

投稿2015/11/26 14:15

編集2015/11/27 00:21
nage

総合スコア144

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

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

yu_moto

2015/11/26 18:47

説明足らずで申し訳ありません。 編集するボタンを押すと、その指定した番号の配列の名前とコメントの値を表示させたいのです。 例えば、投稿番号が1、名前がabcd、コメントがhogehogeという投稿がもともとあって、編集対象番号に1を入力すると、フォームの名前のところにabcd、コメントのところにhogehogeが出力されるといった処理です。
yu_moto

2015/11/26 18:55

訂正です。「編集対象番号に1を入力すると」→「編集対象番号に1を入力し、送信すると」です。
nage

2015/11/27 00:21

親切にどうも 再編集しました
yu_moto

2015/11/27 17:33

コードありがとうございました。とても助かりました。 mb_substr()という表現は全く知らなかったので、勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問