2016-03-20 6 views
0

Ich versuche, Login/registrieren auf meiner iOS App zu arbeiten. Ich benutze mySQL und PHP neben Swift 2.0. Aus irgendeinem Grund, wenn ich versuche, meinen HTTP POST an die PHP-Skripte zu senden, gebe ich den Fehler: "Die Daten konnten nicht gelesen werden, weil sie nicht im richtigen Format vorliegen."Swift 2.0 HTML POST (Falsches Format)

Ich bin mit MAMP für den MySQL-Server.

let request = NSMutableURLRequest(URL: NSURL.fileURLWithPath("/Users/robin/Programming/xcode/Projects/Quix/php_scripts/userRegister.php")) 
      request.HTTPMethod = "POST" 
      let postString = "email=\(userEmail)&password=\(userPassword)" 
      request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 
      print(postString) 

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in 

     if (error != nil) { 
      print("error=\(error)") 
     } 

     do { 
      if let parseJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary { 

       let resultValue = parseJSON["status"] as? String 
       print("result: \(resultValue)") 

       var isUserRegistered:Bool = false 
       if (resultValue == "Success") { isUserRegistered = true } 

       var messageToDisplay:String = parseJSON["message"] as! String! 
       if (!isUserRegistered) { 
        messageToDisplay = parseJSON["message"] as! String! 
       } 

       dispatch_async(dispatch_get_main_queue(), { 
        let myAlert = UIAlertController(title: "Alert", message: messageToDisplay, preferredStyle: UIAlertControllerStyle.Alert) 

        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) { action in 
         self.dismissViewControllerAnimated(true, completion: nil) 
        } 

        myAlert.addAction(okAction) 
        self.presentViewController(myAlert, animated: true, completion: nil) 

       }); 


      } 
     } catch let error as NSError { 
      print(error.localizedDescription) 
     } 
    } 
    task.resume() 

In meiner Datenbank habe ich die Tabelle 'Benutzer' und die Parameter-ID (auto_increment), E-Mail und Passwort. Ich benutze auch Port: 3306 für mySQL. Die Standard IP für MAMP ist 127.0.0.1, sollte ich auch die IP: 127.0.0.1 oder localhost: 3306 verwenden?

+0

Woher bekommen Sie diesen Fehler? Können Sie den Code und möglicherweise die Zeile anzeigen? –

+0

Nicht zusammenhängende Beobachtung: Wenn "userEmail" oder "userPassword" Optionals sind, müssen Sie sie auspacken. Und um sicher zu sein, sollten Sie wirklich Prozent-entkommen, z. http://StackOverflow.com/a/25154803/1271826, denn wenn das Passwort reservierte Zeichen enthält (z. B. '+' oder '&'), werden sie nicht richtig gesendet, es sei denn, Sie entziehen der Anfrage den Prozentwert. – Rob

Antwort

0

Sie verwenden eine Datei-URL mit einer NSURLSession Anfrage. Sie sollten eine https:// oder http:// Anfrage verwenden. NSURLSession dient zum Erstellen von Netzwerkanforderungen, nicht lokalen Dateisystemanforderungen. Wenn Sie dies auf dem iOS-Simulator ausführen, können Sie http://localhost/... verwenden. Aber wenn Sie es auf einem Gerät ausführen, müssen Sie ihm einen Hostnamen geben, der auf Ihren Computer mit MAMP aufgelöst wird.

Übrigens, wenn Sie http verwenden, müssen Sie möglicherweise einen NSExceptionDomains Eintrag hinzufügen, wie in https://stackoverflow.com/a/31254874/1271826 beschrieben.