php - 数据没有被发送到数据库,因为它无法读取

标签 php ios mysql json swift3

我正在做一个项目,我需要将一些数据发送到远程数据库。所以我正在使用 Swift 3.1 开发一个 iOS 应用程序,当我尝试将数据发送到数据库时,它说,

无法读取数据,因为它的格式不正确。

还有一个错误;

Error Domain=NSCocoaErrorDomain Code=3840 “无值。” UserInfo={NSDebugDescription=无值。}

这是我的快速代码:

let urlOfSMARTCF = URL(string: "http://192.168.1.99/insertData.php")
let request = NSMutableURLRequest(url: urlOfSMARTCF! as URL)
request.httpMethod="POST"
request.addValue("application/json", forHTTPHeaderField: "Accept")
for contact in contactsCaptuure
{
    let userMobileNumber = DBManager.shared.retriveRegisteredNumberOfMobile()
    let postParameters = "{\"usermobilenum\":\(String(describing: userMobileNumber!)),\"contactnum\":\(contact.phoneNumber!)}";
    request.httpBody = postParameters.data(using: String.Encoding.utf8)
    let task = URLSession.shared.dataTask(with: request as URLRequest)
    {
        data, response, error in

        if error != nil
        {
            print("error is \(String(describing: error))")
            return;
        }
        do
        {
            let myJSON = try  JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
            if let parseJSON = myJSON
            {
                var msg : String!
                msg = parseJSON["message"] as! String?
                print(msg)

            }
        }
        catch
        {
            print(error.localizedDescription)
            print(error)
        }

    }
    print("Done")
    task.resume()
}

这是我在远程数据库中的 PHP:

<?php

if($_SERVER["REQUEST_METHOD"]=="POST")
{
require 'connectDB.php';
$userPhone = $_POST["usermobilenum"];
$contactNum = $_POST["contactnum"];
$query = "SELECT * FROM user WHERE UserMobNum='".$userPhone."'"; // Usermobile is registered.SIP exists.
if($results= mysqli_query($connect,$query))
{
    if(mysqli_num_rows($results)>0)
    {
        $i=0;
        while($rows=mysqli_fetch_assoc($results))
        {
            $sip[$i] = $rows["SIP"];
            $i++;
        }
        $queryToAddData = "INSERT INTO user (UserMobNum,SIP,Phone) VALUES ('".$userPhone."','".$sip[0]."','".$contactNum."')";
        if(mysqli_query($connect,$queryToAddData))
        {
            //Return success message to the app
                            echo "Success"
        }
        else
        {
            die(mysqli_error($connect));
        }
    }
    else
    {
        $availableSIP=false;
        while($availableSIP==false) // Assign a random value until it's being a valid one.
        {
            $sip[0]=rand(1,9999);
            $queryToCheck = "SELECT * FROM user WHERE SIP='".$sip[0]."'";
            if($results= mysqli_query($connect,$queryToCheck))
            {
                if(mysqli_num_rows($results)==0)
                {
                    $availableSIP=true;
                }
            }
        }
        $queryToAddData = "INSERT INTO user (UserMobNum,SIP,Phone) VALUES ('".$userPhone."','".$sip[0]."','".$contactNum."')";
        if(mysqli_query($connect,$queryToAddData))
        {
            //Return success message to the app
                            echo "Success"
        }
        else
        {
            die(mysqli_error($connect));
        }
    }
}
else
{
    echo "First Level Failure!";
    die(mysqli_error($connect));
}
mysqli_close($connect);
}
else
{
    echo "Failed in POST Method"
}

?>

我做了什么

浏览了所有堆栈溢出和其他网站建议,但没有成功。我什至使用 json 验证器检查了我的 jSon 字符串,它通过了。这就是我的 jSon 字符串的样子。

{"usermobilenum":1234567890,"contactnum":9345}

但是经过一些搜索我发现这是因为远程数据库 PHP 发送了这个错误信息。所以我检查了 PHP 中的每个变量,但没有发现任何问题。这也不是 PHP 的问题,因为当我通过我的 android 应用程序连接时,我使用的是那些确切的 php 文件。那很好用。但在 iOS 中它会生成该错误。有人可以帮帮我吗?

更新

这是 insertdataTest.php 文件:

<?php

if($_SERVER["REQUEST_METHOD"]=="POST")
{
    $userPhone = $_POST["usermobilenum"];
    echo $userPhone;
    mysqli_close($connect);
}
else
{
    echo json_encode("Failed in POST Method");
}

?>

最佳答案

{"usermobilenum":1234567890,"contactnum": 9345} - 这被视为字符串。这不是一个有效的 JSON。

更新后的代码:

let urlOfSMARTCF = URL(string: "http://192.168.1.99/insertData.php")
let request = NSMutableURLRequest(url: urlOfSMARTCF! as URL)
request.httpMethod="POST"
request.addValue("application/json", forHTTPHeaderField: "Accept")
for contact in contactsCaptuure {
let userMobileNumber = DBManager.shared.retriveRegisteredNumberOfMobile()

let postParameters = NSMutableDictionary()
postParameters["usermobilenum"] = userMobileNumber
postParameters["contactnum"] = contact.phoneNumber!

let jsonData = try? JSONSerialization.data(withJSONObject: postParameters, options: .prettyPrinted)
request.httpBody = jsonData

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

    if error != nil {
        print("error is \(String(describing: error))")
        return;
    }
    do {
        let myJSON = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? [String: Any]

        if let parseJSON: NSMutableDictionary = NSMutableDictionary(dictionary: myJSON as! NSMutableDictionary){

                let msg = parseJSON["message"] as! String
                print(msg)

            }
    }
    catch {
        print(error.localizedDescription)
        print(error)
    }

}
print("Done")
task.resume()
}

关于php - 数据没有被发送到数据库,因为它无法读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46203126/

相关文章:

ios - 命令因信号 : Segmentation fault: 11 while archiving 而失败

mysql - Select 语句连接多列

ios - 在 ios 7 中使用 UIScrollView 在 iOS 中创建水平滚动 UIButton

ios - Swift:创建后如何访问临时目录(NSTemporaryDirectory())中的CSV文件?

php - 如何同步mysql数据库请求?

php - mysql order by max匹配字段值

php - mysql 获取另一个表中email对应的数据

PHP邮箱验证函数

php - 增加数据库中字段的最快方法

php - CodeIgniter 在数据库查询中插入撇号