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

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

ただいまの
回答率

91.05%

  • PHP

    17223questions

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

簡易掲示板の編集機能

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 178

ak_spy_

score 2

以下のコードで簡易掲示板に名前・コメント入力・送信後に削除・編集を試みています。削除までは問題なく機能しており、編集内容を入力する用のフォームにて該当の番号を入力すると元、の内容が編集用のフォーム内に表示されるようになっています。
ですが、いざ内容を変えようと新たな名前・コメントを入力してもその内容が反映されない、といった状態です。
php下部の「//以下編集処理」の下からがおかしいためだと思うのですが、何をどうすれば良いのかがわからない状態です。
ご回答頂けると幸いです。また、加えまして、編集依頼を下さった方々、更新が遅くなり大変申し訳ございません。

<html>
<head> 
<meta charset="UTF-8"> 
<title>Tell me about yourself</title> 
</head> 
<body> 

<h1>name and comment please</h1> 
<form action="mission_2-5.php" method="post">
     名前:<br/>
    <input type="text" name="namae" size="30"><br/>

    コメント:<br/>
    <textarea name="comment" colos="30" rows="5"></textarea><br/>
    <input type="submit" value="登録する"/>
    <br/>
    </form>

<form action="mission_2-5.php" method="post"> 
    削除対象番号:<br/> 
    <input type="text" name="delection" size="30"><br/> 
    <input type="submit" value="削除"/> 
    </form>



<?php 
//2-2.2-3 

$comment=null; 
$namae=null; 


if (!isset($comment) || !isset($namae)){ 
    $comment=$_POST['comment']; 
    $namae=$_POST['namae'];  
} 


$time=date("Y/m/d H:i:s",time());//時間 


$filename="mission_2-5.txt"; 

$fp=fopen($filename,'a+'); 

$file=file($filename);//file関数→ファイルの内容全てを取得し配列に格納する。$filenameを読み込み$fileにパス 

$count=count($file);//ファイルの行数カウント&$countに代入 

$number=explode("<>",$file[$count-1]); 

$next=$number[0]+1;// 

$text=$next."<>".$namae."<>".$comment."<>".$time;//最後の番号+1が次の番号になる 


if(isset($_POST['namae']) && isset($_POST['comment'])){ 
 fwrite($fp,"$text\n"); 
} 

fclose($fp); 



//2-4 
if(isset($_POST['delection'])){ 

    $dell=$_POST['delection']; 
}


if(isset($_POST['delection'])){ 
    $fp=fopen($filename,'w+');
    for($k=0; $k<count($file); ++$k){ //count(要素数えたい配列 , モード),$fileの要素が$kより多いとき→$kに1加える
    $deldata=explode("<>",$file[$k]); 

        if($deldata[0]!=$dell){ 
            fwrite($fp,"$file[$k]");
        }
    }

fclose($fp); 

}



$file = file($filename); 

foreach($file as $text2){ //配列数の分繰り返し処理をする, 配列変数 as 配列変数から取り出した値を格納する変数
    $text_array = explode("<>",$text2); 
     echo $text_array[0].$text_array[1].$text_array[2].$text_array[3]."<br>"; 
} 




//2-5 

//error_reporting(E_ALL); 
//ini_set('display_errors', 'On'); 

$edit_num = $_POST["hensyunumber"];
$user = "";
$text = "";
$time=date("Y/m/d H:i:s",time());


//編集用フォームに元の内容を表示させる処理
if (isset($_POST['hensyu'])){//編集ボタンが押されたとき(trueのときの処理) 

    $fp=fopen($filename,'a+');

    $edit_num = $_POST['hensyunumber'];

    $filedata =file( "mission_2-5.txt");//ファイルを一行ずつの配列として読み込み、変数への配列化

    for($k=0; $k<count($filedata); ++$k){ //for…"ある条件が成り立っている間"
            /*count(要素数えたい配列 , モード),$fileの要素が$iより多いとき→$iに1加える
            一行目の行数・名前・コメントだけでなく$data[0]が行数、$data[1]が名前…を必ず指定するようにループ処理をする*/
        $data = explode("<>", "$filedata[$k]");
            //explode関数:文字列を指定した区切り文字によって分割し、配列に格納。第1引数で区切り文字を、第2引数で対象となる文字列を指定
        $edit_num = $data[0];

        //取り出し用フォームの分岐
        if($data[0] == $edit_num){//編集番号が$edit_numと一致したら 

            $user = $data[1];//編集用フォームに元の内容を表示

            $text = $data[2];//編集用フォームに元の内容を表示

            $hyouzi = $user.$data;

          }else{ //else=falseのときの処理。一致しない時はもとのデータをそのまま書き込み(if~else文) 
              fputs($fp, $filedata);//元の一行をファイルに追記 
        } //if~else終わり
    } //for終わり

fclose($fp); 
}//if終わり


//以下編集処理
if (isset($_POST['edit_num'])){//edit_numフォームに入力があるとき

    $file_edit = file("mission_2-5.txt");    //テキストファイルのデータを一行ずつ配列化・保存することにより編集が可能になる

    $fp = fopen("mission_2-5.txt", 'w+');//内容を消して開き、ファイルポインタ取得

    $edit_num = $_POST['hensyunumber'];

    for($l = 0;$l <count($file_edit); ++$l){

        $editdata = explode("<>",$file_edit[$l]);

        if($editdata[0] == $edit_num){//入力した編集番号と一致するとき

            $user = $editdata[1];

            $text = $editdata[2];

            $text = $edit_num[0]."<>".$user."<>".$text>"<>".$time;

            fputs($fp.$text);

        }//if終わり
    }//for終わり            
}//if終わり






?>


<form action="mission_2-5.php" method="post"> 

    編集対象番号:<br/> 
    <input type="text" name="hensyunumber" size"5" value=""/> 
    <input type="submit" value="編集" name="hensyu"/> 
    </form> 

<form action="mission_2-5.php" method="post"> 
    <input name = "edit_num" type = "hidden" value = "<?php echo $edit_num;?>"/><br> 
    <input name = "user" type = "text" value = "<?php echo $user;?>"/> 
    <input name = "text" type = "text" value = "<?php echo $text;?>"/> 
    <button type = "submit"> 送信</button> 
    </form> 


</body> 
</html>


```

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • asahina1979

    2017/12/21 12:10

    <input name> と $_POST 一致するものがないので正しいものをあげてください

    キャンセル

  • kei344

    2017/12/24 18:29

    質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。

    キャンセル

  • ak_spy_

    2017/12/24 21:00

    ご指摘ありがとうございます。何分こちらの利用が初めてでして…見づらいものを提示してしまい、申し訳ございません。

    キャンセル

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

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

  • ただいまの回答率 91.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    PHP:パスワードが一致したときのみ、投稿の削除をする簡易掲示板

    パスワードが一致したときの条件式をプログラムに書いても反応しません。/ファイル消去/ブロックの6行目あたりにあるif文のandの右側の条件式です。この式で使われている$delDat

  • 解決済

    php 簡易掲示板の編集

    実現したいこと 簡易掲示板について。 テキストと送信ボタンがある掲示版を扱います。 フォームを送信すると、別に用意したテキストファイルに内容が保存され、そこから読みだされた内

  • 解決済

    動的に追加していく画像選択フォームのプレビュー表示

    追加ボタンを押すと動的に、画像選択フォームを追加していき、画像のプレビューを表示するフォームを作っています。ただ、フォームを新しく動的に追加していくと、当然画像も追加されてプレビュ

  • 受付中

    postのnameを複数同じの時の値取得方法

    前提・実現したいこと php初心者です。 郵便番号、住所検索を作成しています。 ここに質問したいことを詳細に書いてください form(真ん中)で、住所検索で取得した内容を、 別

  • 解決済

    PHP 掲示板 編集機能について

    プログラミング初心者です。 今はphpについて勉強しています。 そして、PHPで簡易掲示板を作成しています。 <入力フォーム> <form action="" meth

  • 受付中

    phpでの掲示板編集機能について

    現在phpを用いた掲示板を作成しているのですが、指定した番号のコメントを編集する機能がどうしても実装できません。 改善点を教えて頂けると嬉しいです。 <html> <body>

  • 解決済

    PHPのアンケートに於ける番号表記

    PHPでアンケートフォームを作成しているのですが、アンケートの投稿番号の表記がうまくいきません。 1行ごとに「{番号}<>{名前}<>{コメント}<>{投稿された時間}」と言う形で

  • 受付中

    セッションへ保存するための処理について

    [数量入力ページ]にて商品の数量を入力し、[結果ページ]へ遷移後、数量追加ボタンにて[数量入力ページ]へ戻り、 再度、数量追加を行える仕様にしたいと考えております。 また、数量

同じタグがついた質問を見る

  • PHP

    17223questions

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