2016-03-20 11 views
0

iOSアプリケーションでログイン/登録をしようとしています。 Swift 2.0のほかにmySQLとPHPを使用しています。何らかの理由でPHPスクリプトにHTTP POSTを送信しようとするとエラーが発生し続けます:"正しい形式でないため、データを読み取れませんでした。"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も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を使用する場合は、https://stackoverflow.com/a/31254874/1271826に記載されているようにNSExceptionDomainsのエントリを追加する必要があります。