Php POST无法正常工作
我在使用Swift 3.0的Xcode上遇到了一个问题,我想用php将信息存储在mysql数据库中。php代码已到达,但插入请求总是返回失败。我不知道,它在安卓上运行得很好。这是我的密码: 斯威夫特:Php POST无法正常工作,php,ios,mysql,swift,Php,Ios,Mysql,Swift,我在使用Swift 3.0的Xcode上遇到了一个问题,我想用php将信息存储在mysql数据库中。php代码已到达,但插入请求总是返回失败。我不知道,它在安卓上运行得很好。这是我的密码: 斯威夫特: @IBAction func SignUp(_ sender: UIButton) { var Name1: String = Name.text! var Prenom: String = PRENAME.text! var add: String = Addr.text
@IBAction func SignUp(_ sender: UIButton) {
var Name1: String = Name.text!
var Prenom: String = PRENAME.text!
var add: String = Addr.text!
var code:String = CP.text!
var mail:String = Email.text!
var pass:String = password.text!
var request = URLRequest(url: URL(string: "http://www.example.com/myscript.php")!)
request.httpMethod = "POST"
let postString = "name=\(Name1)&pname=\(Prenom)&add=\(add)&pc=\(code)&mail=\(mail)&pass=\(pass)"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print("error=\(error)")
return
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(response)")
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(responseString)")
}
task.resume()
}
和我的PHP代码:
<?php
$reponse = array();
$pseudo = $_POST['name'];
$score = $_POST['pname'];
$add = $_POST['add'];
$pc = $_POST['pc'];
$mail = $_POST['mail'];
$password = $_POST['pass'];
$mysqli = new MySQLi("host","root","pass","user");
$result = $mysqli->query("INSERT INTO compte (Name,Name2,Ad,code,maiil,pass) VALUES('$pseudo','$score','$add','$pc','$mail','$password')");
if ($mysqli->connect_error){
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
if($result){
$response["success"] = 1;
$response["message"] = "SUCCESS!";
echo json_encode($response);
}
else{
$response["success"] = 0;
$response["message"] = "FAILURE!";
echo json_encode($response);
}
不要忘记将此添加到info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
因此,您可以触发http或https请求
--确保您的任何参数都不包含&so value可以成功发送,或者用%26替换它。对不起,我的错误一切正常,通过执行sqli->错误,我发现了错误,我忘记了我不允许在数据库中复制邮件。所以非常感谢大家。祝你周末愉快 几点想法:
消息设置为$mysqli->error
,而不是只设置“failure!”
,以便查看失败的原因
die
。稍后,当您改进Swift代码以解析错误时,将所有服务器消息保留为JSON将非常有用“
字符,则SQL将失败。(您也容易受到SQL注入攻击。)httpBody
中包含的值的百分比。有关示例,请参见。或者使用类似Alamofire的东西来为您解决这个问题。但事实上:
- 如果这些值中的任何一个包含
字符,则可能会用空格替换+
- 如果这些值中的任何一个包含
字符,它将截断该字段&
- 如果这些值中的任何一个包含任何其他保留字符,则整个查询可能会失败
- 在Swift代码中,将请求的
标题设置为内容类型
,将请求的application/x-www-form-urlencoded
标题设置为接受
application/json
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.setValue("application/json", forHTTPHeaderField: "Accept")
- 在PHP代码中,在
json之前,将echo
标题设置为Content-Type
:application/json
虽然这是可选的,但如果您以后采用类似Alamofire的库来对这些标准头执行验证,这将使您的生活更加轻松header("Content-Type: application/json");
很抱歉,我的url是100%正确的,我正确地键入了Xcode,但出于保密目的,我使用myscript.php,而且,我在问题中告诉您,php代码已达到,但它总是返回失败。请参阅更新。我在info.plisty中这样做了。您的insert中有拼写错误,maiil
(姓名、姓名2、广告、代码、maiil、通行证)
应用程序没有告诉我问题是什么,问题是有时数据库中的插入工作正常,但有时不正常。所以我完全迷路了…老兄,我在帖子中告诉它,它在我的Android设备上运行良好,所以不会是输入错误。失败时,你可以查询,你没有返回错误代码,所以你就瞎了眼。我建议返回$mysqli->error
,而不是只返回“FAILURE!”
,这样您就可以看到它失败的原因了。另外,在执行查询之前,应该先对失败的连接进行测试。非常感谢!我已经忘记了我不会让我的数据库中的邮件重复,一切都很好,它的工作完美,谢谢!