0

PHP を使用して、html ページからのユーザー入力を .txt ファイルに保存し、そのユーザー入力を同じページに出力したいと考えています。

ただし、.txt ファイルまたはページ div には何も表示されません。

追加:新しいメッセージをそれぞれ新しい div に表示したいのですが、これは多少異なる質問であることは知っていますが、関連している可能性があると考えました。

これが機能しない理由についてのアイデアはありますか?

HTML:

フォーム自体:

<textarea name="msg" rows="5"></textarea>
<form id="post" name="post" action="storeText.php" method="post">
    <input class="button" type="submit" value="POST!"/>
</form>

同じhtmlページに出力したい場所:

<div class="menuItem" >
    <?=$msg?>
</div>

PHP:

storeText.php

<?php       
$filename = 'posts.txt';
$msg = (isset($_POST['msg']) ? $_POST['msg'] : null);

    // Let's make sure the file exists and is writable first.
    if (is_writable($filename)) {

    // In our example we're opening $filename in append mode.
    // The file pointer is at the bottom of the file hence
    // that's where $somecontent will go when we fwrite() it.
    if (!$handle = fopen($filename, 'a')) {
        echo "Cannot open file ($filename)";
        exit;
    }

    // Write $somecontent to our opened file.
    if (fwrite($handle, $msg) === FALSE) {
        echo "Cannot write to file ($filename)";
        exit;
    }

    echo "Success, wrote ($msg) to file ($filename)";

    fclose($handle);

    } else {
    echo "The file $filename is not writable";
    }
?>
4

3 に答える 3

1

HTML マークアップを次のように変更します。

<form id="post" name="post" action="storeText.php" method="post">
    <textarea cols="x" rows="x" name="msg"></textarea>
    <input class="button" type="submit" value="POST!"/>
</form>

ファイルに適切なパーミッションがあり、PHP に書き込みアクセス権がある場合は、ファイルにデータを書き込むことができるはずです。

于 2013-09-12T23:00:59.543 に答える
1

これを試してみてください。

2 つのファイルがあります。1 つは同じページから投稿する送信用で、もう 1 つはDIVincludedisplay_div.phpです。

設定方法は、最新の投稿を一番上に表示することです。

PHP ハンドラとフォーム

<?php       
// check if the file first exists, if not create the file
if (!file_exists("posts.txt")) {
$fp = fopen('posts.txt', 'a+');
fwrite($fp, '');
chmod("posts.txt", 0644);

// you may have to use this one
// remember to comment out the one with 0644 if using this one
// chmod("posts.txt", 0777);
fclose($fp);
}

// check if "msg" is set
if(isset($_REQUEST['msg'])) {
$file = 'posts.txt';  
$str = $_POST['msg'] . "\n";
$temp = file_get_contents($file);
$content = $str.$temp;
file_put_contents($file, $content);

// echo success message
echo "Saved to $file successfully!";
echo "<br>";
echo "Previous messages:";
echo "<hr>";

// print out previous posts
$file = file_get_contents('posts.txt', true);
$lines = explode(PHP_EOL, $file);

foreach ($lines as $line) {
    if (strpos($line, '/') === false) {
        $line = htmlspecialchars($line . "\n");
        echo nl2br($line);
    }
}
exit;
} // end of if(isset($_REQUEST['msg']))

?>

<form id="post" name="post" action="" method="post">
<textarea name="msg" rows="5"></textarea>
<br>
<input class="button" type="submit" name="submit" value="POST!" />
</form>

<?php include 'display_div.php'; ?>

display_div.php

注意:Previous messages:<br>削除するか、テキストに置き換えることができます。

<div class="menuItem" >
Previous messages:<br>
<?php
$file = file_get_contents('posts.txt', true);
$lines = explode(PHP_EOL, $file);

foreach ($lines as $line) {
    if (strpos($line, '/') === false) {
        $line = htmlspecialchars($line . "\n");
        echo nl2br($line);
    }
}
?>
</div>
于 2013-09-13T13:49:41.953 に答える