Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务器错误还是Android问题?_Java_Php_Android_Mysql_Server - Fatal编程技术网

Java 服务器错误还是Android问题?

Java 服务器错误还是Android问题?,java,php,android,mysql,server,Java,Php,Android,Mysql,Server,我正在开发一个登录/注册应用程序。 这是我在MainActivity中的Java代码: private void loginUser(){ pd = ProgressDialog.show(LoginActivity.this, "", "Loading..."); StringRequest stringRequest = new StringRequest(Request.Method.POST, LOGIN_URL, new Response.Lis

我正在开发一个登录/注册应用程序。 这是我在MainActivity中的Java代码:

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);
}
}
但还有另一个错误。我将正确的登录数据发送到服务器,但每次返回成功: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表示应用程序找不到login.php页面。确保脚本的路径正确

尝试从链接中删除“public_html”。这是您的根文件夹。您不需要在链接中指定此项。如果你移除它,它应该会工作

编辑

既然你在我回答那个问题后编辑了你的帖子,让我来编辑我的帖子来回答你的下一个问题。从php文件中的密码函数判断,您正在使用密码散列,并且您的密码使用
password\u散列(“yourPass”,password\u BCRYPT)加密

在本例中,我看不到您在PHP脚本中包含了该库。只需在php文件中添加以下行,就可以了

include('path/to/password_hash.php');
问题是,由于找不到该文件,因此无法识别密码\u verify。我相信如果您将$\u POST['username']和$\u POST['password']更改为'YourUsername'和'YourPassword',并从浏览器中运行文件,您将看到所有错误,这将是其中之一

希望这有帮助

编辑2

因为您的密码有问题。在将密码插入数据库的语句中,在将密码插入数据库之前,请使用password_hash函数对密码进行散列,如下所示:

$hashedPassword = ('Yourpassword', PASSWORD_BCRYPT);
执行MySQL查询,并在密码字段中将$hashedPassword值添加到数据库中。然后像一开始那样检索密码和用户名,并使用password_verify函数匹配密码,如下所示:

if (password_verify($_POST['password'], $hashedPassword) {
    // Do your login stuff.
}
现在它应该登录了(可选额外)此外,请尝试查看PDO以执行sql查询。好多了。要使用PDO,请执行以下操作:

    //Initiate Connection
        $conn = new PDO('mysql:host='.$db_host.';dbname='.$db_name, $db_user, $db_password);

$stmt = $conn->prepare("SELECT password FROM user WHERE username = :username");

if ($stmt->execute(array(':username' => $_POST['username']))) {
    if ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $passwordFromDb = $result['password']; //This is the password you match in password verify. This password should be hashed in the database. if it is hashed it will look something like this - $2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq.
    }
}
我认为问题在于,数据库中存储的是“Geige”作为密码,而不是散列字符串。因此,当password_verify函数尝试匹配密码时,它会失败。您的代码可能是正确的,但数据库中的密码可能是错误的。将密码插入数据库时,请确保对其进行哈希运算并插入哈希运算后的密码

我真的希望这有帮助

编辑3寄存器重写

<?php
    //Initiate Connection
    $conn = new PDO('mysql:host='.$db_host.';dbname='.$db_name, $db_user, $db_password);

    $username = $_POST["username"];
    $password = $_POST["password"];
    $hashedPassword = password_hash($password, PASSWORD_BCRYPT);
    $mobilenumber = $_POST["mobilenumber"];
    $email = $_POST["email"];

    $stmt = $conn->prepare("INSERT INTO user (username, hashedPassword, mobilenumber, email) VALUES (:username, :password, :mobile, :email)");

    if ($stmt->execute(array(':username' => $username, ':password' => $hashedPassword, ':mobile' => $mobilenumber, ':email' => $email))) {
        $response["success"] = true; 
    } else {
        $response["success"] = false; 
    }

    header('Content-Type: application/json');
    echo json_encode($response);
?>

404表示应用程序找不到login.php页面。确保脚本的路径正确

尝试从链接中删除“public_html”。这是您的根文件夹。您不需要在链接中指定此项。如果你移除它,它应该会工作

编辑

既然你在我回答那个问题后编辑了你的帖子,让我来编辑我的帖子来回答你的下一个问题。从php文件中的密码函数判断,您正在使用密码散列,并且您的密码使用
password\u散列(“yourPass”,password\u BCRYPT)加密

在本例中,我看不到您在PHP脚本中包含了该库。只需在php文件中添加以下行,就可以了

include('path/to/password_hash.php');
问题是,由于找不到该文件,因此无法识别密码\u verify。我相信如果您将$\u POST['username']和$\u POST['password']更改为'YourUsername'和'YourPassword',并从浏览器中运行文件,您将看到所有错误,这将是其中之一

希望这有帮助

编辑2

因为您的密码有问题。在将密码插入数据库的语句中,在将密码插入数据库之前,请使用password_hash函数对密码进行散列,如下所示:

$hashedPassword = ('Yourpassword', PASSWORD_BCRYPT);
执行MySQL查询,并在密码字段中将$hashedPassword值添加到数据库中。然后像一开始那样检索密码和用户名,并使用password_verify函数匹配密码,如下所示:

if (password_verify($_POST['password'], $hashedPassword) {
    // Do your login stuff.
}
现在它应该登录了(可选额外)此外,请尝试查看PDO以执行sql查询。好多了。要使用PDO,请执行以下操作:

    //Initiate Connection
        $conn = new PDO('mysql:host='.$db_host.';dbname='.$db_name, $db_user, $db_password);

$stmt = $conn->prepare("SELECT password FROM user WHERE username = :username");

if ($stmt->execute(array(':username' => $_POST['username']))) {
    if ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $passwordFromDb = $result['password']; //This is the password you match in password verify. This password should be hashed in the database. if it is hashed it will look something like this - $2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq.
    }
}
我认为问题在于,数据库中存储的是“Geige”作为密码,而不是散列字符串。因此,当password_verify函数尝试匹配密码时,它会失败。您的代码可能是正确的,但数据库中的密码可能是错误的。将密码插入数据库时,请确保对其进行哈希运算并插入哈希运算后的密码

我真的希望这有帮助

编辑3寄存器重写

<?php
    //Initiate Connection
    $conn = new PDO('mysql:host='.$db_host.';dbname='.$db_name, $db_user, $db_password);

    $username = $_POST["username"];
    $password = $_POST["password"];
    $hashedPassword = password_hash($password, PASSWORD_BCRYPT);
    $mobilenumber = $_POST["mobilenumber"];
    $email = $_POST["email"];

    $stmt = $conn->prepare("INSERT INTO user (username, hashedPassword, mobilenumber, email) VALUES (:username, :password, :mobile, :email)");

    if ($stmt->execute(array(':username' => $username, ':password' => $hashedPassword, ':mobile' => $mobilenumber, ':email' => $email))) {
        $response["success"] = true; 
    } else {
        $response["success"] = false; 
    }

    header('Content-Type: application/json');
    echo json_encode($response);
?>


好的。你说得对。错误404将不再显示..谢谢伙计。但是php中还有另一个错误,因为每次我想要登录时,我都会返回:success:false…我使用正确的登录数据,但每次success:false。根据“password\u verify”函数判断,我假设您正在使用password\u hash脚本进行密码验证。如果这是您发布的整个php脚本,那么错误应该是您没有包含密码哈希脚本。您需要在php脚本中添加以下行:include('path/to/password_hash.php');执行此操作后,如果数据库中的密码已使用password_散列脚本正确加密,则它应返回true参数。还可以尝试用硬编码的变量替换post变量,并从浏览器中运行脚本以查找错误。我使用Wamp进行了测试。我应该重写什么才能使其正常工作?您忘记在更新中在mysqli的前面添加$con。请告诉我您从哪里获得“密码验证”功能好的,对不起我的错误-我添加了$con=…但是您从哪里获得密码验证功能是什么意思??这是php手册..看到了吗。你说得对。错误404将不再显示..谢谢伙计。但是,这其中还有一个错误