使用php和mysql在android中登录


login in android with php and mysql

我正在尝试在我的android应用程序中创建登录和注册,但我面临的问题是,我可以在表中进行注册,但无法使用这些注册值登录。它向我显示了登录php脚本的"失败"消息。下面是我的"login.php"文件

 <?php
     if($_SERVER['REQUEST_METHOD']=='POST'){
     $username = $_POST['username'];
     $password = $_POST['password'];
     require_once('dbConnect.php');
     $sql = "SELECT * FROM register WHERE username = '$username' AND  password='$password'";
     $result = mysqli_query($con,$sql);
     $check = mysqli_fetch_array($result);
     if(isset($check){
    echo'sucess'
    }else{
    echo'failure'
    }
    }
    ?>

这是我的android Java文件"Login.Java"

package com.example.tejask.add4u;
import android.app.ProgressDialog;
        import android.content.Context;
        import android.content.Intent;
        import android.content.SharedPreferences;
        import android.os.AsyncTask;
        import android.os.Bundle;
        import android.support.annotation.Nullable;
        import android.support.v7.app.AppCompatActivity;
        import android.view.View;
        import android.widget.Button;
        import android.widget.EditText;
        import android.widget.TextView;
        import android.widget.Toast;
        import com.android.volley.AuthFailureError;
        import com.android.volley.DefaultRetryPolicy;
        import com.android.volley.Request;
        import com.android.volley.RequestQueue;
        import com.android.volley.Response;
        import com.android.volley.VolleyError;
        import com.android.volley.toolbox.StringRequest;
        import com.android.volley.toolbox.Volley;
        import java.util.HashMap;
        import java.util.Map;
/**
 * Created by tejas k on 26-04-2016.
 */

       public class Login extends AppCompatActivity implements View.OnClickListener {
        private Button btnLogin;
        private TextView txtRegister;
        private EditText editUsername,editPassword;
        public static final String USER_NAME = "username";
        public static final String KEY_PASSWORD="password";
        private static final String LOGIN_URL = "http://10.0.2.2/loginn.php";
        private String username;
        private String password;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        editUsername = (EditText) findViewById(R.id.editUsername);
        editPassword = (EditText) findViewById(R.id.editPassword);
        btnLogin= (Button) findViewById(R.id.btnLogin);
        txtRegister=(TextView)findViewById(R.id.txtRegister);
        txtRegister.setOnClickListener(this);
        btnLogin.setOnClickListener(this);
        }
        private void userLogin() {
        username = editUsername.getText().toString().trim();
        password = editPassword.getText().toString().trim();
        StringRequest stringRequest = new StringRequest(Request.Method.POST, LOGIN_URL,new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
        if(response.trim().equals("success")){
        openProfile();
        }
        else{                     Toast.makeText(Login.this,response,Toast.LENGTH_LONG).show();
        }
        }
        },new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
                           Toast.makeText(Login.this,error.toString(),Toast.LENGTH_LONG ).show();
        }
        }){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
        Map<String,String> map = new HashMap<String,String>();
        map.put(USER_NAME,username);
        map.put(KEY_PASSWORD,password);
        return map;
        }
        };
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
        }
        private void openProfile(){
        Intent intent = new Intent(this,ProfileActivity.class);
        intent.putExtra(USER_NAME, username);
        startActivity(intent);
        }
        @Override
        public void onClick(View v) {
        switch (v.getId()){
        case R.id.btnLogin:
        userLogin();
        break;
        case R.id.txtRegister:
        Intent register = new Intent(Login.this,Register.class);
        startActivity(register);
        break;
        }
        }
        }

在脚本中,if(isset($check){上缺少一个)

不过,为了安全起见,我认为您应该将其更改为MySQLi准备的语句。

您可以将php更改为以下内容:

if($_SERVER['REQUEST_METHOD']=='POST'){
    $username = $_POST['username'];
    $password = $_POST['password'];
    require_once('dbConnect.php');
    if($stmt = $con->prepare("SELECT * FROM register WHERE username = ? AND password = ? LIMIT 1")) {
        $stmt->bind_param('ss', $username, $password);
        if (!$stmt->execute()) {
            die('execute() failed: ' . htmlspecialchars($stmt->error));
        }
        $stmt->store_result();
        if ($stmt->num_rows == 1) {
            echo 'success';
        }
        else {
            echo 'failure';
        }
    }
    else {
        die('prepare() failed: ' . htmlspecialchars($con->error));
    }
    $stmt->close();
}

添加LIMIT 1意味着您将只返回1个结果,若用户不存在,则返回0个结果。