我正在登录/注册应用程序。 这是我的Java代码我的MainActivity:服务器错误或Android问题?
private void loginUser(){
pd = ProgressDialog.show(LoginActivity.this, "", "Loading...");
StringRequest stringRequest = new StringRequest(Request.Method.POST, LOGIN_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonResponse = new JSONObject(response);
System.out.println("JSON RESPONSE: " + jsonResponse.toString());
boolean success = jsonResponse.getBoolean("success");
if (success) {
launchHomeScreen();
pd.dismiss();
Toast.makeText(LoginActivity.this,"Welcome back " + username,Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(LoginActivity.this,"Wrong Username or Password!",Toast.LENGTH_LONG).show();
pd.dismiss();
}
}
catch (JSONException e) {
e.printStackTrace();
pd.dismiss();
Toast.makeText(LoginActivity.this,response,Toast.LENGTH_LONG).show();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
pd.dismiss();
System.out.println("Error: " + error);
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<>();
params.put(KEY_USERNAME,username);
params.put(KEY_PASSWORD,password);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
}
的login.php:
<?php
$con = mysqli_connect("x", "x", "x", "x");
$username = $_POST["username"];
$password = $_POST["password"];
$statement = mysqli_prepare($con, "SELECT * FROM user WHERE username = ?");
mysqli_stmt_bind_param($statement, "s", $username);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $colUserID, $colUsername, $colPassword);
$response = array();
$response["success"] = false;
while(mysqli_stmt_fetch($statement)){
if (password_verify($password, $colPassword)) {
$response["success"] = true;
}
}
header('Content-Type: application/json');
echo json_encode($response);
?>
MySQL表的样子:user_ID的,用户名,密码时应;移动电话号码,电子邮件
当我试图登录我在Android的logcat中得到这个,所以错误是由写入LOGIN_URL错误引起的。
E/Volley: [251] BasicNetwork.performRequest: Unexpected response code 404 for http://myserver.xyz/pubic_html/login.php
I/System.out: Error: com.android.volley.ServerError
但还有另一个错误。我将正确的logindatas发送到服务器,但是每次我获得成功时:false。
奇怪的是我使用类似java代码注册(只有一个register.php),它的工作原理,所以什么是错的?
这是register.php
<?php
$connect = mysqli_connect("localhost", "root", "", "user");
$username = $_POST["username"];
$password = $_POST["password"];
$hashedPassword = password_hash($password, PASSWORD_BCRYPT);
$mobilenumber = $_POST["mobilenumber"];
$email = $_POST["email"];
registerUser();
$response["success"] = false;
function registerUser() {
global $connect, $username, $hashedPassword, $mobilenumber, $email;
$statement = mysqli_prepare($connect, "INSERT INTO user (username, hashedPassword, mobilenumber, email) VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($statement, "siss", $username, $hashedPassword, $mobilenumber, $email);
mysqli_stmt_execute($statement);
mysqli_stmt_close($statement);
$response["success"] = true;
}
header('Content-Type: application/json');
echo json_encode($response);
?>
好。你是对的。错误404将不会显示..谢谢男人。但在PHP中还有另一个错误,因为每次我想要登录时,我都会回到:success:false ...我使用正确的logindatas,但每次都成功:false。 –
我假设您正在使用password_hash脚本进行密码验证,从“password_verify”函数进行判断。如果这是你发布的整个php脚本,那么错误应该是你没有包含密码哈希脚本。您需要将以下行添加到您的php脚本中:include('path/to/password_hash.php');在这样做之后,如果数据库中的密码用password_hash脚本正确加密,它应该返回true参数。也可以尝试用硬编码变量替换后期变量,并从浏览器运行脚本来查找错误。 –
我测试了Wamp ..我应该重写它会起作用吗? –