2016-11-07 3 views
-1

In Ordnung, also bin ich ziemlich neu in PHP, JSON und dergleichen. Ich bekam eine Aufgabe, HTML5-Formular in eine JSON-Datenbank einzugeben und diese Information ebenfalls aufzurufen.end() erwartet, dass Parameter 1 Array ist, null gegeben

<?php 
$f_name  = $_POST['f_name']; 
$l_name  = $_POST['l_name']; 
$u_email = $_POST['u_email']; 
$u_adress = $_POST['u_adress']; 
$u_postcode = $_POST['u_postcode']; 
$u_place = $_POST['u_place']; 
$u_birth = $_POST['u_birth']; 

$file = file_get_contents("data.json"); 
$data = json_decode('data.json', true); 

$last_item = end($data); 
$last_item_id = $last_item['id']; 



$data[] = array(

    'f_name'=>$f_name, 
    'l_name'=>$l_name, 
    'u_email'=>$u_email, 
    'u_adress' =>$u_adress, 
    'u_postcode' =>$u_postcode, 
    'u_place'=>$u_place, 
    'u_birth'=>$u_birth, 
    'id' =>++$last_item_id 
    ); 


file_put_contents('data.json', json_encode($data)); 
?> 

und dies ist der Ausgang

[{"f_name":"Jack","l_name":"Smith","u_email":"[email protected]","u_adress":"Something 1","u_postcode":"1111 AA","u_place":"SomeCity","u_birth":"jjjj-mm-dd","id":1}] 

so die Identifikation der Autoinkrement sein sollte, aber wenn ich versuche, dass ich diesen Fehler:

end() expects parameter 1 to be array, null given 

, die in diesem Teil bezieht sich

$last_item = end($data); 
$last_item_id = $last_item['id']; 
+6

Typo 'json_decode ($ file, true) hilft,' – cske

+0

überprüfen, ob '$ data' ist ein Array' is_array ($ data) ' –

+0

Offenbar' json_decode() 'nicht und kehrt' mit falsch ". – arkascha

Antwort

0

diese Zeile ersetzen:

$data = json_decode('data.json', true); 

mit :

$data = json_decode($file, true); 

und es gibt keine n eed, um die ID erneut zu extrahieren. Löschen:

$last_item_id = $last_item['id']; 

Verwendung LAST_ITEM nach:

$data = array(

    'f_name'=>$f_name, 
    'l_name'=>$l_name, 
    'u_email'=>$u_email, 
    'u_adress' =>$u_adress, 
    'u_postcode' =>$u_postcode, 
    'u_place'=>$u_place, 
    'u_birth'=>$u_birth, 
    'id' =>++$last_item 
    ); 

Bitte beachten Sie, dass die Daten nicht in der richtigen json 1D-Array speichern Sie es tatsächlich machen 2D, wenn Sie $data[] = array(....) verwenden Wenn Sie es behalten wollen dann ersetzen:

$last_item = end($data); 

mit:

$last_item = end($data[0]); 

Lange Rede kurzer Sinn, Arbeitscodes können entweder:

$data = json_decode($file, true); 
$last_item = end($data[0]); 
$data[] = array(

     'f_name'=>$f_name, 
     'l_name'=>$l_name, 
     'u_email'=>$u_email, 
     'u_adress' =>$u_adress, 
     'u_postcode' =>$u_postcode, 
     'u_place'=>$u_place, 
     'u_birth'=>$u_birth, 
     'id' =>++$last_item 
     ); 

ODER

$data = json_decode($file, true); 
$last_item = end($data); 
$data = array(

     'f_name'=>$f_name, 
     'l_name'=>$l_name, 
     'u_email'=>$u_email, 
     'u_adress' =>$u_adress, 
     'u_postcode' =>$u_postcode, 
     'u_place'=>$u_place, 
     'u_birth'=>$u_birth, 
     'id' =>++$last_item 
     ); 

abhängt, wie Sie wollen. Ich hoffe, es

+0

Der letzte Teil ist falsch. Betrachten Sie die Datenstruktur des JSON, es ist eine Anordnung von Objekten. – jeroen

+0

Jeroen hat einen guten Punkt gemacht. Ich habe meine Antwort bearbeitet. Sie sollten $ data nicht $ data [] verwenden, um Ihre Finallize-Daten in einer Datei zu speichern. Da Sie derzeit kein JSON-1D-Array in einer Datei speichern, speichern Sie das JSON-2D-Array. Wenn Sie weiterhin als 2D-Array speichern möchten, müssen Sie folgendes verwenden: $ last_item = end ($ data [0]); beim Extrahieren von ID. – Learner

+0

Danke für alle schnellen Antworten! Obwohl der Fehler selbst jetzt behoben ist, habe ich immer noch ein Problem, die ID zu extrahieren und zu inkrementieren. Wie es jetzt aussieht, zeigt es nur eine leere ID. – Soshiro

0

Wenn Sie wan t Um den letzten Wert des Arrays zu erhalten, da es sich um JSON-Daten handelt, müssen Sie zuerst json_decode verwenden.

$data = '[{"f_name":"Jack","l_name":"Smith","u_email":"[email protected]","u_adress":"Something 1","u_postcode":"1111 AA","u_place":"SomeCity","u_birth":"jjjj-mm-dd","id":"1"}]'; 

Da, wenn Sie es entschlüsseln, ist es nach wie vor unter einem Array ist aber nur ein Index, erhalten diesen Index und versuchen Sie dies:

$new_data = json_decode($data, true); 
$last_item_id = end($new_data); 
$id = $last_item_id = $last_item_id["id"]; 

$data = array(
'f_name'=>$f_name, 
'l_name'=>$l_name, 
'u_email'=>$u_email, 
'u_adress' =>$u_adress, 
'u_postcode' =>$u_postcode, 
'u_place'=>$u_place, 
'u_birth'=>$u_birth, 
'id' => $id + 1 
); 
+0

Basierend auf dem Code würde ich denken, das OP würde die ID des letzten Elements in der JSON-Datei wollen, nicht die erste. – jeroen

+0

Bearbeitete meine Antwort, es scheint, es ist nicht nur das Problem des OP, das Ende() wirft einen Fehler. –

+1

'$ new_data [0]' erhält das erste Element, nicht das letzte. – Mike

Verwandte Themen