使用 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) > 0)
。
【讨论】:
以上是关于使用 MySQL 的 Android 登录页面上的用户名和密码错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在Android Studio上利用云数据库Mysql实现在线登录注册?
Android:铵手机上的返回键,照理来说是跳转到主页面的,但它有时却跳转到了登录页面,求救,我是菜鸟。