2016-04-07 2 views
0

I json Array PHP und legen Sie mehrere Zeilen in der TabelleKann nicht in der Lage json Array in PHP zugreifen, es gibt null zurück und Warning: Invalid argument für foreach geliefert()

Problem zu senden versuche:

PHP:

  1. nicht fähig, die Dekodierungs JSON Array zuzugreifen - Array nIL zurück
  2. Warnung zählen: Invalid argument für foreach geliefert()

Wenn ich JSON-String drucken es gibt mir die folgenden Daten

[ 
    { 
     "email" : "", 
     "Name" : "Ddd", 
     "contact2" : "", 
     "ontact1" : "" 
    }, 
    { 
     "email" : "", 
     "Name" : "Ddd", 
     "contact2" : "", 
     "contact1" : "" 
    }, 
    { 
     "email" : "", 
     "Name" : "Dddddr", 
     "contact2" : "", 
     "contact1" : "" 
    } 
] 

Aber wenn ich versuche, dass mit PHP zugreifen, die mir einen Fehler

PHP-Code zeigt:

<?php 

    $inputJSON = file_get_contents('php://input'); 
    $array = json_decode($inputJSON, true); 

    echo count($array); 

    foreach($array as $item) { 
     $uses = $item['Name']; 
     echo $uses; 
    } 

?> 

Fehler:

Warning: Invalid argument supplied for foreach()

Also habe ich das Array in PHP getestet verwenden,

Isarray() || Isobject funtion but it print null 
Count() funcions provide 0 

var_dump($array); result NULL 

Aber ich dekodieren das Array und das Ergebnis in iOS, gibt es das Array als Reaktion

echo json_encode($array); 

Aber in php Ich bin nicht in der Lage Greife auf das Array zu.

Nicht sicher, ob es einen Fehler im iOS-Code gibt. In iOS habe ich NSMutableDictionary, die zu NSMutableArray und dann NSArray gespeichert wird. Wenn ich die NSMutableArray analysieren, bekomme ich das gleiche Problem.

iOS Code:

func saveToCloud(){ 

    var mutablearray = NSMutableArray() 

    var dict = NSMutableDictionary() 

    var eachRow = textfieldarry as [UITextField] 
    for eachField in eachRow { 
     let index = eachRow.indexOf(eachField) 
     let data = eachField.text!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 


     dict[keys[index!]] = data 
    } 

    mutablearray.addObject(dict) 

    var TonNSarray = NSArray(array: mutablearray) 
    var url = "myurl/file.php " 

    JsonParseTOSaveCloud(TonNSarray, urlstring: url, successfullResponse: "Success", alertmessage: "not") 
} 

zum Server Speicher:

func ok_JsonParseTOSaveCloud(dict:AnyObject,urlstring:String,successfullResponse:String,alertmessage:String){ 

    let json:NSData = try! NSJSONSerialization.dataWithJSONObject(dict, options: NSJSONWritingOptions.PrettyPrinted) 
    var d = NSString(data: json, encoding: NSUTF8StringEncoding) 
    print("jsonstr\(d!)") 
    let urlString = urlstring 

    urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLPathAllowedCharacterSet())! 

    let httpRequest = NSMutableURLRequest(URL: NSURL(string: urlString)!) 

    httpRequest.HTTPMethod = "POST" 

    httpRequest.HTTPBody = json 

    let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration() 

    sessionConfig.HTTPAdditionalHeaders = ["Accept" : "application/json", "api-key" : "API_KEY"] 

    let session = NSURLSession(configuration: sessionConfig) 

    let postDataTask = session.dataTaskWithRequest(httpRequest, completionHandler: {(data: NSData?, reponse: NSURLResponse?, error: NSError?) in 

     if data == nil { 

      dispatch_async(dispatch_get_main_queue(), { 

       let alert = UIAlertView(title: alertmessage, message: "you are no longer connected to the Internet", delegate: self, cancelButtonTitle: "Dismiss") 

       alert.show() 

      }) 
     } else { 

      print("data\(data)") 

      //let jsonResult = (try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)) 
     } 

    }) 

    postDataTask.resume() 
}  

Hinweis: Wenn ich in PHP zu überprüfen, wie dies funktioniert es. Das ist, wenn ich die Jsonstring oder Jsonarray direkt es funktioniert.

<?php 

    $json = '[ 
    { 
     "email" : "", 
     "Name" : "Ddd", 
     "contact2" : "", 
     "contact1" : "" 
    }, 
{ 
    "email" : "", 
    "Name" : "Ddd", 
    "contact2" : "", 
    "contact1" : "" 
}, 
{ 
    "email" : "", 
    "Name" : "Dddddr", 
    "contact2" : "", 
    "contact1" : "" 
} 
]'; 

$array = json_decode($json, true); 

foreach($array as $item) { 
    $uses = $item['Name']; 
    echo $uses; 
} 

    ?> 
+0

Verwenden Sie 'var_dump ($ inputJSON)' und stellen Sie sicher, dass nichts in der Eingabe vorhanden ist. Verwende auch 'json_last_error()', wenn 'json_decode()' 'NULL' zurückgibt. – Barmar

+0

Danke.var_dump ($ inputJSON) gibt mir diese Zeichenkette (0) "" und json_last_error() gibt mir int (0) – Lydia

+0

Wenn die Eingabe JSON leer ist, wie erwarten Sie dann, wenn Sie sie dekodieren? – Barmar

Antwort

0

Mit Gott Gnade mein Problem gelöst Der Fehler in meinem ursprünglichen Code war, um den Zugriff von data.First i für jede verwendet, so dass es mir warning.Then aus dem Link gibt http://www.dyn-web.com/tutorials/php-js/json/decode.php, bekam ich den Zugriff auf wie das hat dann geklappt.

 $location = $data[0]['email']; 

Dann verwenden wir eine Kombination aus numerischer und assoziativer Array-Syntax, um auf das gewünschte Element im mehrdimensionalen Array zuzugreifen.

+0

Sehen Sie nicht, wie dies möglicherweise funktionieren kann, wenn '$ data' null ist. – Barmar

+0

var_dump ($ data) return string (0) "", aber wenn die Daten ecodieren und an die ios senden, haben sie die Daten. Sie haben Daten, – Lydia

+0

Es muss etwas anderes los sein, wie Sie die Variable oder Sie neu zugewiesen haben mache diese zwei Schritte in verschiedenen Bereichen. Außerdem hast du zuerst gesagt, 'var_dump ($ data)' ist 'NULL', jetzt sagst du, dass es' string (0) '"' ist. Es kann nicht beides sein. Wie auch immer, Sie können '$ data [0] ['location']' 'nicht mit diesem Wert von' $ data' machen. – Barmar