[Swift3.0] iOSアプリからPHPにPOSTでデータを送信する

By | 2016年10月5日

SwiftでPOSTメソッドを使ったHTTPリクエストを送信する方法です。

PHPでデータベースに接続する処理を書けば、Swiftからは直接接続することが難しいMySQLなどのデータベースへ書き込みを行うこともできます。

データをやり取りするサンプル

テキストフィールドの入力をPOSTで送信するサンプルプログラムです。

POSTを送信するSwiftのコード

データを送信するSwift側のコードです。

import UIKit

class ViewController : UIViewController, UITextFieldDelegate {
    
    let statusBarHeight = UIApplication.shared.statusBarFrame.height
    var textField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.view.backgroundColor = UIColor.lightGray
        
        // テキストフィールド
        textField = UITextField(frame: CGRect(x: 0, y: statusBarHeight, width: self.view.frame.width, height: 40))
        textField.delegate = self
        textField.placeholder = "name"
        textField.backgroundColor = UIColor.white
        textField.returnKeyType = .done //キーボードの「改行」を「完了」にする
        textField.clearButtonMode = .always
        self.view.addSubview(textField)
        
        // 送信ボタン
        let submitButton = UIButton(type: .system)
        submitButton.setTitle("Submit", for: .normal)
        submitButton.addTarget(self, action: #selector(self.submit), for: .touchUpInside)
        submitButton.sizeToFit()
        submitButton.center = self.view.center
        self.view.addSubview(submitButton)
    }
    
    // POST送信
    func submit() {
        
        let postString = "name=\(textField.text!)"
        
        var request = URLRequest(url: URL(string: "http://localhost/Experiments/Swift_MySQL/submit.php")!)
        request.httpMethod = "POST"
        request.httpBody = postString.data(using: .utf8)
        
        let task = URLSession.shared.dataTask(with: request, completionHandler: {
            (data, response, error) in
            
            if error != nil {
                print(error)
                return
            }
            
            print("response: \(response!)")
            
            let phpOutput = String(data: data!, encoding: .utf8)!
            print("php output: \(phpOutput)")
        })
        task.resume()
    }
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
}

テキストフィールドに入力した文字列が「name」というキーの値として送信されます。同時に送信後のレスポンスをログに表示しています。

データを受け取るPHPのコード

POSTで送信されたデータを表示する受信側のPHPコードです。送信されたデータを $_POST['name'] として受け取ります。

if (isset($_POST['name'])) {
  $name = $_POST['name'];
  echo "Successfully submitted: " . $name;
} else {
  echo "Failed";
  exit;
}

サンプル実行結果

サンプルプログラムを実行すると、テキストフィールドとボタンが配置された画面が表示されます。

SwiftからPOST送信するサンプルアプリ

「test」と入力して Submit を押すと、レスポンスとPHPの出力がログに表示されます。

POSTで送信した結果

「Successfully submitted: test」と送信が成功して入力したテキストが表示されていることが確認できます。

[Swift3.0] iOSアプリからPHPにPOSTでデータを送信する」への1件のフィードバック

  1. らすかる

    完全にSwift3.0で書いてあるのはまだまだ少ないからこういう記事は本当にありがたいなあ。
    ブログのレイアウトも見やすくて非常にわかりやすい。更新楽しみにしてます。

    返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です