PHP:从文本文件获取每个POST数据并将其插入数据库
我很难从文本文件中获取POST数据。我有这样一行文字从我的文本文件:PHP:从文本文件获取每个POST数据并将其插入数据库
Wednesday October 11, 2017, 04:53 AM,reader_name=%22Impinj%20RFID%20Reader%22&mac_address=%2200%3a16%3a25%3a10%3a7E%3a85%22&line_ending=%0a&field_delim=%2c&field_names=antenna%5fport%2cepc%2cpeak%5frssi%2ctid&field_values=1%2c%22503030393839343834323200%22%2c%2d50%2c%22E280110520005756DE620231%22%0a1%2c%22000000000000001000000441%22%2c%2d53%2c%22E28011602000728E91750917%22%0a1%2c%2288000008%22%2c%2d60%2c%22E280116020007224B7650909%22%0a1%2c%22000000000000001000000441%22%2c%2d54%2c%22E28011602000728E91750917%22%0a1%2c%22503030393839343834323200%22%2c%2d48%2c%22E280110520005756DE620231%22%0a
POST数据如下: reader_name,MAC_ADDRESS,line_ending,field_delim,FIELD_NAMES和field_values
我创建了一个代码,将读取文本文件中的数据,但它失败:
<?php
$fn = "log.txt";
$read = readfile($fn);
// Store the POST variables.
$readerName = $_POST['reader_name'];
$macAddress = $_POST['mac_address'];
$lineEnding = $_POST['line_ending'];
$fieldDelim = $_POST['field_delim'];
$fieldNames = $_POST['field_names'];
$fieldValues = $_POST['field_values'];
//Connect to the database.
$con = mysqli_connect('localhost', 'root', '153624123', 'test') or die("Unable to select database");
// Replace the field delimiter with a comma.
str_replace($fieldDelim, ",", $fieldNames);
// Break the field values up into rows.
$rows = explode("\n", $fieldValues);
// Remove the last row. It's always blank
if (sizeof($rows))
array_pop($rows);
$fieldNames = "reader_name,mac_address," . $fieldNames;
foreach ($rows as $row) {
$row = $readerName . "," . $macAddress . "," .
$row;
$query = mysqli_query($con, "INSERT INTO tags ($fieldNames) VALUES ($row)");
echo "INSERT INTO tags ($fieldNames) VALUES ($row)" . '<br />';
}
?>
我试图寻找在谷歌其他方法,但发现没有运气。该文本文件来自我们为我们的项目购买的被称为“赛道连接”产品的RFID。它有一个网站,他们发布了HTTP POST的源代码。我遵循了一切,但我没有运气。
使用以下:
$read = readfile($fn);
$string =urldecode(explode("^",$read)[1]);//or urldecode(preg_split('@(?=reader_name)@',$read)[1]); demo https://ideone.com/lfEn40
$post = [];
foreach (explode('&', $string) as $chunk) {
$param = explode("=", $chunk);
$post[$param[0]] = isset($param[1])?$param[1]:'';
}
$readerName = $post['mac_address'];
//....
变化下面一行在你的文件生成功能
fwrite($fp, date("l F d, Y, h:i A") . "^" . $rawPostData . "\n");
//.....................................^ change here the coma into^
$ _ POST是集: 内容类型:application/x-www-form-urlencoded 换句话说,对于标准网络表格。
是基于任何表单/文章创建的日志文件吗?如果不是,那么你不会从$ _POST变量中获得数据,所以你需要从文件中读取数据,而不是像$ @Paltin这样的$ _POST变量,例如
我从Speedway Connect的RFID获取日志。他们有一个关于如何获得POST数据文件的开源代码。 这里是链接:https://support.impinj.com/hc/en-us/articles/202756148-HTTP-POST-with-Speedway-Connect-software-VIDEO- –
尝试'var_dump($ _ POST)'并粘贴结果 –
他不会得到任何数据,因为'$ _POST'是空的。并从他的文本行,有一个很大的清理工作要做。 – Sand
是的,POST是空的先生,因为它来自文本文件。我的问题在于如何从我的文本文件中获取POST。 –