2016-12-06 3 views
0

Kurz gesagt, ich versuche herauszufinden, was mit meiner Foreach-Aussage falsch ist. Ich habe versucht, den Fehler über einen Tag lang zu finden, und mir läuft die Zeit davon. Dieses Programm soll ein JSON-Array analysieren und es in eine MySQL-Datenbank hochladen.PHP> Ungültiges Argument für 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' soll ein Array sein. Hast du es überprüft? –

+2

[Little Bobby] (http://bobby-tables.com/) sagt *** [Ihr Skript ist für SQL Injection Attacks gefährdet.] (Http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-injection-in-php *** Erfahren Sie mehr über [vorbereitete] (http://en.wikipedia.org/wiki/Prepared_statement) Anweisungen für [MySQLi] (http://php.net/manual /mysqli.quickstart.prepared-statements.php). Sogar [die Zeichenfolge zu entkommen] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) ist nicht sicher! [Glauben Sie es nicht?] (Http://stackoverflow.com/q/38297105/1011527) –

+0

Können Sie eine var_dump für den Artikel $ und die Ausgabe hier veröffentlichen? – vuryss

Antwort

0

Sie haben wahrscheinlich eine ungültige Rückkehr aus Ihrem json_decode() Sie dies mit einem var_dump($item); überprüfen nach dem json_decode()

in PHP json_decode() wird NULL zurückgeben, wenn die json nicht decodiert werden kann, oder wenn Die codierten Daten sind tiefer als die Rekursionsgrenze. http://php.net/manual/en/function.json-decode.php

Sie müssen für einen solchen Fall richtig zu schützen, dass $item === null und man nicht davon ausgehen, wird immer eine gültige Rendite für Ihre foreach() params bekommen.

Beispiel Ihre Fehler zeigt passiert, wenn $item = null https://3v4l.org/oNr8P

+0

Verbindung erfolgreich: JSON-Datei gelesen: NULL JSON-Datei decodiert: Warnung: Ungültiges Argument für foreach() in /var/www/html/jsonparse.php in Zeile 30 angegeben – tross44

+0

Genau Ihre JSON-Dekodierung ist null. Sie müssen diesen Fall in Ihrem Code behandeln. Außerdem müssen Sie herausfinden, warum die JSON-Dekodierung Null ist, vielleicht wird Ihre JSON-Datei nicht gelesen oder ist kein richtiges JSON-Format. –

Verwandte Themen