2016-12-06 141 views
0

總之,我想弄清楚我的foreach語句有什麼問題。我一直在努力尋找一天內發現的錯誤,並且我的時間不夠用了。這個程序應該解析一個json數組並將其發佈到一個mysqli數據庫。PHP>爲foreach提供的無效參數()

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
$a = print_r(var_dump($GLOBALS),1); 
echo htmlspecialchars($a); 

$servername = "#"; 
$username = "#"; 
$password = "#"; 
$dbname = "#"; 

// Create connection 
$conn = mysqli_connect($servername, $username, $password, $dbname); 
echo "Connection Successful : "; 

// Check connection 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 

// Read JSON file 
$jsondata = file_get_contents('scripts/AUDIT_DIR/report.json'); 
echo "JSON File Read : "; 

// Convert and Loop 
$item = json_decode($jsondata, true); 
echo "JSON File Decoded : "; 

foreach($item as $arr) 
{ 
    $id = $arr["id"]; 
    $hostname = $arr["hostname"]; 
    $ip = $arr["ip"]; 
    $package = $arr["package"]; 
    $publisher = $arr["publisher"]; 
    $origin = $arr["origin"]; 
    $version = $arr["version"]; 
    $size = $arr["size"]; 

    $sql = "INSERT INTO testtable(id, hostname, ip, package, publisher, origin, version, size) 
    VALUES ('10', '$hostname', '$ip', '$package', '$publisher', '$origin', '$version', '$size')"; 

    if (mysqli_query($conn, $sql)) 
    { 
     echo "New record created successfully : "; 
    } 
    else 
    { 
     echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
    } 
} 

?>

+0

'$ item'應該是一個數組

實施例示出的錯誤發生。你檢查過了嗎? –

+2

[Little Bobby](http://bobby-tables.com/)說*** [你的腳本存在SQL注入攻擊風險。](http://stackoverflow.com/questions/60174/how-can- ***)瞭解[MySQLi](http://php.net/manual)[準備](http://en.wikipedia.org/wiki/Prepared_statement)聲明/en/mysqli.quickstart.prepared-statements.php)。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! [不相信嗎?](http://stackoverflow.com/q/38297105/1011527) –

+0

你可以在$ item上做一個var_dump並在這裏發佈輸出嗎? – vuryss

回答

0

您可能遇到來自無效的回報,那你json_decode()你也可以在你的json_decode()

在PHP json_decode()將返回NULL,如果JSON不能被解碼或者如果有var_dump($item);檢查這編碼數據比遞歸限制更深。 http://php.net/manual/en/function.json-decode.php

您需要妥善保護$item === null而不是假設您將始終爲您的foreach() params獲得有效回報。當$item = null https://3v4l.org/oNr8P

+0

連接成功:JSON文件閱讀:NULL JSON文件解碼: 警告:爲/ foreach()中的/var/www/html/jsonparse.php提供的無效參數在第30行 – tross44

+0

準確地說,您的json解碼爲空。您需要在代碼中處理這種情況。此外,你需要弄清楚爲什麼JSON解碼爲空,也許你的JSON文件沒有被讀取或不是正確的JSON格式。 –

相關問題