2

ウェブサイト用のテキストファイルストレージシステムを作成しようとしています。

これが私がこれまでに持っているものです。

いくつかのパーツが機能するようになりましたが、役立つと思われるいくつかの変更を加えた後、さらに多くのエラーが発生しています。

ページやURLを変更せずにこのタスクを実行しようとしています。

<!DOCTYPE HTML>
<html>
    <body>
        <?php
    if (isset($_POST)){
        //Save File
        $file = fopen($_POST['filename'] & ".txt","r+");
        $text = $_POST["textdata"];
        file_put_contents($file, $text);
        fclose($file);
        //Open File
        $file = fopen($_POST['filename'] & ".txt", "r") or exit("Unable to open file.");
        while(!feof($file)){
            echo fgets($file). "<br />";
        }
        fclose($file);
    }

    echo '
    <form name="savefile" method="post" action="' . $_SERVER['PHP_SELF'] . '">
        File Name: <input type="text" name="filename" value=""><br/>
        <textarea rows="20" cols="100" name="textdata"></textarea><br/>
        <input type="submit" name="submit" value="Save Text to Server">
</form>
    <br/><hr style="width: 100%; height: 4px;"><br/>
    <form name="openfile" method="post" action="' . $_SERVER['PHP_SELF'] . '">
        Open File: <input type="text" name="filename" value="">
        <input type="submit" name="submit" value="Submit File Request">
</form>';
    ?>
    </body>
<html>

唯一の方法がphpページにリダイレクトしてから返送することである場合、それは問題ありませんが、それを行う方法がわかりません(おそらくかなり簡単ですが)

あなたが私に提供できる助けやアドバイスをありがとう!

-ジェイク

4

5 に答える 5

6

まず第一に、助けてくれて本当にありがとう!

経験豊富な人が初心者を助けてくれると本当にありがたいです。

あなたからのいくつかの提案で私のコードをいじくり回すのにしばらく時間を費やした後、私はついにそれを機能させました! :D

他の誰かが同様の問題でこのトピックに出くわした場合に備えて、最終的なコードをここに残します。


<!DOCTYPE HTML>
<html>
<body style="background-color: rgb(225,225,225)">
    <form name="savefile" method="post" action="">
        File Name: <input type="text" name="filename" value=""><br/>
        <textarea rows="16" cols="100" name="textdata"></textarea><br/>
        <input type="submit" name="submitsave" value="Save Text to Server">
</form>
    <br/><hr style="background-color: rgb(150,150,150); color: rgb(150,150,150); width: 100%; height: 4px;"><br/>
    <form name="openfile" method="post" action="">
        Open File: <input type="text" name="filename" value="">
        <input type="submit" name="submitopen" value="Submit File Request">
</form>
    <br/><hr style="background-color: rgb(150,150,150); color: rgb(150,150,150); width: 100%; height: 4px;"><br/>
    File Contents:<br/>
    <?php
    if (isset($_POST)){
        if ($_POST['submitsave'] == "Save Text to Server"  && !empty($_POST['filename'])) {
            if(!file_exists($_POST['filename'] . ".txt")){
                $file = tmpfile();
            }
            $file = fopen($_POST['filename'] . ".txt","a+");
            while(!feof($file)){
                $old = $old . fgets($file). "<br />";
            }
            $text = $_POST["textdata"];
            file_put_contents($_POST['filename'] . ".txt", $old . $text);
            fclose($file);
        }

        if ($_POST['submitopen'] == "Submit File Request") {
            if(!file_exists($_POST['filename'] . ".txt")){
                exit("Error: File does not exist.");
            }
            $file = fopen($_POST['filename'] . ".txt", "r");
            while(!feof($file)){
                echo fgets($file). "<br />";
            }
            fclose($file);
        }
    }
    ?>
</body>
</html>

お役に立てれば!

-ジェイク

于 2012-10-08T04:21:30.080 に答える
0

$file = fopen($_POST['filename'] & ".txt","r+");

PHP の連結文字は . (ドット) & の代わりに。ファイル名はユーザーによって定義されるため、ファイルが存在しない場合にファイルを作成しようとするモード 'w' で fopen を呼び出す必要があります。

テストisset($_POST)は、 test ではなく常に true を返しますisset($_POST['filename'])

于 2012-10-08T00:10:07.903 に答える
0

Geek Num 88 が言うように、AJAX (または Websockets でさえも) を使用すると、ページのリロードが妨げられます。しかし、このコードはもうほとんど完成しています。file_put_contents の最初の引数は、ファイルのパスを指す文字列にする必要があります。あなたが今与えているのは、開かれたファイルのリソースです。

したがって、fopen コマンドを削除して、ファイル名を $file に割り当てるだけです。

ちょっとしたヒント: ファイルの読み取りは、同等のfile_get_contentsと同じくらい簡単です。ただし、この実装にはセキュリティへの影響がいくつか見られます。したがって、常に入力をフィルタリングし、出力をエスケープします。しかし、それはまったく別の主題です。

ハッピーコーディング!

于 2012-10-07T23:59:52.520 に答える
0

書き込み部分は、送信が最初のフォームからのものである場合にのみ実行する必要があります。以下のコードは、最初のフォームから送信された場合はファイルを書き込み、2 番目のフォームから送信された場合はファイルを読み取ります。

if (isset($_POST)){

   if ($_POST['submit'] == "Save Text to Server"  && !empty($_POST['filename'])) {
        //Save File
        $file = fopen($_POST['filename'] & ".txt","r+");
        $text = $_POST["textdata"];
        file_put_contents($file, $text);
        fclose($file);
    }

    if ($_POST['submit'] == "Submit File Request") {
         //Open File
         $file = fopen($_POST['filename'] & ".txt", "r") or exit("Unable to open file.");
         while(!feof($file)){
            echo fgets($file). "<br />";
          }
         fclose($file);
     }
}

ページをリロードせずにこれを行う必要がある場合は、フォームから上記のコードへの Ajax 投稿を使用する必要があります。

于 2012-10-08T00:00:48.190 に答える