【问题标题】:save post data into file via php通过php将帖子数据保存到文件中
【发布时间】:2020-06-22 03:09:12
【问题描述】:

我正在使用一个简单的 HTML 表单以这种格式发送 http post 请求:key1=value1&key2=value2&key3=value3&key4=value4&key5=value5,我正在尝试使用 PHP

将 http post 数据保存到文本文件中

这是我想出的 PHP 代码:

$data1 = $_POST['key1'] ;
$data2 =$_POST['key2'] ;
$data3 =$_POST['key3'] ;
$data4 =$_POST['key4'];
$data5 =$_POST['key5'];
$fp = fopen('data.txt', 'a');
fwrite($fp, $_POST['data1'], $_POST['data2'], $_POST['data3'], $_POST['data4'], $_POST['data5']);
fclose($fp);

但它只是创建文件“data.txt”而不将任何值添加到文本文件中

我做错了什么?

【问题讨论】:

  • file_put_contents( 'data.txt', json_encode( $_POST ) ) 可能是一个不错的选择,因为它可以让以后轻松解码和访问原始数据?
  • 是的,file_put_contents 带有 FILE_APPEND 标志(OP 的 fopen 运行 a),以及 json_encode(如果他打算直接阅读,可能带有 JSON_PRETTY_PRINT 标志) ,似乎是有用的前进方式。

标签: php html


【解决方案1】:

查询字符串参数应该用$_GET访问,即使请求方法是POST。

此外,请求中不存在索引 data1data2data3data4data5

fwrite 最多接受 3 个参数。

最终代码应该是这样的:

<?php

$data1 = $_REQUEST['key1'];
$data2 = $_REQUEST['key2'];
$data3 = $_REQUEST['key3'];
$data4 = $_REQUEST['key4'];
$data5 = $_REQUEST['key5'];
$fp = fopen('data.txt', 'a');
fwrite($fp, implode("\n", [$data1, $data2, $data3, $data4, $data5]));
fclose($fp);

【讨论】:

  • 不,没有按我的预期工作,这段代码不会创建文件,它只在表单提交的响应中显示 php 文件“代码”的内容
  • @Arad016 您应该在脚本开头使用&lt;?php 开始 PHP 标记(编辑答案)。
  • 应该在这段代码的开头添加&lt;?php
  • 它没有在提交页面显示内容,但也没有将值添加到文本文件中,它只创建 data.txt 文件并创建 5 行但这些行上没有数据
  • 检查查询字符串中是否存在参数(编辑答案)。
【解决方案2】:

改变

fwrite($fp, $_POST['data1'], $_POST['data2'], $_POST['data3'], $_POST['data4'], $_POST['data5']);

fwrite($fp, "$data1,$data2,$data3,$data4,$data5");

您定义的所有这些“数据”变量都是个体,它们不是 $_POST 数组的一部分。

并且 fwrite 需要单个数据字符串而不是一组单独的数据,因此您需要将它们连接在一起。我在它们之间放置了逗号,这样您就有机会将它们区分开来,但显然您可以更改它以满足您的要求。文档:https://www.php.net/manual/en/function.fwrite.php

附:如果您的变量是在 URL 查询字符串(而不是请求的正文)中发送的,那么您需要使用 $_GET 来检索它们,如下所示:

$data1 = $_GET['key1'];
$data2 = $_GET['key2'];
$data3 = $_GET['key3'];
$data4 = $_GET['key4'];
$data5 = $_GET['key5'];

【讨论】:

  • 如果您看到页面上显示 PHP 代码,这意味着您没有正确设置 PHP,或者您尝试在没有 .php 扩展名的文件中运行它跨度>
  • 它只是在文件中添加了4个逗号“,,,,”
  • 我忘了在代码开头添加php标签,因为我已经添加了标签,现在它只显示逗号
  • "它只显示逗号"...在哪里?在屏幕上,还是在文件中?请在描述正在发生的事情时清晰准确。
  • P.S.如果这些值是在查询字符串上发送的(而不是在您的请求正文中 - 同样在问题中并不是很清楚,那么您必须使用 GET 来检索它们。请参阅编辑后的答案。
猜你喜欢
  • 2018-10-11
  • 2017-04-24
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 2014-02-15
相关资源
最近更新 更多