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

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

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

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

14356閲覧

簡易掲示板に編集機能をつけたい

hkr.0921

総合スコア2

PHP

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/09/04 13:31

編集2020/09/04 15:07

前提・実現したいこと

編集ボタンを押して編集元のテキストを、投稿フォームに表示させることはできたのですが、編集して送信すると新規投稿として表示されてしまいます。
教えていただけたら幸いです。初学者ですが、よろしくお願いします。

該当のソースコード

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>簡易掲示板</title> 6</head> 7<body> 8 <?php 9 /*ファイルの指定*/ 10 $filename = "mission_3-1.txt"; 11 12 /*POST送信があった時*/ 13 if (isset($_POST['name'])&&($_POST['comment'])&&!($_POST['edit'])){ 14 /*変数に代入*/ 15 $name = $_POST["name"]; 16 $comment = $_POST["comment"]; 17 /*日付データ取得*/ 18 $date = date("Y/m/d H:i:s"); 19 /*ファイルの存在がある場合は投稿番号+1、なかったら1を指定*/ 20 $lines=file($filename); 21 foreach($lines as $line){ 22 $data=explode("<>",$line); 23 $num = 0; 24 if($num<$data[0]){ 25 $num=$data[0]; 26 } 27 } 28 $num++; 29 $fp2=fopen($filename,'a'); 30 fwrite( $fp2 ,"$num<>$name<>$comment<>$date"."\n"); 31 fclose($fp2); 32 } 33 34 /*POST送信があったとき*/ 35 if(isset($_POST["delete"])){ 36 /*変数に代入*/ 37 $delete = $_POST["deleteno"]; 38 /*ファイル全体を読み込んで配列に格納する*/ 39 $delCon = file("mission_3-1.txt"); 40 for ($j = 0; $j < count($delCon) ; $j++){ 41 $delData = explode("<>", $delCon[$j]); 42 43 if ($delData[0] == $delete) { 44 array_splice($delCon, $j, 1); 45 file_put_contents($filename , $delCon); 46 }} 47 } 48 49 /*フォームに元の内容を表示させる処理*/ 50 if(isset($_POST["edit"])){ 51 $number = $_POST["number"]; 52 $ediCon = file("mission_3-1.txt"); 53 for($i = 0; $i < count($ediCon); $i++){ 54 $ediData = explode("<>" , $ediCon[$i]); 55 if ($ediData[0] == $number ){//投稿番号が編集対象番号の時、名前とコメントを定義 56 $newname = $ediData[1];//編集用フォームに元の内容を表示 57 $newcoment = $ediData[2];//編集用フォームに元の内容を表示 58 var_dump($ediData); 59 } 60 } 61 }//if終わり 62 63 64 if(isset($_POST['name'])&&($_POST['comment'])&&($_POST['edit_n'])){ 65 $lines=file("mission_3-1.txt"); 66 $fp=fopen($filename,'w'); 67 $edit=$_POST['edit_n']; 68 foreach($lines as $line){ 69 $ediData=explode("<>",$line); 70 if($ediData[0]==$edit){//投稿番号と編集番号が一致したとき上書き 71 fwrite($fp,"$edit<>$name<>$comment<>$date"."\n"); 72 }else{ 73 fwrite($fp,$line); 74 } 75 fclose($fp); 76 } 77 } 78 79 ?> 80 81 <form action="m3-1.php" method="post"> 82 <!--名前の入力フォーム--> 83 <input type="text" name="name" placeholder="名前" value="<?php echo $newname ; ?>"> 84 <!--コメントの入力フォーム--> 85 <input type="text" name="comment" placeholder="コメント" value="<?php echo $newcoment; ?>"> 86 <input type="submit" name="submit"> 87 <!--消去の入力フォーム--> 88 <input type="text" name="deleteno" value=""> 89 <input type="submit" name="delete" value="削除"> 90 </form> 91 <form method="POST" action="m3-1.php"> 92 <!--編集番号指定用フォーム--> 93 <input type="text" name="number" placeholder="編集対象番号"> 94 <input type="submit" name="edit" value="編集"> 95 <input type="hidden" name="edit_n" value="<?php echo $number;?>"> 96 </form> 97 98 【 投稿一覧 】<br> 99 <?php 100 /*ファイル全体を読み込んで配列に格納する*/ 101 $ret_array = file( $filename); 102 if(file_exists($filename)){ 103 foreach( $ret_array as $value ) { 104 $result = explode("<>", $value); 105 echo "$result[0] $result[1] $result[2] $result[3] ". "<br> \n" ; 106 } 107 } 108 109 ?> 110</body> 111</html>

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

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

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

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

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

Y.H.

2020/09/04 13:53

どこかが出している課題などだと思うのですが、 この課題って何処が出している物か教えて頂けるのであれば有り難いです。
m.ts10806

2020/09/04 14:20

PHP 簡易掲示板 mission でGoogle検索するとteratail以外も引っ掛かりますね。 いずれにしてもテキストにデータを保存する形式のプログラムを覚えてもほぼ使えないので、そのテキストは変えた方が良いです(書籍や講座の名前は知らないですが)
guest

回答1

0

ベストアンサー

if (isset($_POST['name'])&&($_POST['comment'])&&!($_POST['edit'])){
の下り、isset()で評価しているのは$_POST['name']ひとつになっていることに気づいていますか?

かっこの対応をわかりやすく表示してくれる、
プログラミング向きのエディターやIDEを整備して取り組むことをおすすめします。

投稿2020/09/05 01:57

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hkr.0921

2020/09/05 13:16

まったく気づいていませんでした、、 if文で新規投稿のときと編集のときで分けたらうまく実装出来ました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問