Здравствуйте, возникла проблема при парсинге данных с 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()
}
Решение
@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()
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости