无法在php中更新密码

时间:2015-12-28 16:56:38

标签: php android mysql updates

有人可以帮我解决问题吗?我是php的新用户,现在正尝试将数据从android发送到MySQL。我想根据用户名更新密码。我尝试过编码但是在点击更新button时出现错误。

 public void changePassword(final String name, final String password)
    {
        class UpdateUser extends AsyncTask<Void,Void,String> {
            ProgressDialog loading;
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                loading = ProgressDialog.show(ForgetPassword.this,"Updating...","Wait...",false,false);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                loading.dismiss();
                Toast.makeText(ForgetPassword.this,s,Toast.LENGTH_LONG).show();
            }

            @Override
            protected String doInBackground(Void... params) {
                HashMap<String,String> hashMap = new HashMap<>();
                hashMap.put(Config.KEY_USER_NAME,name);
                hashMap.put(Config.KEY_PASSWORD,password);

                RequestHandler rh = new RequestHandler();

                String s = rh.sendPostRequest(Config.UPDATE_USER_URL,hashMap);

                return s;
            }
        }

        UpdateUser ue = new UpdateUser();
        ue.execute();
    }

UpdateUser.php

<?php 
    if($_SERVER['REQUEST_METHOD']=='POST'){
        //Getting values 

        $name = $_POST['name'];
        $pssword = $_POST['password'];


        //importing database connection script 
        require_once('dbConnect.php');

        //Creating sql query 
        $sql = "UPDATE users SET password = '$password' WHERE name = $name;";

        //Updating database table 
        if(mysqli_query($con,$sql)){
            echo ' Updated Successfully';
        }else{
            echo 'Could Not Update users Try Again';
        }

        //closing connection 
        mysqli_close($con);
    }
?>

我收到消息Could Not Update users Try Again

3 个答案:

答案 0 :(得分:2)

您应该向php代码添加错误报告并检查日志。

$pssword = $_POST['password'];

$ password变量拼写错误。

PS:请不要在生产环境中使用该代码,绝不能信任用户输入。

答案 1 :(得分:2)

首先,如果您使用错误报告并检查查询中的错误,您会看到它会引发您的错误, 错误

需要引用的

WHERE name = $name;";,因为它是一个字符串。

WHERE name = '$name';";

然后,查询中的未定义变量$password,您在$pssword = $_POST['password'];中指定它(或者将其指定为)。但是,这可能只是你的错字。

<强>密码

我还注意到您可能以纯文本格式存储密码。不建议这样做。

使用以下其中一项:

其他链接:

您目前的代码向SQL injection开放。使用mysqli_* with prepared statementsPDOprepared statements

参考文献:

并将其应用于您的代码。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

并将or die(mysqli_error($con))添加到mysqli_query()

这对你没有帮助:

    if(mysqli_query($con,$sql)){
        echo ' Updated Successfully';
    }else{
        echo 'Could Not Update users Try Again';
    }

这将:

    if(mysqli_query($con,$sql)){
        echo ' Updated Successfully';
    }else{
        echo "Error: " . mysqli_error($con);
    }

对于Android代码,如果有任何错误,我将无法帮助您。

此外,请确保您已成功连接到数据库并使用与查询相同的MySQL API,即mysqli_。那是未知的。如果您使用mysql_或PDO进行连接,那么这将无效。您必须使用从连接到查询的相同内容。

参考:

另外,如果MySQL会抱怨任何字符(例如撇号),那么您将需要转义数据;无论如何你应该做的事情。

所以你的代码现在读作:

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

if($_SERVER['REQUEST_METHOD']=='POST'){
    //Getting values 

    $name = mysqli_real_escape_string($con, $_POST['name']);
    $password = mysqli_real_escape_string($con, $_POST['password']);


    //importing database connection script 
    require_once('dbConnect.php');

    //Creating sql query 
    $sql = "UPDATE users SET password = '$password' WHERE name = '$name';";

    if(mysqli_query($con,$sql)){
        echo ' Updated Successfully';
    }else{
        echo "Error" . mysqli_error($con);
    }

    //closing connection 
    mysqli_close($con);
}

答案 2 :(得分:2)

您的SQL语法有错误。 name列是我假设的文本列,因此需要$data周围的引号,即'$data'

此外,如果您输出真实的错误消息,它将帮助您在将来自己解决这些问题。

当然设置$pssword并使用$password

时出错
<?php 
    if($_SERVER['REQUEST_METHOD']=='POST'){
        //Getting values 

        $name = $_POST['name'];

        // fix variable name used later
        $password = $_POST['password'];


        //importing database connection script 
        require_once('dbConnect.php');

        //Creating sql query 
        // error here
        //$sql = "UPDATE users SET password = '$password' WHERE name = $name;";
        $sql = "UPDATE users 
                  SET password = '$password' 
                WHERE name = '$name'";

        //Updating database table 
        if(mysqli_query($con,$sql)){
            echo ' Updated Successfully';
        }else{
            // replace with an actual datbase error output
            //echo 'Could Not Update users Try Again';
            echo mysqli_error($con);
            exit;
        }

        //closing connection 
        mysqli_close($con);
    }
?>
  

此外,在数据库中存储密码时,应使用标准的php函数password_hash() See the manual

进行哈希处理。