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

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

ただいまの
回答率

88.61%

PHP 掲示板 編集機能 フォームにPOST送信できない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,005

mofmofmof

score 15

PHPを使ってテキストファイルを利用した掲示板を作成中です。
編集機能を実装したのですが、編集番号を送信したらその番号の投稿が元のフォームに記入されるようにしたいのに、うんともすんとも言いません。
色々な質問を見てみたのですが自分じゃわかりませんでした。

何か間違っているようでしたら教えていただきたいです。

追記
投稿番号<>名前<>コメント<>送信日時
という風にテキストファイルに保存しているのですが、
削除機能を実装した際に、投稿番号にずれが生じてしまいます。
番号の重複が起こらないようにしたいです。
どのようにしたらいいかアドバイスをお願いしたいです。
>>解決しました編集済み

<html>
<head>
<title>keijiban.php</title>
</head>
<body>

<?php
$filename="keijiban.text";
$name=$_POST['name'];
$comment=$_POST['comment'];
$postedat=date("Y/m/d H:i:s");


//新規追加
if(isset($_POST['name'])&&($_POST['comment'])&&!($_POST['edit'])){
    $lines=file($filename);
    foreach($lines as $line){
        $data=explode("<>",$line);
        $num=0;
        if($num<$data[0]){
           $num=$data[0];
           }
           }
           $num++;
           $fp=fopen($filename,'a');
           fwrite($fp,$num."<>".$name."<>".$comment."<>".$postedat."<br>\n");
           fclose($fp);
}

//削除
if (isset($_POST['delete'])){
    $delete=$_POST['delete'];
    $lines=file($filename);
    $fp=fopen($filename,'w');
  foreach($lines as $line){
     $data=explode("<>",$line);
     if($data[0]!=$delete){
     fwrite($fp,$line);
        }
        }
        fclose($fp);
        }       

//編集
$edit_num=$_POST['edit_num'];
$lines=file($filename);
foreach($lines as $line){
    $data=explode('<>', $line[0]);
    if($edit_num==$editdata[0]){
        $editdata0=$editdata[0];
        $editdata1=$editdata[1];
        $editdata2=$editdata[2];
        $editdata3=$editdata[3];
        }
}


if(isset($_POST['name'])&&($_POST['comment'])&&($_POST['edit'])){
    $lines=file($filename);
    $fp=fopen($filename,'w');
    $edit=$_POST['edit'];
    foreach($lines as $line){
        $data=explode("<>",$line);
        if($data[0]==$edit){//投稿番号と編集番号が一致したとき上書き
        fwrite($fp,$edit."<>".$name."<>".$comment."<>".$postedat."<br>\n");
        }else{
            fwrite($fp,$line);
            }
            fclose($fp); 
            }
            }
  //表示
$lines=file($filename);
foreach($lines as $line){
    $data=explode("<>",$line);
    echo $data[0].$data[1].$data[2].$data[3]."\n";
}
?>
<form action="keijiban.php" method="post">
<br><br>
投稿:<br>
 <input type="text" name="name" placeholder="名前" value="<?php echo $editdata1;?>"><br>
 <input type="text" name="comment" placeholder="コメント" value="<?php echo $editdata2;?>"><br>
 <input type="submit" value="投稿"><br><br>
削除:<br>
 <input type="text" name="delete" placeholder="削除対象番号"><br>
 <input type="submit" value="削除"><br><br>
編集:<br>
 <input type="text"  name="edit_num" placeholder="編集対象番号"><br>
 <input type="submit" value="編集">
 <input type="hidden" name="edit" value="<?php echo $edit_num;?>">
</form>

</body>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+2

PHPのソースコードは上から順番に処理されますので、
<?php echo $editdata1;?>
の時点ではまだ変数に値がセットされていません。
PHPの処理を<html>より上に記述すれば大丈夫です。

追記の質問ですが、HTML上はフォームが1つのため、
どのsbumitを操作しても全データが飛んできます。
submitにnameを付けて条件分岐すれば大丈夫だと思います。

また、今回の質問とは無関係ですが、セキュリティ対策が
為されていないので公開する際はご注意ください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/19 11:44

    別の回答にするほどのことじゃないので、よそさんの回答に便宜上ぶら下げますが、
    投稿番号`$num`をデータファイル上のデータ件数+1で求めているから重複します。
    データを全部チェックして、使用済み投稿番号の最大値を求めてから+1すれば、
    ひとまず重複は避けられます。

    キャンセル

  • 2018/11/19 18:42

    >m6uさん
    投稿番号成功しました!ありがとうございます!!

    キャンセル

  • 2018/11/19 18:44

    >tabuuさん
    順番入れ替えてみたのですが、フォームの中に入力されませんでした…
    他に何かありますかね…?

    キャンセル

  • 2018/11/20 03:20

    すみません、コードミスでした(-_-;)
    無事にできました!
    ありがとうございます

    キャンセル

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

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

関連した質問

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