空 POST 方法

时间:2021-01-19 18:41:25

标签: php post

我是 PHP 新手,我在发布数据时遇到问题。我尝试发布数据并将其写入txt文件。我已经在 php.ini 中增加了我的帖子最大大小。我使用 XAMPP

<form action="forms/save_news.php" method="post" role="form">
    <div class="form-group">
        <input type="text" name="date" class="form-control" id="date" placeholder="Дата" data-rule="minlen:10" data-msg="Моля въведете дата" />
        <div class="validate"></div>
    </div>
    <div class="form-group">
        <input type="text" class="form-control" name="title" id="title" placeholder="Заглавние"/>
        <div class="validate"></div>
    </div>
    <div class="form-group">
        <textarea class="form-control" name="data" rows="5" data-rule="required" data-msg="Моля въведете съдържание" placeholder="Новина"></textarea>
        <div class="validate"></div>
    </div>
    <div class="text-center"><button type="submit">Запиши</button></div>
</form>

我的 PHP 代码是:

<?php 
if(isset($_POST['date'])) { 
   $date = $_POST['date'];
   $fp = fopen('data.txt', 'a');
   fwrite($fp, $date);
   fclose($fp);
}
?>

2 个答案:

答案 0 :(得分:0)

我的第一个猜测是权限问题。我会做的来解决这个问题是在你的 PHP 脚本中打开错误报告。试试下面的代码:

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
if (isset($_POST('date')) {
  $date = filter_var($$_POST['date'], FILTER_SANITIZE_STRING);
  $fp = fopen('data.txt', 'a');
  fwrite($fp, $date);
  fclose($fp);
}
?>

从您的表单发布另一个请求,然后查看浏览器中显示的内容。报告的错误应该会告诉您问题出在哪里,但如果您不确定如何修复错误。

现在,说了这么多,一定不要相信从网络表单发送的数据。出于简单的测试目的,您可以做自己正在做的事情,但我不建议养成这种习惯,因为它会滋生自满情绪。请注意我对将表单字段的值分配给 $date 变量的行所做的更改。它使用 filter_var 函数来清理字符串。有很多组合,最好准确了解您将如何使用数据,最终选择正确的过滤器。

答案 1 :(得分:0)

您可以考虑进行额外检查。例如,如果 $_POST['date'] 包含一个空字符串,它会传递 isset() 并且仍会将其附加到文本文件中。

PHP 版本也是一个考虑因素。

试试:

<?php 
if(isset($_POST['date']) && !empty($_POST['date'])) { 
  $date = $_POST['date'];
  if (is_writable('date.txt'){
    $fp = fopen('date.txt', 'a');
    if(fwrite($fp, $date) === FALSE){
      echo "Cannot write to file";
      exit;
    }
    fclose($fp);
  } else {
    echo "The file is not writable.";
  }
}
?>

此外,此脚本假定 date.txtsave_news.php 位于同一文件夹路径中。 date.txt 是否在 forms 文件夹中?如果不是,您需要确保脚本可以访问该文件,并且 XAMPP 和 PHP 有适当的权限来读取、写入此文件。

如果 date.txt 在别处,可能在父级,使用:

$fp = fopen('../date.txt', 'a');
<块引用>

如果 PHP 决定 filename 指定一个本地文件,那么它将尝试打开该文件的流。该文件必须可供 PHP 访问,因此您需要确保文件访问权限允许此访问。如果您启用了 open_basedir,则可能会有更多限制。

https://www.php.net/manual/en/function.fopen.php