2014-07-10 42 views
-1

我有一個Web服務器正在收集來自日誌收集服務器的傳入HTTP POST消息。我試圖用php腳本收集傳入的發佈數據,然後將其下載到mysql中。我對PHP和MySQL都有有限的經驗。HTTP POST數據到PHP和MySQL

這是我一直在努力的劇本,但我似乎無法得到它的工作:

<?php 
ob_start(); 
print_r($_REQUEST); 
$data = ob_get_contents(); 
ob_end_clean(); 

$mysqli = new mysqli("localhost", "root", "XXXX", "XXXX"); 
if ($mysqli->connect_errno) { 
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
} 
mysqli_query("INSERT INTO `XXXX` VALUES ('$data')"); 
Print "Your information has been successfully added to the database."; 
?> 

我不知道我在哪裏失敗在這裏,並希望任何幫助!如果你想知道的話,我用XXXX替換了密碼到我的網絡服務器和數據庫名稱。

我能夠用這個腳本成功登錄到mysql,但似乎我使用PHP的POST數據收集工作不正確。

謝謝

+0

嘗試打印出您的SQL語句以查看它是否有效。我的猜測是$數據不適合插入SQL插入中的值列表中。因爲使用ob_start();和ob_get_contents();將發佈數據轉換爲值列表是愚蠢的。 – developerwjk

+1

使用'mysqli'時,您應該使用參數化查詢和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢中。 **不要**使用字符串插值來實現此目的,因爲您將創建嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 – tadman

回答

0
ob_start(); 
print_r($_REQUEST); 
$data = ob_get_contents(); 
ob_end_clean(); 

你爲什麼要這麼做?所有你將會得到的是$_POST數組中的任何字符串,這很可能不會與你需要的列/值匹配。

  1. XXXX應該是數據庫表的名稱,而不是數據庫名稱
  2. INSERT語句中是有點古怪。閱讀manual。最起碼,指定列名:

    INSERT INTO tablenamecol1col2)VALUES( 「值1」, 「值2」)

  3. 提取您從$_POST像這樣期待值:$_POST['keyname'],在那裏你可以用你自己的keyname來代替。