2017-01-10 6 views
0

私はxcode 8 swift 3で投稿リクエストのプロセスを理解しようとしています。xcodeで文字列型としてテキストフィールド値を渡す方法8 swift 3?

"paramString"に値を追加して手動で投稿することができました。

私の質問は、入力データがテキストフィールドから来ている場合、データを渡す方法は?

私はそれをusernameTxtpasswordTxtを命名。どのようにこれらの値をPHPのMySQLに以下のコードを使用して渡すには?

"paramString"の場合、ビューコントローラにWebサービスへの複数のテキストフィールド入力があるとしますか?

これまで

import UIKit 
class ViewController: UIViewController { 

    @IBOutlet var usernameTxt: UITextField! 
    @IBOutlet var passwordTxt: UITextField! 
    @IBOutlet var loginButton: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
    @IBAction func sendData(_ sender: Any) { 
     data_request("http://localhost/send.php") 
    } 
    func data_request(_ url:String) 
    { 
     let name = usernameTxt.text 
     let pass = passwordTxt.text 

     let url:NSURL  = NSURL(string: url)! 
     let session   = URLSession.shared 

     let request   = NSMutableURLRequest(url: url as URL) 
     request.httpMethod = "POST" 

     let paramString  = "data=" + name! 
     // let paramString = "data=" + name! + "data2=" + pass! //this line does not work 
     request.httpBody = paramString.data(using: String.Encoding.utf8) 

     let task = session.dataTask(with: request as URLRequest){ 
      (data, response, error) in 

      guard let _:NSData = data as NSData?, let _:URLResponse = response, error == nil else { 
       print("Error") 
       return 
      } 

      if let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue){ 
       print(dataString) 
      } 
     } 
     task.resume() 
    } 
} 
+0

。 。私はまだコンセプトと流れを理解しようとしています。 。一方で、おそらく誰かがそのusernameTxt、passwordTxt値を "let StringParam"に割り当てる方法についての素早い答えを示すことができます。上記のコードは、最終的なタッチが必要です。 – MadProgrammer

+0

おかげで、:)のためのAPIのrefernceを見てしたい場合があります – AlotJai

+0

私はこのように1つの文字列変数を渡すことができるように思えます。名前= usernameTxt.text、paramString = "data =" + name! 。私はどのように両方の値を渡すか分からない。 – AlotJai

答えて

0

usernameTxt.textpasswordTxt.text

+0

私の上記のコードを答えて共有したり更新したりできますか?私はそれらの価値をどこに、どのように置くべきかは知らない。私はこのイオス開発の初心者です。まだ流れと概念を理解するのに苦労しています。ありがとう。 – AlotJai

+0

これはそうですか? let paramString = "data =" + usernameTxt.text! – AlotJai

-1
 You can try this code for api request with parameter 
      let user_id = 1 
      let name = 'test' 
     let post:NSString = "id=\(user_id)&name=\(name)" as NSString 
        let url:URL = URL(string:"ADD YOUR URL HERE")! 
        let postData:Data = post.data(using: String.Encoding.ascii.rawValue)! 
        let postLength:NSString = String(postData.count) as NSString 

        let request:NSMutableURLRequest = NSMutableURLRequest(url: url) 
        request.httpMethod = "POST" 
        request.httpBody = postData 
        request.setValue(postLength as String, forHTTPHeaderField: "Content-Length") 
        request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
        request.setValue("application/json", forHTTPHeaderField: "Accept") 

        var reponseError: NSError? 
        var response: URLResponse? 

        var urlData: Data? 
        do { 
         urlData = try NSURLConnection.sendSynchronousRequest(request as URLRequest, returning:&response) 
        } catch let error as NSError { 
         reponseError = error 
         urlData = nil 
        } 

        if (urlData != nil) { 
         let res = response as! HTTPURLResponse!; 

         if ((res?.statusCode)! >= 200 && (res?.statusCode)! < 300) 
         {} 

    } 
+0

非同期ですか? – AlotJai

+0

はい、それは非同期リクエストです –

+0

あなたの提案は1つの変数のみを使用しています。 2つの変数入力の答えを更新できますか?ありがとう。 。 – AlotJai

0

以下のようにPOST要求のパラメータ文字列をフォーマット

key1=value&key2=value2 

に作成するための便利な方法でなければならない私のコード文字列は文字列補間です

let paramString = "data=\(name)&data2=\(pass)" 

それはtextプロパティが空でないnilとされないかどうかを確認するために良いプログラミングの習慣です。さらにSwift 3ではネイティブ構造体URLURLRequestを使用します。

ところでスイフトはPHPではありません。命名規則はラクダケースを使用することです。

... 
@IBAction func sendData(_ sender: AnyObject) { 
    dataRequest("http://localhost/send.php") 
} 

func dataRequest(_ url:String) 
{ 
    guard let name = usernameTxt.text, !name.isEmpty, 
     let pass = passwordTxt.text, !pass.isEmpty else { return } 

    let url = URL(string: url)! 
    let session = URLSession.shared 

    var request = URLRequest(url: url) 
    request.httpMethod = "POST" 

    let paramString = "data=\(name)&data2=\(pass)" 
    request.httpBody = paramString.data(using: .utf8) 

    let task = session.dataTask(with: request) { (data, response, error) in 

     guard error == nil else { 
      print("Error: ", error!) 
      return 
     } 

     if let dataString = String(data: data!, encoding: .utf8) { 
      print(dataString) 
     } 
    } 
    task.resume() 
} 
あなたは返信用[ `UITextField`](https://developer.apple.com/reference/uikit/uitextfield)
関連する問題