php - 我无法在 php 文件中从应用程序接收注册信息,无法将该信息插入 MSQL 数据库

标签 php ios swift

Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value.}

我收到此错误,但我不明白为什么没有值(value)。当我在 JSONSerialization 行之前打印出用户名的值时,这些值可用。任何帮助是极大的赞赏。

这是 DBoperations php 文件

class DbOperation {

private $connect;

//Constructor
function __construct() {
    require_once dirname(__FILE__). '/Constants.php';
    require_once dirname(__FILE__). '/DbConnect.php';

    //opening db connection
    $database = new DbConnect();
    $this->connect = $database->connect();
}

//This method is taking a username and password and verifying it from the database
public function userLogin($username, $pass) {
    $pass = md5($pass);
    $statement = $this->connect->prepare("SELECT id FROM users WHERE username = ? AND password = ?");
    $statement->bind_param("ss", $username, $password);
    $statement->execute();
    $statement->store_result();
    return $statement->num_rows > 0;
}

//After the successful login we will call this method to return the user data in an array
public function getUserByUsername($username) {
    $statement = $this->connect->prepare("SELECT id, username, email FROM users WHERE username = ?");
    $statement->bind_param("s", $username);
    $statement->execute();
    $statement->bind_result($id, $uname, $email);
    $statement->fetch();
    $user = array();
    $user['id'] = $id;
    $user['username'] = $uname;
    $user['email'] = $email;
    return $user;
}

//Function to create a new user
public function createUser($username, $password, $email, $name) {
    if (!$this->isUserExist($username, $email)) {
        $pass = md5($password);
        $statement = $this->connect->prepare("INSERT INTO users (username, password, email, name) VALUES (?, ?, ?, ?)");
        $statement->bind_param("sssss", $username, $pass, $email, $name);
        if ($statement->execute()) {
            return USER_CREATED;
        } else {
            return USER_NOT_CREATED;
        }
    } else {
        return USER_ALREADY_EXIST;
        }        
    }

private function isUserExist($username, $email) {
    $statement = $this->connect->prepare("SELECT id FROM users WHERE username = ? OR email = ?");
    $statement->bind_param("sss", $username, $email);
    $statement->execute();
    $statement->store_result();
    return $statement->num_rows > 0;
}

}

这是我的注册 PHP 文件

//importing required script
require_once './includes/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 database operation on object
    $database = new DbOperation();

    //adding user to database
    $result = $database->createUser($username, $password, $email, $name);

    //making the response accordingly
    if ($result == USER_CREATED) {
        $response['error'] = false;
        $response['message'] = 'User was created successfully';
    } elseif ($result == USER_ALREADY_EXIST) {
        $response['error'] = true;
        $response['message'] = 'This 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 paramter in request
function verifyRequiredParams($required_fields) {

//Getting the request parameters
$request_params = $_REQUEST;

//Looping through all the parameters
foreach ($required_fields as $field) {
    //if any required parameter is missing
    if (!isset($request_params[$field]) ||      strlen(trim($request_params[$field])) <= 0) {

        //return true
        return true;
    }
 }
  return false;
}


echo json_encode($response);

这是用户注册的快捷代码。

@objc func registerUser(button: UIButton) {

    let username = userName.text!
    let password = passWord.text!
    let email = emailField.text!
    let name = nameField.text!

    //Creating parameters for post request

    let parameters: Parameters = ["username": username, "password": password, "email": email, "name": name]

    guard let url = URL(string: "http://localhost/TestingiOSApp/v1/register.php") else { return }

    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else { return }
    request.httpBody = httpBody

    let session = URLSession.shared
    session.dataTask(with: request) { (data, response, error) in
        if let response = response {
            print(response)
        }

        if let data = data {
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: [])
                print(json)
            } catch {
                print(error)
            }
        }
    }.resume()

    self.view.endEditing(true)
}

最佳答案

//Function to create a new user
public function createUser($username, $password, $email, $name) {
    if (!$this->isUserExist($username, $email)) {
        $pass = md5($password);
        $statement = $this->connect->prepare("INSERT INTO users (username, password, email, name) VALUES (?, ?, ?, ?)");
        $statement->bind_param("ssss", $username, $pass, $email, $name);
        if ($statement->execute()) {
            return USER_CREATED;
        } else {
            return USER_NOT_CREATED;
        }
    } else {
        return USER_ALREADY_EXIST;
        }        
    }

private function isUserExist($username, $email) {
    $statement = $this->connect->prepare("SELECT id FROM users WHERE username = ? OR email = ?");
    $statement->bind_param("ss", $username, $email);
    $statement->execute();
    $statement->store_result();
    return $statement->num_rows > 0;
}

两个函数在bind_param中都有额外的“s”

关于php - 我无法在 php 文件中从应用程序接收注册信息,无法将该信息插入 MSQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49950550/

相关文章:

iOS:下载 xml/json 来改变游戏的运行方式?

javascript - 将数据从 JavaScript 传递到 Swift。 UserContentController 函数从未调用问题

php - astronautic-benchmark.php”病毒脚本

PHP - 脚本未被执行

php - 使用 PHP 在 Web 上进行实时更新?

ios - 如何将 UILabel 添加到 UIAlertController

ios - 如果将方法放入 viewDidLoad() 中,为什么应用程序会崩溃?

php - mssql_rows_affected 返回错误的行数

ios - 相机警告 - 增强现实

ios - iOS模拟器-如何测试较旧的(32位)设备?