我是 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);
}
?>
答案 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.txt
和 save_news.php
位于同一文件夹路径中。 date.txt
是否在 forms
文件夹中?如果不是,您需要确保脚本可以访问该文件,并且 XAMPP 和 PHP 有适当的权限来读取、写入此文件。
如果 date.txt
在别处,可能在父级,使用:
$fp = fopen('../date.txt', 'a');
<块引用>
如果 PHP 决定 filename 指定一个本地文件,那么它将尝试打开该文件的流。该文件必须可供 PHP 访问,因此您需要确保文件访问权限允许此访问。如果您启用了 open_basedir
,则可能会有更多限制。