iT邦幫忙

0

swift php 登入判斷問題

最近在做學校專題,目前正在製作登入的頁面,目前遇到的問題是swift連接php 無論輸入正確或錯誤的帳號或密碼 都會接收到Account does not exists的回覆,想請問我的php或swift是哪裡出了問題了嗎? 先謝謝大家的回覆

<?php

	$servername = "XXX";
	$username = "XXX";
	$password = "XXX";
	$dbname = "XXX";


	$loginAccount = @$_POST["loginAccount"];
	$loginPass = @$_POST["loginPass"];
		
	$conn = new mysqli($servername, $username, $password, $dbname);

    if($conn->connect_error){
		die("Connection Failed:" . $conn->connect_error);
	}
	$sql = "SELECT * FROM member_list WHERE Account = '".$loginAccount."' " ;
	$result = $conn->query($sql);

	if ($result->num_rows > 0){

		while($row = $result->fetch_assoc()){
			if($row["Pass"] == $loginPass){
				echo "Login Success.";
			}        
			else{
				echo "Wrong Password or Account.";
			}
		}
	}
	else {
		echo "Account does not exists" ;
	}
	$conn->close();

?>

以下是swift

@IBAction func LoginButton(_ sender: Any) {
        let userAccount = userAccountTextField.text!
        let userPassword = userPasswordTextField.text!
                
        if (userAccount.isEmpty)==true   {
            let controller = UIAlertController(title: "", message: "請輸入帳號", preferredStyle: .alert)
               let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
               controller.addAction(okAction)
               present(controller, animated: true, completion: nil)
            }
        if (userPassword.isEmpty)==true   {
        let controller = UIAlertController(title: "", message: "請輸入密碼", preferredStyle: .alert)
           let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
           controller.addAction(okAction)
           present(controller, animated: true, completion: nil)
        }
            
        let myUrl = NSURL(string: "http://************.php")
        
        let request = NSMutableURLRequest(url : myUrl! as URL);
      
    request.httpMethod = "POST";
        
        let postString = "loginAccount\(userAccount)&loginPass=\(userPassword)"
        request.httpBody = postString.data(using: String.Encoding.utf8);
        
        let task = URLSession.shared.dataTask(with: request as URLRequest){
            data , response , error in
            
            if error != nil {
                print("error=\(String(describing: error))")
                return
            }
            print("response =\(postString) ")
            let responseString = NSString(data: data!,encoding: String.Encoding.utf8.rawValue)
            //print("loginAccount=\(postString)")
            print("responseString =\(responseString) ")
        }
        task.resume()
        
    }
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
海綿寶寶
iT邦大神 1 級 ‧ 2020-07-25 17:16:53
最佳解答

1.先確定 php 沒問題,方式如下

$loginAccount = @$_POST["loginAccount"];
$loginPass = @$_POST["loginPass"];
改成
$loginAccount = "realaccount";  //資料庫裡實際的 account
$loginPass = "realpassword";    //資料庫裡實際的 password
試試看
如果不成功
就想辦法把 $result = $conn->query($sql); 裡的  $sql 顯示出來看看

2.修改 Swift 這段試試看

let postString = "loginAccount\(userAccount)&loginPass=\(userPassword)"
改成
let postString = "loginAccount=\(userAccount)&loginPass=\(userPassword)"
如果不成功
也是想辦法顯示 postString 的內容看看
florarou iT邦新手 5 級 ‧ 2020-07-26 00:04:38 檢舉

我成功連上了!! 謝謝你的幫助!

恭喜問題解決

florarou iT邦新手 5 級 ‧ 2020-07-27 23:09:05 檢舉

你好,我現在遇到的問題是php回傳可以判斷帳號密碼是否正確,但是無論正確或不正確我的頁面都可以跳到下一頁,請問我要再加上什麼才能去判斷帳密對了才能進到下一頁呢?

以下是我php判斷回來的結果

responseString =Optional({"status":"error","message":"User is not found"}) 
responseString =Optional({"status":"Success","message":"User is registered"}) 
1

一般建議你先用postman串你的api能正常後。
再開始做api連接的問題。

先分清楚哪邊發生問題會比較好。免得一直再那邊除錯蟲。

florarou iT邦新手 5 級 ‧ 2020-07-26 00:10:06 檢舉

你好!謝謝你提供的方法!

0

浩瀚星空 他回答你的POSTMAN的部份就足以解決你的問題。
但我在意的是其他的地方,尤其是Swift。
(還有的可能是邏輯)

if (userAccount.isEmpty)==true

像上面這個,他回來就已經是 true 或 false的東西不用再讓他比對一次吧。

其次,Swift有很好用的guard機制,沒見你用上。這東西才條件未達成可以直接設else的結果。

然後,我看到了網址:『http:// 』
實在不太建議在測試階段就用http,想個辦法還是弄成https吧。不然上架時你會唉的不要不要的。

再然後……alert的動作你寫二次????
你的code中很大的問題是職責不明確,重複的程式碼沒有提取,多餘的邏輯

再最後一個,算是我的習慣也是建議。
通常如果@IBOutlet的元件能確定型態,就少用「Any」,像你的Button最好就指定為「UIButton」(畢竟Swift是強型別語言,定義好型別其實對Xcode也可以減輕些負擔。)

至於你php的問題…………

我就不提了。
因為通常php只要寫得不好我絕對相信不是學的人的錯。(所以不會是你的錯)

florarou iT邦新手 5 級 ‧ 2020-07-26 00:09:42 檢舉

謝謝你的指教!因為是自學的緣故,並且還沒有很熟悉此程式語言所以可能會發生程式碼太過多於混亂得情形,會慢慢學習並作更改的。
我原先是想將alert的帳密在同一個if做判斷 用(a|| b)的這種方式,但是不知道問題出在哪一直會冒出紅點點 我就把它拆開寫了QQ

我要發表回答

立即登入回答