2016-12-06 13 views
0

、私は私のforeach文と間違っているかを把握しようとしています。私は1日以上の間、エラーを見つけることに取り組んできましたが、時間がなくなりました。このプログラムは、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

[リトルボビー]は(http://bobby-tables.com/)*** [スクリプトがSQLインジェクション攻撃のリスクがある。]と言います(http://stackoverflow.com/questions/60174/how-can- I-防ぐ-SQLインジェクション・イン・PHP)*** [MySQLiを]は[準備](http://en.wikipedia.org/wiki/Prepared_statement)文について学ぶ(http://php.net/manual /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

あなたは$アイテムでのvar_dumpを行うと、ここで、出力を投稿することができますか? – vuryss

答えて

0

あなたはおそらく、あなたのjson_decode()あなたが後にjson_decode()

NULLが返されますPHP json_decode()

JSONをデコードすることができない場合場合やvar_dump($item);でこれを確認することができますから無効なリターンを持っていますエンコードされたデータは再帰制限よりも深いです。 http://php.net/manual/en/function.json-decode.php

$item === nullのような場合には、あなたのforeach()パラメータには常に有効な返品が得られるとは限りません。 $item = null https://3v4l.org/oNr8P

+0

接続:JSONファイルの読み取り:NULL JSONファイルのデコード: 警告:行30 – tross44

+0

に/var/www/html/jsonparse.phpでforeachのために供給無効な引数()は正確にあなたのJSONのデコードはnullです。そのケースをコード内で処理する必要があります。さらに、jsonデコードがnullである理由を調べる必要があります。おそらく、jsonファイルが読み込まれていないか、適切なjson形式でない可能性があります。 –

関連する問題