使用 MySQL 的 Android 登录页面上的用户名和密码错误

Posted

技术标签:

【中文标题】使用 MySQL 的 Android 登录页面上的用户名和密码错误【英文标题】:Error username and password on Android login page with MySQL 【发布时间】:2018-12-22 10:59:15 【问题描述】:

我用 mysql 和 xampp 做了一个简单的登录页面。问题是登录页面将始终有效并将我重定向到其他活动,尽管我输入了错误的用户名或密码。我不确定查询是否错误或代码,因为我已经对其进行了三次检查,但没有找到真正的解决方案。我使用的是我的安卓手机而不是模拟器。 LOGIN_URL "192.168.43.231" 是我的笔记本电脑的 IP,因为我目前正在使用手机的数据作为热点。谢谢

public class LoginActivity extends AppCompatActivity 

private EditText usernameET, passwordET;
private Button login;
private static String LOGIN_URL = "http://192.168.43.231/Login/login.php";
public static  String KEY_USERNAME = "username";
public static  String KEY_PASSWORD = "password";

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    usernameET = findViewById(R.id.usernameET);
    passwordET = findViewById(R.id.passwordET);
    login = findViewById(R.id.loginBTN);

    login.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
            final String username = usernameET.getText().toString().trim();
            final String password = passwordET.getText().toString().trim();

            if (username.isEmpty() || password.isEmpty()) 
                Toast.makeText(LoginActivity.this, "Enter Valid Username & Password", Toast.LENGTH_SHORT).show();
             else 

                StringRequest stringRequest = new StringRequest(Request.Method.POST, LOGIN_URL,
                        new Response.Listener<String>() 
                            @Override
                            public void onResponse(String response) 
                                try 
                                    JSONObject jsonObject = new JSONObject(response);
                                    boolean responseStatus = jsonObject.getBoolean("success");
                                    if (responseStatus) 
                                        Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                                        LoginActivity.this.startActivity(intent);
                                     else 
                                        Toast.makeText(LoginActivity.this, "Invalid Username or Password", Toast.LENGTH_SHORT).show();

                                    
                                 catch (JSONException e) 
                                    e.printStackTrace();
                                    Toast.makeText(LoginActivity.this,"Error" + e.toString(), Toast.LENGTH_LONG).show();
                                
                            
                        ,
                        new Response.ErrorListener() 
                            @Override
                            public void onErrorResponse(VolleyError error) 
                                Toast.makeText(LoginActivity.this, error.toString(), Toast.LENGTH_LONG).show();
                            
                        ) 
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError 
                        Map<String, String> params = new HashMap<String, String>();
                        params.put(KEY_USERNAME, username);
                        params.put(KEY_PASSWORD, password);

                        return params;
                    
                ;
                RequestQueue requestQueue =Volley.newRequestQueue(LoginActivity.this);
                requestQueue.add(stringRequest);
            
        
    );


PHP 代码

<?php
include 'db.php';
if($_SERVER['REQUEST_METHOD']=='POST')
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "select * from blast_user where username = '$username' and password =  '$password' ";

$check = mysqli_query($con,$sql);
$response = array();
$response["success"]=false;

if($check)
$response["success"] = true;

else
$response["success"]=false;


echo json_encode($response);


?>

【问题讨论】:

您使用的是纯文本密码!不要这样做!使用散列机制,例如password_* 函数 只要成功执行,即使没有返回任何行,查询也会返回true。执行查询后改为检查行数。 【参考方案1】:

if($check) 替换为if(mysqli_num_rows($check) &gt; 0)

【讨论】:

以上是关于使用 MySQL 的 Android 登录页面上的用户名和密码错误的主要内容,如果未能解决你的问题,请参考以下文章

调试ios android 手机 上的 H5页面

让Facebook登录使用Android Webview

如何在Android Studio上利用云数据库Mysql实现在线登录注册?

Android:铵手机上的返回键,照理来说是跳转到主页面的,但它有时却跳转到了登录页面,求救,我是菜鸟。

输入表单字段上的页面刷新触摸事件 - Android,Samsung

php 如何输出DB类上所有SQL语句,页面上的所有 有关mysql 连接,语句 等信息