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

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

ただいまの
回答率

88.93%

php 簡易掲示板の編集機能にパスワードをつける

受付中

回答 1

投稿

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

pompompo

score 5

php 簡易掲示板 パスワードと投稿番号が一致した際に投稿を編集する機能

phpで簡易掲示板を作成しています。

1 あ あいうえお
2 い かきくけこ
3 う さしすせそ

という投稿があった際に、
編集したい投稿の投稿番号と設定したパスワードを編集フォームに入力する

新規投稿フォームに同内容の投稿が再び表示される

そのまま新規投稿フォームにて編集し、送信すると編集される

このようなシステムを作りたいです。
以下のコードを入力して実行すると、
Parse error: syntax error, unexpected ')' in /public_html/mission_3-5.php on line 76
というエラーが表示されてしまいます。
エラーの原因と解決法を教えていただきたいです。

<head>
  <meta charaset="UTF-8">
</head>
<body>

 <?php
      $filename = "mission_3-5.txt";

 //投稿機能

  //フォーム内が空でない場合に以下を実行する
  if (!empty($_POST['name']) && !empty($_POST['comment'])) {

    //入力データの受け取りを変数に代入
    $name = $_POST['name'];
    $comment = $_POST['comment'];
    $pass=$_POST['pass'];    


    //日付データを取得して変数に代入
    $postedAt = date("Y年m月d日 H:i:s");

    //編集フォームに入力がない場合は新規投稿、ある場合は編集  ここで判断
    if (empty($_POST['editNO'])) {
      // 以下、新規投稿機能
      //ファイルの存在がある場合は投稿番号+1、なかったら1を指定する
      if (file_exists($filename)) {
        $num = count(file($filename)) + 1;
      } else {
        $num = 1;
      }

      //書き込む文字列を組み合わせた変数
      $newdata = $num . "<>" . $name . "<>" . $comment . "<>" . $postedAt."<>" .$pass."<>"."\n";




      //ファイルを追記保存モードでオープンする
      $fp = fopen($filename, "a");

      //入力データのファイル書き込み
      fwrite($fp, $newdata );
      fclose($fp);
    } 

}

 //編集選択

      //編集フォームの送信の有無で処理を分岐
      if(!empty($_POST['editNO'])){ //もし、編集フォームに入力されたら


       // 以下編集機能
      //入力データの受け取りを変数に代入
      $editNO = $_POST['editNO'];
      $editpass=$_POST['editpass'];


      //読み込んだファイルの中身を配列に格納する
      $ret_array = file($filename);
      foreach ($ret_array as $line) {//配列の数だけループさせる

       $data = explode("<>", $line); //explode関数でそれぞれの値を取得
       if ($data[0] == $editNO && $data[4] == $editpass){ 

      //ファイルを書き込みモードでオープン+中身を空に
           $fp = fopen($filename, "w");

          //編集のフォームから送信された値と差し替えて上書き
          fwrite($fp, $editNO . "<>" . $name . "<>" . $comment . "<>" . $postedAt . );
        } else {
          //一致しなかったところはそのまま書き込む
          fwrite($fp, $line);
        }
      }
      fclose($fp);
    }
  }


      //編集フォームの送信の有無で処理を分岐
      if (!empty($_POST['editID'])) {

          //入力データの受け取りを変数に代入
          $ID = $_POST['editID'];

          //読み込んだファイルの中身を配列に格納する
          $editCon = file($filename);

          //配列の数だけループさせる
          foreach ($editCon as $line) {

              //explode関数でそれぞれの値を取得
              $editdata = explode("<>",$line);

              //投稿番号と編集対象番号が一致したらその投稿の「名前」と「コメント」を取得
              if ($editID == $editdata[0] && $editpass == $editdata[4]) {

                  //投稿のそれぞれの値を取得し変数に代入
                  $editnumber = $editdata[0];
                  $editname = $editdata[1];
                  $editcomment = $editdata[2];

                  //既存の投稿フォームに、上記で取得した「名前」と「コメント」の内容が既に入っている状態で表示させる
                  //formのvalue属性で対応
              }
            }
      }



  <form action="mission_3-5.php" method="post">
      <input type="text" name="name" placeholder="名前""><br>
      <input type="text" name="comment" placeholder="コメント"><br>
       <input type="text" name="editNO" value="<?php if(isset($edit)) {echo $editnumber;} ?>">


        <input type="text" name="pass" placeholder="パスワード" >
        <input type="submit" name="submit" value="送信">
    </form>

    <form action="mission_3-5.php" method="post">
      <input type="text" name="dnum" placeholder="削除対象番号" ></br>
      <input type="text" name="delpass"  placeholder="パスワード" >
       <input type="submit" name="delete" value="削除">
    </form>

    <form action="mission_3-5.php" method="post">
      <input type="text" name="edit" placeholder="編集対象番号"></br>
      <input type="text" name="editpass" placeholder="パスワード">
      <input type="submit"name="send_edit" value="編集">
    </form>









 <?php
  $filename="mission_3-5.txt";
  $texts_export=file($filename);
    foreach((array)$texts_export as $text_export){

      $keys_export=explode("<>",$text_export);
      $keys_export_num=count($keys_export);
      foreach($keys_export as $key_export=>$val_export){
        if($key_export!==$keys_export_num-2){
          echo $val_export." ";
        }
      }
      echo "<br>";
    }

 ?>                                       


  </body>
</html>


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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • te2ji

    2019/10/19 07:51

    これ、どこかの教材だと思うのですが、出典を明らかにしてもらえますか?

    キャンセル

回答 1

+1

fwrite($fp, $editNO . "<>" . $name . "<>" . $comment . "<>" . $postedAt . );

表示通り、シンタックスのエラーなので76行目の最後のドットが不要?な気がします

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/10/19 06:47

    自信持ってください。構文的にしっかり不要です。

    キャンセル

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

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

関連した質問

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