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

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

ただいまの
回答率

89.13%

php 掲示板 編集機能の判別の仕方

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,869

shoutikubai

score 11

前提・実現したいこと 

<input type="hidden">タグを用いて、編集モードかどうかを判別すしたいのですが、うまくいっていないです。 
編集とわかれば編集を行い、どうでなければ投稿を行いたいです。

発生している問題・エラーメッセージ

編集と投稿が同時に行われてしまっったり
編集が行われたあとに投稿が出来なくなってしまったりしてしまいます。
上手く$hennshuuを初期化できていないのが原因であるとも思うのですが
どうすれば上手く出来るのでしょうか。

###該当のソースコード

php

PHP<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
date_default_timezone_set('Asia/Tokyo');
$ff         = "";
$newname    = "";
$newcomment = "";
$err_msg1   = "";
$err_msg2   = "";
$message    = "";
$name       = (isset($_POST["name"]) === true) ? $_POST["name"] : "";
$comment    = (isset($_POST["comment"]) === true) ? trim($_POST["comment"]) : "";

if (isset($_POST["toukou"]) === true) {
    if ($name === "")
        $err_msg1 = "名前を入力してください";
    if ($comment === "")
        $err_msg2 = "コメントを入力してください";
    if ($err_msg1 === "" && $err_msg2 === "") {
        $message = "書き込みに成功しました。";
    } //$err_msg1 === "" && $err_msg2 === ""

if(empty($_POST[toukoum])){
    if (null != filter_input_array(INPUT_POST)) {
        $name    = filter_input(INPUT_POST, 'name');
        $comment = filter_input(INPUT_POST, 'comment');
        if (!empty($name) && !empty($comment)) {
            $number       = file_get_contents("counter.txt");
            $name         = $_POST["name"];
            $comment      = $_POST["comment"];
            $date         = date('Y-m-d-G-i');
            $file_number  = "numberx.txt";
            $number_array = file($file_number);

            for ($i = 0; $i <= count($number_array); ++$i) {
                $number++;
            } //$i = 0; $i <= count( $number_array ); ++$i
            $comment = nl2br($comment);
            $fp      = fopen("k_2_3.txt", "a");
            fwrite($fp, "$number.<>$name<>$comment<>$date\n");
            fclose($fp);
            $fp = fopen("numberx.txt", "a");
            fwrite($fp, "$number\n");
            fclose($fp);
        } //!empty( $name ) && !empty( $comment )
    } //null != filter_input_array(INPUT_POST)
 } //isset($_POST["toukou"]) === true
//null != filter_input_array( INPUT_POST )
}


if (isset($_POST["delete"])) {
    $delete = $_POST["delete"];
    $delCon = file("k_2_3.txt");
    $a      = fopen("k_2_3.txt", "w");
    @fwrite($a, "");
    fclose($a);
    for ($j = 0; $j < count($delCon); $j++) {
        $delDate = explode('<>', $delCon[$j]);
        if ($delDate[0] != $delete . ".") {
            $b = fopen("k_2_3.txt", "a");
            @fwrite($b, $delCon[$j]);
            fclose($b);
        } //$delDate[ 0 ] != $delete . "."
        else {
            $b = fopen("k_2_3.txt", "a");
            @fwrite($b, $delDate[0] . "." . "消去しました。\n");
            fclose($b);
        }
    } //$j = 0; $j < count( $delCon ); $j++
} //isset( $_POST[ "delete" ] )

if (isset($_POST["hennshuu"]) === true) {
    $hennshuu = $_POST["hennshuu"];
    $datem    = file("k_2_3.txt");
    for ($j = 0; $j < count($datem); $j++) {
        $hennshuudate = explode('<>', $datem[$j]);
        if ($hennshuudate[0] == $hennshuu . ".") {
            $newname    = $hennshuudate[1];
            $newcomment = $hennshuudate[2];


        } //$hennshuudate[0] == $hennshuu . "."
    } //$j = 0; $j < count($datem); $j++
    $fp = fopen("k_2_5.txt", "w");
    fwrite($fp, "$hennshuu");
    fclose($fp);



} //isset($_POST["hennshuu"]) === true

if (isset($_POST["toukoum"])) {
    $hennshuu = file_get_contents("k_2_5.txt");
    $comment  = $_POST["comment"];
    $name     = $_POST["name"];
    $file     = file("k_2_3.txt");
    $filename = file_get_contents("k_2_3.txt");

    for ($j = 0; $j < count($file); $j++) {
        $saisinn = explode('<>', $file[$j]);
        if ($saisinn[0] == $hennshuu . ".") {
            $result_arr = str_replace($saisinn[1], $name, $filename);
            $result_brr = str_replace($saisinn[2], $comment, $result_arr);
        } //$saisinn[0] == $hennshuu . "."
        $fp = fopen("k_2_3.txt", "w");
        fwrite($fp, "$result_brr");
        fclose($fp);
    } //$j = 0; $j < count($file); $j++
$hennshuu =  "" ;
} //isset($_POST["toukoum"])
?>



<?php
echo $message;
?>
<form action="k_2_5_3.php" method="post" >
名前を入力してください。<br/>
<input type="text" name="name" value="<?php
echo $name;
echo $err_msg1;
echo $newname;
?>" /><br/>
コメント<br/>
<textarea name ="comment"cols="50" rows="5"><?php
echo $comment;
echo $err_msg2;
echo $newcomment;
?></textarea>
<br>
<input type="submit" name="toukoum" value="編集">
<input type="hidden" name="toukou" value="$hennshuu" />



</form>

  <form action="" method="POST"> 
      削除対象番号<input type="text" name="delete"> 
          <input type="submit" name="deleteNo" value="削除"> 
      </form> 
   <form action="" method="POST"> 
      編集対象番号<input type="text" name="hennshuu"> 
          <input type="submit" name="hennshuuNo" value="編集"> 
      </form> 
        <h2>投稿一覧</h2>


<?php
$file_name = "k_2_3.txt";
$ret_array = file($file_name);
for ($i = 0; $i < count($ret_array); ++$i) {
    $line = explode('<>', $ret_array[$i]);
    echo ($ret_array[$i] . "<br />\n");
} //$i = 0; $i < count( $ret_array ); ++$i

?>

```

試したこと

emptyを使ってみたのですが、考え方はあっていると思うのですが
名前が少しおかしいのは申し訳ないです。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

+2

ちょっとどこで躓いているかわかりかねるのですが、
もう少し簡便なサンプルでテストされると良いかと思います

編集とは文書idを指定して投稿することで
idがなければ新規文書ですよね。

また投稿については一度セッションにデータを保持した上で
バリデートして、投稿データはセッションからしか渡さなければ
不正データをはじくのに役立つと思います
(セキュリティポリシー次第ですが)

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

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