2017-10-12 37 views
0

我很難從文本文件中獲取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的源代碼。我遵循了一切,但我沒有運氣。

https://support.impinj.com/hc/en-us/articles/202756148-HTTP-POST-with-Speedway-Connect-software-VIDEO-

+0

嘗試'var_dump($ _ POST)'並粘貼結果 –

+0

他不會得到任何數據,因爲'$ _POST'是空的。並從他的文本行,有一個很大的清理工作要做。 – Sand

+0

是的,POST是空的先生,因爲它來自文本文件。我的問題在於如何從我的文本文件中獲取POST。 –

回答

0

使用以下:

$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^
+0

不錯,但他會有很多垃圾他的大塊:P。 – Sand

+0

謝謝你的回答先生。但它並沒有工作。 –

+0

你是什麼意思**它沒有工作,雖然** – madalinivascu

0

$ _ POST集: 內容類型:application/x-www-form-urlencoded 換句話說,對於標準網絡表格

是基於任何表單/文章創建的日誌文件嗎?如果不是,那麼你不會從$ _POST變量中獲得數據,所以你需要從文件中讀取數據,而不是像$ @Paltin這樣的$ _POST變量,例如

+0

我從Speedway Connect的RFID獲取日誌。他們有一個關於如何獲得POST數據文件的開源代碼。 這裏是鏈接:https://support.impinj.com/hc/en-us/articles/202756148-HTTP-POST-with-Speedway-Connect-software-VIDEO- –

相關問題