i trying json connection sql. php file working fine. writes , retrieves when test directly.
but on xcode can write. when try json object come nil. error goes bellow. idea be?
nsurlsession error - nil nsurlsession data - <0a0a3264 36663234 37323334 37383135 65313633 33653764 30383233 34626231 34346262 61653830 3637436f 6e6e6563 74656420 746f2064 61746162 6173656c 6f63616c 686f7374 6c6f6361 6c686f73 74537769 66744170 707b2273 74617475 73223a22 34303022 2c226d65 73736167 65223a22 506c6561 73652063 686f6f73 65206469 66666572 656e7420 656d6169 6c206164 64726573 73227d>
json dictionary - nil
json error - error domain=nscocoaerrordomain code=3840 "the operation couldn’t completed. (cocoa error 3840.)" (json text did not start array or object , option allow fragments not set.) userinfo=0x7f8e88a44d40 {nsdebugdescription=json text did not start array or object , option allow fragments not set.}
import uikit class signupviewcontroller: uiviewcontroller { @iboutlet weak var useremailaddresstextfield: uitextfield! @iboutlet weak var userpasswordtextfield: uitextfield! @iboutlet weak var userrepeatpasswordtextfield: uitextfield! @iboutlet weak var userfirstnametextfield: uitextfield! @iboutlet weak var userlastnametextfield: uitextfield! override func viewdidload() { super.viewdidload() // additional setup after loading view. } override func didreceivememorywarning() { super.didreceivememorywarning() // dispose of resources can recreated. } @ibaction func cancelbuttontapped(sender: anyobject) { self.dismissviewcontrolleranimated(true, completion: nil) } @ibaction func signupbuttontapped(sender: anyobject) { let useremail = useremailaddresstextfield.text let userpassword = userpasswordtextfield.text let userpasswordrepeat = userrepeatpasswordtextfield.text let userfirstname = userfirstnametextfield.text let userlastname = userlastnametextfield.text // if (userpassword != userpasswordrepeat){ // // self.displayalertmessage("password not match") // // } // // if (useremail.isempty || userpassword.isempty || userfirstname.isempty || userlastname.isempty){ // // self.displayalertmessage("all fields required") // // } let myurl = nsurl(string: "http://localhost/swiftappandmysql/scripts/registeruser.php") let request = nsmutableurlrequest(url: myurl!) //let poststring = "useremail=\(useremail)&userpassword=\(userpassword)&userfirstname=\(userfirstname)&userlastname=\(userlastname)" let poststring = "useremail=8&userpassword=90&userfirstname=890&userlastname=809" request.httpmethod = "post" request.httpbody = poststring.datausingencoding(nsutf8stringencoding) nsurlsession.sharedsession().datataskwithrequest(request, completionhandler: { (data: nsdata!, response: nsurlresponse!, error: nserror!) -> void in println("nsurlsession error - \(error)") println("nsurlsession data - \(data)") dispatch_async(dispatch_get_main_queue()) { if error != nil { self.displayalertmessage(error.localizeddescription) return } var err:nserror? var json = nsjsonserialization.jsonobjectwithdata(data, options: nsjsonreadingoptions.mutablecontainers, error: &err) as? nsdictionary println("json dictionary - \(json)") println("json error - \(err!)") println("json data - \(data)") if let parsejson = json{ var userid = parsejson["userid"] as? string println(userid) if (userid != nil){ let alertcontroller = uialertcontroller( title: "bam!", message: "registration sucessful", preferredstyle: uialertcontrollerstyle.alert) let okaction = uialertaction( title: "ok", style: uialertactionstyle.default){ (action) in self.dismissviewcontrolleranimated(true, completion: nil) } alertcontroller.addaction(okaction) self.presentviewcontroller(alertcontroller, animated: true, completion: nil) } else{ let errormessage = parsejson["message"] as? string if (errormessage != nil){ self.displayalertmessage(errormessage!) } } } } }).resume() } func displayalertmessage (message: string){ let alertcontroller = uialertcontroller(title: "bam!", message: message, preferredstyle: uialertcontrollerstyle.alert) let okaction = uialertaction(title: "ok", style: uialertactionstyle.default, handler: nil) alertcontroller.addaction(okaction) self.presentviewcontroller(alertcontroller, animated: true, completion: nil) } } php script using
<?php //use mysqldao; require ("../db/mysqldao.php"); $config = parse_ini_file('../db/swiftapp.ini'); $returnvalue = array(); if ( empty($_request["useremail"]) || empty($_request["userpassword"]) || empty($_request["userfirstname"]) || empty($_request["userlastname"])) { $returnvalue["status"] = "400"; $returnvalue["message"] = "missing required information"; echo json_encode($returnvalue); return; } $useremail = htmlentities($_request["useremail"]); $userpassword = htmlentities($_request["userpassword"]); $userfirstname = htmlentities($_request["userfirstname"]); $userlastname = htmlentities($_request["userlastname"]); $salt = openssl_random_pseudo_bytes(16); $secure_password = sha1($userpassword . $salt); //http://localhost/swiftappandmysql/scripts/registeruser.php?useremail=email&userpassword=123456&userfirstname=gui&userlastname=maia echo $secure_password; //connect using .ini $dbhost = trim($config["dbhost"]); $dbuser = trim($config["dbuser"]); $dbpassword = trim($config["dbpassword"]); $dbname = trim($config["dbname"]); $dao = new mysqldao($dbhost, $dbuser, $dbpassword, $dbname); $dao->openconnection(); echo $dao->dbhost; echo $dao->dbname; $userdetails = $dao->getuserdetails($useremail); if(!empty($userdetails)) { $returnvalue["status"] = "400"; $returnvalue["message"] = "please choose different email address"; echo json_encode($returnvalue); return; } $result = $dao->registeruser($useremail, $userfirstname, $userlastname, $secure_password, $salt); if ($result) { $userdetails = $dao->getuserdetails($useremail); $returnvalue["status"] = "200"; $returnvalue["message"] = "sucessfully registered new user"; $returnvalue["userid"] = $userdetails["user_id"]; $returnvalue["userfirstname"] = $userdetails["first_name"]; $returnvalue["userlastname"] = $userdetails["last_name"]; $returnvalue["useremail"] = $userdetails["email"]; } else { $returnvalue["status"] = "400"; $returnvalue["message"] = "could not register user provided information"; } $dao->closeconnection(); echo json_encode($returnvalue); ?>
the data in string format was:
2d6f2472347815e1633e7d08234bb144bbae8067connected databaselocalhostlocalhostswiftapp{"status":"400","message":"please choose different email address"} which not valid json structure. have part surrounded {} (and including {}) before can cast json dictionary.
Comments
Post a Comment