2016-03-20 47 views
0

我想讓我的iOS應用程序登錄/註冊工作。除了Swift 2.0以外,我正在使用mySQL和PHP。由於某些原因,當我嘗試將HTTP POST發送到PHP腳本時,我一直在編寫錯誤:「數據無法讀取,因爲它的格式不正確。」Swift 2.0 HTML POST(錯誤格式)

我正在爲mySQL服務器使用MAMP。

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() 

在我的數據庫中我有表'用戶'和參數id(auto_increment),電子郵件和密碼。我正在使用端口:3306 for mySQL。 MAMP的標準IP是127.0.0.1,我應該使用IP:127.0.0.1還是localhost:3306?

+0

你從哪裏得到這個錯誤?你能顯示代碼和可能的行嗎? –

+0

無關的觀察:如果'userEmail'或'userPassword'是可選項,請確保將其解包。爲了安全起見,你真的應該百分比逃避它們,例如http://stackoverflow.com/a/25154803/1271826,因爲如果密碼包含任何保留字符(例如'+'或'&'),它們將不會得到正確發送,除非您百分之一轉義請求。 – Rob

回答

0

您正在使用帶有NSURLSession請求的文件URL。您應該使用https://http://請求。 NSURLSession用於發出網絡請求,而不是本地文件系統請求。所以,如果你在iOS模擬器上運行它,你可以使用http://localhost/...。但是當您在設備上運行它時,您必須提供一個主機名稱,以解析運行MAMP的機器。

順便說一下,如果您使用http,則可能需要添加NSExceptionDomains條目,如https://stackoverflow.com/a/31254874/1271826中所述。