iT邦幫忙

0

將連線的BSSID上傳PHP(MYSQL)比對後再回傳

各位大哥大姐們好

小弟最近在研究如何將手機連線到的BSSID抓下來,再上傳至資料庫中,與資料庫中既有的名單做比對,之後再回傳正確與否的結果給手機。
目前的作業系統是android studio,也寫出了獲取BSSID的程式碼,也建好了名單,但在如何上傳的問題,和比對的方式,糾結很久。
目前我獲取BSSID的語法是這樣(參考網路資料):


    TextView textView;

    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_getbssid);
        textView = findViewById(R.id.mybssid);
        WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
        WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
        textView.setText("" + wifiInfo.getBSSID());

    }
    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

由於小弟是程式語言的極度菜鳥,爬了許多文都沒有明確的建議或方向,在此跪求大大們給予小弟一盞明燈,該如何著手?
謝謝大家!

2 個回答

1
小魚
iT邦大師 1 級 ‧ 2019-11-12 08:54:43

我沒看到你所謂上傳的部分,
一般來說如果你要做這件事應該是PHP那邊要開API,
由PHP來比對,
手機端只要做 傳資料 跟 抓資料 的動作就好了.

看更多先前的回應...收起先前的回應...

我盡力盲code我網路上看到的東西和我知道的內容,但自己對於"把字串上傳"的流程邏輯仍不明瞭,還請不吝指教,謝謝!

    private static String URL = "https://wifine.000webhostapp.com/GetData.php", KEY = "uploaded_file";
    private String compare;

    private AsyncHttpClient httpClient;
    private Context context;
    private RequestParams params;

    protected void upload(Context context) {
        setContentView(R.layout.activity_comparison);
        this.context = context;
        httpClient = new AsyncHttpClient();
        params = new RequestParams();
        WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
        WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
        String compare = new String(String.valueOf(wifiInfo));
        upload(Comparison.this);
        Log.w("LOG", "file exist: " + StringExist());
    }

    public boolean StringExist(){
        if(compare.exists())
            return true;
        else
            return false;
    }
小魚 iT邦大師 1 級 ‧ 2019-11-12 09:54:46 檢舉

如果是用我的方法可能會有幾個階段

  1. APP傳送POST資料給PHP的API(就是所謂HttpRequest, 網頁爬蟲也是使用類似的方式, 只是分析資料的方式不一樣)
  2. PHP接收API傳來的參數 -> 驗證 -> 比對資料庫 -> 得到結果 -> 回傳結果(Json字串)
  3. APP接收回傳的資料,並做處理。

如果是初學者的話,
可以先學1跟3的部分,
或是你也可以使用手機的本地端資料庫(但就不能共用)來處理這件事.
如果1~3全部要做你可能還要學很多東西.
如果需要更進一步的內容,
可以要看你目前的進度以及遇到的問題來做回饋了.

[https://www.tutorialspoint.com/android/android_php_mysql.htm]
謝謝大大的幫忙及釐清!
我們目前試過許多網路上有的程式碼,樓下大大提供的程式碼可以達到前面三個階段的要求,但仍然沒有預期的結果。

https://ithelp.ithome.com.tw/upload/images/20191116/20122799qpObvLuQcn.jpg

https://ithelp.ithome.com.tw/upload/images/20191116/20122799GYAWCNVZ3o.jpg

小魚 iT邦大師 1 級 ‧ 2019-11-16 16:55:40 檢舉

所以預期的效果,
是少了什麼?
遇到什麼困難?

0
海綿寶寶
iT邦大神 1 級 ‧ 2019-11-12 10:19:03

這篇的 Example去改

你要做的事情是
1.將手機連線到的BSSID抓下來(一個字串)
2.再上傳至資料庫中
3.與資料庫中既有的名單做比對
4.之後再回傳正確與否的結果給手機。

上面那篇的 Example 做的事情是
1.手動輸入帳號與密碼(兩個字串)
2.再上傳至資料庫中
3.與資料庫中既有的名單做比對
4.之後再回傳正確與否的結果給手機。

是不是很像?

選我正解

謝謝您的幫助及回應。
我們照著上面您提供的程式碼跑過一遍,也用這個程式碼跑過我們自己的php和網頁的php,但不知為何結果不如預期,會有比對結果錯誤(結果永遠是login success)。
不知道問題是出在java還是php?

因為以下這段寫的

@Override
   protected void onPostExecute(String result){
      this.statusField.setText("Login Successful");
      this.roleField.setText(result);
   }

onPostExecute()顧名思義就是在「post之後執行」的程式
裡面結果永遠會顯示Login Successful

差別在 role Field 顯示的值
如果一切都順利,用 admin/admin 登入應該會顯示administrator
不然就是少了什麼步驟

我要發表回答

立即登入回答