Ошибка UserInfo={NSDebugDescription=Garbage at end.}

294
12 августа 2017, 04:10

Здравствуйте, возникла проблема при парсинге данных с php файла. Пишет вот такую ошибку:

Error Domain=NSCocoaErrorDomain Code=3840 "Garbage at end." UserInfo={NSDebugDescription=Garbage at end.}

Ответ сервера на запрос:

[{"id":"1","login":"79990000000","password":"123456"}]

php файл login:

include ('class.php');

$json = json_encode($logins); print_r($json);

php файл class:

function login() {
    if (isset($_POST['telephon'])) {
        $teluser    = $_POST['telephon'];
        $teluserlen = strlen($teluser);
        if (isset($_POST['userpas'])) {
            $userpas    = $_POST['userpas'];
            $userpaslen = strlen($userpas);
            if ($teluser != " " && $userpas != " ") {
                if ($teluserlen != 5 && $userpaslen != 5) {
                    $query     = "SELECT * FROM user WHERE login = $teluser";
                    $querymenu = $this->connect->query($query);
                    $storemenu = $this->connect->store_result();
                    $row       = $querymenu->fetch_assoc();
                    $log       = $row['login'];
                    $pas       = $row['password'];
                    if ($teluser === $log && $userpas === $pas) {
                        $_SESSION['login']    = $teluser;
                        $_SESSION['password'] = $pas;
                        $query     = "SELECT * FROM user WHERE login = $teluser";
                        $querymenu = $this->connect->query($query);
                        $storemenu = $this->connect->store_result();
                        while ($row = $querymenu->fetch_assoc()) {
                            $uio[] = $row;
                        }
                        return $uio;
                    } else {
                        $ar = ["error" => "Не верный логин или пароль"];
                        $js = json_decode($ar['error']);
                        print_r($js);
                    }
                } else {
                    $ar = ["error" => "Заполните поля"];
                    $js = json_decode($ar['error']);
                    print_r($js);
                }
            } else {
                $ar = ["error" => "Заполните поле поля"];
                $js = json_decode($ar['error']);
                print_r($js);
            }
        } else {
            $ar = ["error" => "Заполните поле пароль"];
            $js = json_decode($ar['error']);
            print_r($js);
        }
    } else {
        $ar = ['error' => 'Заполните поле логин'];
        $js = json_decode($ar['error']);
        print_r($js);
    }
}

Файл LoginViewController.swift:

@IBAction func LoginButton(_ sender: Any) {
    let loginTel = self.telephonTextField.text!
    let password = self.passwordTextField.text!

    if(loginTel.isEmpty || password.isEmpty) { return; }
    let url = URL(string: "http://localhost/shop/login.php")
    let request = NSMutableURLRequest(url: url!)
    request.httpMethod = "POST"
    let posting = "telephon=\(loginTel)&userpas=\(password)"
    request.httpBody = posting.data(using: String.Encoding.utf8)

    let session = URLSession.shared
    let task = session.dataTask(with: request as URLRequest) {
        data, response, error in
        if error != nil {
            print("error=\(error)")
            return
        }
        do {
            let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
            if let parseJSON = json {
                var resultValue = parseJSON["status"] as? String
                print("result: \(resultValue)")
                var userRegistered:Bool = false;
                if(resultValue == "Success") { userRegistered = true }
                let userID = parseJSON["id"] as? String
                if(userID != nil) {
                    let userTel = parseJSON["login"] as? String
                    let userPas = parseJSON["password"] as? String
                    print(userID)
                    UserDefaults.standard.set(userID, forKey: "ID")
                    UserDefaults.standard.set(userTel, forKey: "LOGIN")
                    UserDefaults.standard.set(userPas, forKey: "PASSWORD")
                    UserDefaults.standard.set(true, forKey: "userLoggedIn")
                    UserDefaults.standard.synchronize()
                    self.performSegue(withIdentifier: "Main", sender: self)
                }
            }
        }
        catch {
            print(error)
        }
    }
    task.resume()
}
Answer 1

Решение

   @IBAction func LoginButton(_ sender: Any) {
        let loginTel = self.telephonTextField.text!
        let password = self.passwordTextField.text!

    if(loginTel.isEmpty || password.isEmpty) { return; }
    let postString = "telephon=\(loginTel)&userpas=\(password)"
    let url = URL(string: "http://localhost/shop/login.php")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.httpBody = postString.data(using: .utf8)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard let data = data else {
            print(error)
            return
        }
        if error != nil {
            print("error=\(error)")
            return
        }
        do {
            if var json = try JSONSerialization.jsonObject(with: data) as? NSArray {
                   let userID = json.value(forKey: "id")
                   if(userID != nil) {
                        let userTel = json.value(forKey: "login")
                        let userPas = json.value(forKey: "password")
                        print(userID)
                        print(userTel)
                        print(userPas)
                        UserDefaults.standard.set(userID, forKey: "ID")
                        UserDefaults.standard.set(userTel, forKey: "LOGIN")
                        UserDefaults.standard.set(userPas, forKey: "PASSWORD")
                        UserDefaults.standard.set(true, forKey: "userLoggedIn")
                        UserDefaults.standard.synchronize()
                    }

                //print(json)
            }
        }
        catch {
            print(error)
        }
    }
    task.resume()
}
READ ALSO
c++ float дробная часть

c++ float дробная часть

Как вывести число с дробной частью, потому что сейчас при вводе 1 просто округляется до 3? И соответственно при вводе 2 выводит 6

380
C++ ListView убрать чекбокс из строки

C++ ListView убрать чекбокс из строки

Доброго времени суток

364
gstreamer + framebuffer и вывод его на QWidget

gstreamer + framebuffer и вывод его на QWidget

Вот сколько уже пытаюсь вытащить видео с камеры на QWidget, пробовал QMultimedia (1-2 fps), пробовал на прямую в QPixmap через gstreamer + appsink, 2-3 fps

296
C++: интерфейс без наследования

C++: интерфейс без наследования

Предположим, у меня есть абстрактный класс ("интерфейс") I1 и конкретный тип T:

326