php,从$ _POST搜索字符串的txt并覆盖包含该变量的行

时间:2015-09-18 20:51:20

标签: php arrays forms session post

所以我试图只使用php和html来构建一个简单的评论系统。我可以登录用户并发表评论,但编辑评论不起作用。

所以我将发布的评论保存在txt文件中,格式为:

User|commentSignature|commentContent

其中comment signature是commentContent的子字符串。 然后,当用户登录时,我在表单文本中显示他的评论,这样他就可以提交该表单并轻松编辑它们。

以下是编辑评论的表单:

$line = trim($line);
$commentString= 'Comment';
$arr = explode("|", $line, 3);

// This doesent work
// It is about editing comments
if (isset($_SESSION['user']) and $_SESSION['user'] == $arr[0]) { ?>


    <form action="editComment.php" method="POST">
    <textarea rows="10" cols="30" name="commentContent"> <?php echo "Here is youre old comment: " . $arr[2] ?></textarea>
    <br /> 
    <input type="hidden" name="oldCommentSignature" value= "<?php echo $arr[1]; ?>">

    <input type="submit" value="Edit"> <br />
    </form>

因为你可以看到我发送一个隐藏值oldCommentSignature,以便能够找到我将覆盖的评论。

到目前为止,我打印了$ _POST和$ _SESSION值并且它们已被发送,但我在editComment.php中的覆盖方法无效。

<?php   session_start();

print_r($_POST);    print_r($_SESSION);

$handle = fopen ( "save.txt", "r+" );   if ($handle &&
isset($_SESSION['user']) && $_POST) {
        while ( ($line = fgets ( $handle )) !== false ) {
            $line = trim($line);            $arr = explode("|", $line, 3);
            //$compareValue = $arryOfLine[1];

            if ($_POST["oldCommentSignature"] == $arr[1]) {

                $newCommentSignature = substr($_POST ["commentContent"], 0, 9);
                $nameAndTimeAndContent = $_SESSION['user'] . "|" .
                $newCommentSignature . "|" . $_POST ["commentContent"] . "\n";  

                 fwrite($handle, $nameAndTimeAndContent);
                 break;
            }       
      }
}   fclose ( $handle );

?>

有时没有发生任何事情,有时我会得到消息

  

注意:未定义的偏移量:第16行的/Applications/XAMPP/xamppfiles/htdocs/tr/editComment.php中的1 *

0 个答案:

没有答案