は、ユーザーを登録するための私の迅速である:ここではスウィフト/ MySQLの/ PHPの必須パラメータの欠落 'エラー
//Information fields
@IBOutlet weak var user: UITextField!
@IBOutlet weak var pass: UITextField!
@IBOutlet weak var pass2: UITextField!
@IBOutlet weak var name: UITextField!
@IBOutlet weak var email: UITextField!
@IBOutlet weak var Message: UILabel!
//Register button
@IBAction func register(_ sender: Any) {
let Parameters = ["username": user.text, "password": pass.text, "email": email.text, "name": name.text]
let url = URL(string: "http://cgi.soic.indiana.edu/~lvweiss/prof4/register.php")!
let session = URLSession.shared
var request = URLRequest(url: url)
request.httpMethod = "POST"
do {
request.httpBody = try JSONSerialization.data(withJSONObject: Parameters, options: .prettyPrinted)
} catch let error {
print(error.localizedDescription)
Message.text = String(error.localizedDescription)
}
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
guard error == nil else {
return
}
guard let data = data else {
return
}
do {
if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
print(json)
}
} catch let error {
print(error.localizedDescription)
self.Message.text = String(error.localizedDescription)
}
})
task.resume()
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
はPHPである:ここでは
<?php
require_once 'DbOperation.php';
$response = array();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!verifyRequiredParams(array('username', 'password', 'email', 'name'))) {
//getting values
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$name = $_POST['name'];
//creating db operation object
$db = new DbOperation();
//adding user to database
$result = $db->createUser($username, $password, $email, $name);
//making the response accordingly
if ($result == USER_CREATED) {
$response['error'] = false;
$response['message'] = 'User created successfully';
} elseif ($result == USER_ALREADY_EXIST) {
$response['error'] = true;
$response['message'] = 'User already exist';
} elseif ($result == USER_NOT_CREATED) {
$response['error'] = true;
$response['message'] = 'Some error occurred';
}
} else {
$response['error'] = true;
$response['message'] = 'Required parameters are missing';
}
} else {
$response['error'] = true;
$response['message'] = 'Invalid request';
}
//function to validate the required parameter in request
function verifyRequiredParams($required_fields)
{
//Looping through all the parameters
foreach ($required_fields as $field) {
//if any requred parameter is missing
if (!isset($_POST[$field]) || strlen(trim($_POST[$field])) <= 0) {
//returning true;
return true;
}
}
return false;
}
echo json_encode($response);
?>
ですデータベースに投稿しようとしている情報: iOS登録フィールド:
し、登録ボタンを押すときに、エラーが、私はXcodeのから受け付けております:
2017年11月14日00:42:01.529344から0500 WeissProf4 [8754:662299] [MC]を遅延ロード NSBundle MobileCoreServices.framework
2017年11月14日00:42:01.530670から0500 WeissProf4 [8754:662299] [MC]ロードMobileCoreServices.framework
2017年11月14日00:42:01.550941から0500 WeissProf4 [ 8754:662299] [MC] systemgroup.com.apple.configurationprofのシステムグループコンテナilesパスは/Users/leviweiss/Library/Developer/CoreSimulator/Devices/C98EE410-1CA2-4B4B-9ED8-A4F112C629E2/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2017-11-14 00: 42:03.468653-0500 WeissProf4 [8754:662299] [MC]個人的な有効なユーザー設定からの読み取り。 2017-11-14 00:42:04.769899-0500 WeissProf4 [8754:662505]プライベートな効果的なユーザー設定。
[「メッセージ」:必須パラメーターが欠落している、「エラー」:1]
私は何が起こっているかわからないんだけど、私はPHPが正常にDBに接続している知っているし、投稿することができます必要な情報(郵便配達員でテスト済み)私はSwiftがPHPでの投稿をどう扱うかは誤りかもしれないと思っていますが、私はPHPの専門家ではありません。
それがポストマンで動作する場合、それは単に正しくのparamsを投稿しませんあなたのスウィフトコードです。あなたのPHPコードに 'var_dump($ _ POST)'を追加し、Swiftが実際に投稿するものを確認してください。 –
実際には、通常のwww-form( 'param1 = value1&param2 = value2&...'のようなデータをポストする)ではなく、本体にjson文字列を投稿しているようです。本文にjson文字列を投稿する場合は、文字列を抽出してPHPで手動で解析する必要があります。この質問の答えを確認してください:https://stackoverflow.com/questions/37400639/post-data-to-a-php-method-from-swift –
ありがとう、それを指摘して、素晴らしい作品! Swift 4のソリューションの編集を追加しました。 –