Как вы отправляете данные из приложения IOS в таблицу MySQL с помощью Swift? - PullRequest
0 голосов
/ 11 февраля 2020

У нас с группой есть проект, над которым мы работаем, который включает создание приложения IOS из уже существующего приложения Android. Исходный код был передан нам, но мы должны создать приложение и связать приложение IOS со всем, что уже было связано и создано в Android. По сути, мы должны реплицировать приложение Android на IOS.

Как таковое, CodeIgniter был используемой платформой, и у нас уже есть веб-код, написанный для соединения в PHP. Это особенная часть кода, к которой я пытался подключиться:

function registerUser_post() {

        $emailAddress = $this->input->post('emailAddress');
        $mobileNumber = $this->input->post('mobileNumber');

            if(!empty($emailAddress)&&!empty($mobileNumber)){

                    // Set the response and exit
                    $this->db->select('*');
                    $this->db->from('studentregister');
                    $this->db->where('studregEmail', $emailAddress);
                    $query = $this->db->get();
                    $user = $query->row();

                   if($user->studregEmail) {
                    $userID = $user->studregId;
                    $this->db->where('studregEmail', $emailAddress);

                    if(empty($user->studregmobileNum)) {
                        $this->db->update('studentregister', array('studregmobileNum' => $mobileNumber));
                        $this->sendEmailtoUser_post($userID);
                    } else {
                        $data = array (
                        'studregEmail' => $emailAddress,   
                        'studregmobileNum' => $mobileNumber,
                        'studregId' => $userID,
                            );

                        $this->response([
                            'status' => 'Connected',
                            'message' => 'Account already exists',  
                            'data' => $data     
                            ], REST_Controller::HTTP_OK);

                    }
                    $data = array (
                        'studregEmail' => $emailAddress,   
                        'studregmobileNum' => $mobileNumber,
                        'studregId' => $userID,
                            );

                            $this->response([
                            'status' => 'Connected',
                            'message' => 'User login successful.',
                            'data'=> $data          
                            ], REST_Controller::HTTP_OK);
                } else {

                        $this->response([
                            'status' => 'Connected',
                            'message' => 'You have entered Wrong Email/Password. Please try again.',
                            'data' => 'null'
                            //return api key
                        ], REST_Controller::HTTP_OK);
                    }
            } else {

                    $this->response([
                        'status' => 'Connected',
                        'message' => 'You have not entered an Email/Password. Please try again.'
                        //return api key
                    ], REST_Controller::HTTP_OK);
                }
        }

Я пытался подключиться с помощью XCode Playground, прежде чем пытаться вставить его в наше приложение, и это был код, который я пытался использовать:

import UIKit

let session = URLSession.shared
let url = URL(string: "https://thomasianjourney.website/register/registerUser")!

var request = URLRequest(url: url)
request.httpMethod = "POST"

request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("Powered by Swift!", forHTTPHeaderField: "X-Powered-By")

let json = [
    "studregEmail": "insertemailhere",
    "studregmobileNum": "insertnumberhere"
]

let jsonData = try! JSONSerialization.data(withJSONObject: json, options: [])

let task = session.uploadTask(with: request, from: jsonData) { data, response, error in
    if let data = data, let dataString = String(data: data, encoding: .utf8) {
        print(dataString)
    }
}

task.resume()

Однако я не могу вставить данные, которые я помещаю в нашу базу данных. Я продолжаю сталкиваться с ошибкой: {"status": "Connected", "message": "Вы не ввели адрес электронной почты / пароль. Пожалуйста, попробуйте еще раз."}

I Я не совсем уверен, на что мне стоит обратить особое внимание, или если я на правильном пути в создании этой работы, но любая помощь будет принята с благодарностью. Есть шанс, что я тоже поступаю неправильно, поэтому, пожалуйста, дайте мне знать, если это так; Я хотел бы иметь возможность исправить то, что я делаю, и, наконец, все связать, чтобы я мог перейти к следующей части приложения. Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Так же, как Савка Марин предложила выше, я изменил и StudregEmail, и StudregmobileNum на emailAddress и mobileNumber. Код, который я поместил выше, все еще отказывается исполняться, но мне удалось найти тот, который работает в реальном проекте XCode (а не в Playground). Если кому-то понадобится какое-либо основание для этого в будущем, я оставлю исходный код ниже:

let url = NSURL(string: "https://thomasianjourney.website/register/registerUser") // locahost MAMP - change to point to your database server

    var request = URLRequest(url: url! as URL)
            request.httpMethod = "POST"

            var dataString = ""

    // the POST string has entries separated by &

            dataString = dataString + "&emailAddress=\(emailAddress.text!)" // add items as name and value
            dataString = dataString + "&mobileNumber=\(mobileNum.text!)"

    // convert the post string to utf8 format

            let dataD = dataString.data(using: .utf8) // convert to utf8 string

            do
            {

    // the upload task, uploadJob, is defined here

                let uploadJob = URLSession.shared.uploadTask(with: request, from: dataD)
                {
                    data, response, error in

                    if error != nil {

    // display an alert if there is an error inside the DispatchQueue.main.async

                        DispatchQueue.main.async
                        {
                                let alert = UIAlertController(title: "Upload Didn't Work?", message: "Looks like the connection to the server didn't work.  Do you have Internet access?", preferredStyle: .alert)
                                alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))
                                self.present(alert, animated: true, completion: nil)
                        }
                    }
                    else
                    {
                        if let unwrappedData = data {

                            let returnedData = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue) // Response from web server hosting the database

                            if returnedData == "1" // insert into database worked
                            {

    // display an alert if no error and database insert worked (return = 1) inside the DispatchQueue.main.async

                                DispatchQueue.main.async
                                {
                                    let alert = UIAlertController(title: "Upload OK?", message: "Looks like the upload and insert into the database worked.", preferredStyle: .alert)
                                    alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))
                                    self.present(alert, animated: true, completion: nil)
                                }
                            }
                            else
                            {
    // display an alert if an error and database insert didn't worked (return != 1) inside the DispatchQueue.main.async

                                DispatchQueue.main.async
                                {

                                let alert = UIAlertController(title: "Upload Didn't Work", message: "Looks like the insert into the database did not work.", preferredStyle: .alert)
                                alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))
                                self.present(alert, animated: true, completion: nil)
                                }
                            }
                        }
                    }
                }
                uploadJob.resume()

Сообщения об ошибках / предупреждения все еще находятся в стадии разработки, но сам общий код работает.

0 голосов
/ 11 февраля 2020

Я считаю, что вы должны заменить studregEmail на emailAddress и studregmobileNum на mobileNumber, или наоборот, клавиши должны быть одинаковыми с обеих сторон. Код на стороне сервера ищет значение для ключа emailAddress, но оно пустое, поэтому оно не передает ваш первый оператор if и не возвращает сообщение об ошибке пустого поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...