2016-12-06 43 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格式。 –