簡體   English   中英

如何在Android中使用多種類型的用戶創建登錄(MySQL)

[英]How to create login (MySQL) with multiple types of user in Android

我想使用多種類型的用戶創建登錄活動。 此登錄與 MySQL 連接。 多項選擇是“審閱者”和“非審閱者”。 現在我使用 Spinner 和我從 string.xml 調用的值。 在“用戶”表中,有一些列,例如“用戶名”、“密碼”和“用戶類型”。 例如,用戶'peter'是一個“審閱者”,如果他使用的用戶名、密碼和用戶類型正確,他就可以登錄。 我怎么解決這個問題? 下面是我的代碼。

//登錄活動公共類MainActivity擴展AppCompatActivity{

private static final String KEY_USERNAME = "username";

private static final String LOGIN_URL = "http://lienawan.xyz/login.php";

private SharedPreferences.Editor loginPrefsEditor;

private EditText etEmail;
private EditText etPassword;
private CheckBox chkMe;
ArrayAdapter<CharSequence> adapter;

@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE); //will hide the title
    Objects.requireNonNull(getSupportActionBar()).hide(); // hide the title ba
    setContentView(R.layout.activity_main);

    etEmail = findViewById(R.id.etEmail);
    etPassword = findViewById(R.id.etPassword);
    chkMe = findViewById(R.id.chkMe);
    SharedPreferences loginPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE);
    loginPrefsEditor = loginPreferences.edit();
    boolean saveLogin = loginPreferences.getBoolean("saveLogin", false);
    if (saveLogin) {
        etEmail.setText(loginPreferences.getString("username", ""));
        etPassword.setText(loginPreferences.getString("password", ""));
        chkMe.setChecked(true);
    }
    Spinner spCategory = findViewById(R.id.spCategory);
    adapter = ArrayAdapter.createFromResource(this,R.array.usertype,android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spCategory.setAdapter(adapter);
    spCategory.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    Button btnLogin = findViewById(R.id.btnLogin);
    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            login();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(etEmail.getWindowToken(), 0);

            String username = etEmail.getText().toString();
            String password = etPassword.getText().toString();

            if (chkMe.isChecked()) {
                loginPrefsEditor.putBoolean("saveLogin", true);
                loginPrefsEditor.putString("username", username);
                loginPrefsEditor.putString("password", password);
                loginPrefsEditor.apply();
            } else {
                loginPrefsEditor.clear();
                loginPrefsEditor.commit();
            }
        }
    });
}

@Override
public void onBackPressed() {

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Exit");
    builder.setMessage("Do you want to exit?");
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            finish();

        }
    });
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            dialogInterface.cancel();
        }
    });
    builder.show();
}

private void login() {

    String username = etEmail.getText().toString().trim();
    String password = etPassword.getText().toString().trim();
    userLogin(username, password);
}

private void userLogin(final String username, final String password){
    class UserLoginClass extends AsyncTask<String,Void,String> {
        private ProgressDialog loading;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(MainActivity.this,"Login... Please Wait",null,true,true);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            loading.dismiss();
            if(s.equalsIgnoreCase("success")){
                Intent intent = new Intent(MainActivity.this,DashboardApp.class);
                intent.putExtra(KEY_USERNAME,username);
                startActivity(intent);
            }else{
                Toast.makeText(MainActivity.this,s, Toast.LENGTH_LONG).show();
            }
        }

        @Override
        protected String doInBackground(String... params) {
            HashMap<String,String> data = new HashMap<>();
            data.put("username",params[0]);
            data.put("password",params[1]);

            Connection ruc = new Connection();
            String result = ruc.sendPostRequest(LOGIN_URL,data);
            return result;
        }
    }
    UserLoginClass ulc = new UserLoginClass();
    ulc.execute(username, password);
}

}

<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
    $username = $_POST['username'];
    $password = $_POST['password'];
    $approver = $_POST['approver'];

    require_once('dbConnect.php');

    $sql = "select * from user where username='$username' and password='$password'";

    $check = mysqli_fetch_array(mysqli_query($con,$sql));

    if(isset($check)){
        echo "success";
    }else{
        echo "Invalid Username or Password";
    }

}else{
    echo "error try again";

要從微調器中獲取選定的值,您可以在onItemSelected編寫以下代碼:

 String item;//declare globally out of your all method
@Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        // On selecting a spinner item
        item = parent.getItemAtPosition(position).toString();

        // Showing selected spinner item
        Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
    }

現在,檢查item和其他值是否not null ,如下所示:

    private void login() {

        String username = etEmail.getText().toString().trim();
        String password = etPassword.getText().toString().trim();
        //checking if fields are not null 
       if (username.isEmpty() || password.isEmpty() || item.isEmpty()) {
       Toast.makeText(getActivity().getApplicationContext(), "Please enter name or pass or select one type!", Toast.LENGTH_SHORT).show();
        return;
        }else{
          userLogin(username, password,item);//passing value to volley
     }
   }

並在您的齊射請求中更改如下:

    private void userLogin(final String username, final String password,final String item){
...
 @Override
        protected String doInBackground(String... params) {
            HashMap<String,String> data = new HashMap<>();
            data.put("username",params[0]);
            data.put("password",params[1]);
            data.put("approver",params[2]);//adding item value
            ..
        }
    }
}

在您的 php 端,只需將您的query更改為:

 $sql = "select * from user where username='$username' and password='$password' and usertype='$approver'";

希望這對你有幫助!

注意:也從未使用純文本密碼並嘗試使用准備好的語句它是安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM