我的评论系统出错了 - PHP

时间:2018-05-17 10:56:50

标签: php html

我正在尝试为我的网站制作评论系统,但是当我按下发布按钮时,它会给我错误。

错误是:

  

警告:fopen(comments.txt):无法打开流:没有这样的文件或   / Applications / XAMPP / xamppfiles / htdocs / bikereport / new中的目录   第11行设计v1 / Denmark.php

     

警告:fread()期望参数1为资源,布尔值为   / Applications / XAMPP / xamppfiles / htdocs / bikereport / new design   第12行的v1 / Denmark.php

     

警告:fopen(posts.txt):无法打开流:权限被拒绝   / Applications / XAMPP / xamppfiles / htdocs / bikereport / new design   第15行的v1 / Denmark.php

     

警告:fwrite()要求参数1为资源,布尔值为   / Applications / XAMPP / xamppfiles / htdocs / bikereport / new design   第17行的v1 / Denmark.php

     

警告:fclose()要求参数1为资源,布尔值为   / Applications / XAMPP / xamppfiles / htdocs / bikereport / new design   第18行的v1 / Denmark.php

     

警告:fclose()要求参数1为资源,布尔值为   / Applications / XAMPP / xamppfiles / htdocs / bikereport / new design   第19行的v1 / Denmark.php

BUT !!我认为所有的错误都是由第一个错误触发的,第11行是

我的HTML表单:

<form class='' action='' method='POST'>
              First and last name:<br>
              <input required class='font2 i' style='width: 262px;' type='search' name='name' value=''><br><br>

              City or state:
              <input required class='font2 i' type='search' name='city' value=''>         Phone number:<br>
              <input class='font2 i' type='search' name='phone' value=''><br><br>
              E-mail:<br>
              <input required class='font2 i' type='search' name='email' value=''>         Bike serial number:<br>
              <input class='font2 i' type='search' name='serial' value=''><br><br>
              Information about the bike:<br>
              <textarea required class='font2 info' name='info'></textarea><br>
              <input type='submit' name='Submit' value='Post'>
            </form>

我的PHP代码

<?php
  if($_POST){
   $name = $_POST['name'];
   $city = $_POST['city'];
   $phone = $_POST['phone'];
   $email = $_POST['email'];
   $serial = $_POST['serial'];
   $info = $_POST['info'];

   #Get old comments
   $old = fopen("posts.txt", "r+t");
   $old_comments = fread($old, 1024);

   #Delete everything, write down new and old comments
   $write = fopen("posts.txt", "w+");
   $string = "<div class='font2 post'>".$name."<br><br>".$city."<br>".$phone." 
   <br>".$email."<br><br>".$serial."<br><br>".$info."<br>\n".$old_comments;
   fwrite($write, $string);
   fclose($write);
   fclose($old);
 }
?>

3 个答案:

答案 0 :(得分:0)

我很确定你不能同时打开同一个文件两次。您需要在读写模式下一次打开它或关闭文件,然后重新打开它以进行写入。

答案 1 :(得分:0)

您无法两次打开文件。如果再次打开它,在关闭它之前,它将返回FALSE而不是文件处理程序。因此,错误消息包含消息

  

警告:fclose()要求参数1为资源布尔在...中给出

所以,首先关闭它,然后重新打开它。

答案 2 :(得分:0)

您的代码存在很多问题 - 不仅仅是报告为错误和警告的问题;我希望您在考虑向任何用户公开tis之前了解一些安全性,更不用说在互联网上了。您可能想在codereview.stackexchange.com上寻求一些指导

您向我们展示的代码并未产生您向我们展示的错误和警告。假设代码是相似的 ...你试图从一个不存在的文件中读取。第一次打开文件时,您可以通过读取和写入来执行此操作 - 但是您永远不会使用该文件句柄进行编写。你是第二次打开文件而没有关闭第一个句柄 - MSWindows是非常沉重的文件锁定 - 但不是你不会遇到令人讨厌的竞争条件。使用file_get_contents()和file_put_contents()读取和写入文件更加清晰:

 #Get old comments
 $old_comments = file_get_contents("posts.txt");

 #Delete everything, write down new and old comments
 $string = "<div class='font2 post'>".$name."<br><br>".$city."<br>".$phone." 
   <br>".$email."<br><br>".$serial."<br><br>".$info."<br>\n".$old_comments;
 file_put_contents("posts.txt", $string);

或者,如果你想继续使用fopen()并为自己发现痛苦,那么在追加模式下打开一次(如果文件不存在则创建文件)并寻找({{1在阅读之前,在写作之前再次开始。