更改用户密码 - 更新数据库表PHP / JAVA

时间:2015-08-10 19:54:53

标签: java php android sql-update

我一直试图自己制作一个'更改密码'功能。当用户想要更改密码时,会弹出一个对话框,显示三个字段:旧密码,新密码和确认新密码。使用SharedPreferences处理旧密码。

public void invokeChangePass 工作。所以你不必看那个。

问题在于php文件和private void updateDataBase它不会更改数据库中用户的密码。

除了php文件和updateDatabase函数之外的所有内容都有效,所以不用担心。

有用的说明:

  • 我知道它很容易受到mysql注入。目前不是我的首要任务。
  • 当用户登录时,
  • EmailKeyPassKeySharedPreferences中生成。
  • 应该在数据库中找到EmailKey,以便更改该用户的密码。
  • 就在不久之前,我做了这个,所以它可能会有愚蠢的错误或我忘记添加的事情。

非常感谢。

JAVA文件:

 public class ChangePassDialog extends Activity {

    private EditText setOldPass;

    private EditText setNewPass;

    private EditText setNewPass2;

    public static final String MyPREFERENCES = "MyPrefs";
    SharedPreferences sharedpreferences;

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

        setOldPass = (EditText) findViewById(R.id.setOldPass);
        setNewPass = (EditText) findViewById(R.id.setNewPass);
        setNewPass2 = (EditText) findViewById(R.id.setNewPass2);

    }

    public void invokeChangePass(View view) {
        String oldpass = setOldPass.getText().toString();
        String pass = setNewPass.getText().toString();
        String pass2 = setNewPass2.getText().toString();

        sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
        String passKey = sharedpreferences.getString("passKey", "DEFAULT");
        String name = sharedpreferences.getString("emailKey", "DEFAULT");
//        onPreExecute();

        if (oldpass.equals(passKey) && pass.length() >= 6 && pass.length() <= 30 && (pass2.length() >= 0 && (pass.equals(pass2)) && (!pass.equals(pass.toLowerCase()) &&
                !pass.equals(pass.toUpperCase()) &&
                pass.matches(".*\\d+.*")))) {
            updateDatabase(pass, name);
            setNewPass2.requestFocus();
            setNewPass2.setError("TEST WORKING.");
        } else {
            errorTest(oldpass, pass, pass2);

        }
    }

    private void updateDatabase(String pass, String name) {
        class SendPostReqAsyncTask extends AsyncTask<String, Void, String> {
            @Override
            protected String doInBackground(String... params) {
                String name = params[0];
                String pass = params[1];
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("pass", pass));
                nameValuePairs.add(new BasicNameValuePair("name", name));
                try {
                    HttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost("http://calisapp.esy.es/changepass.php");
                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse response = httpClient.execute(httpPost);
                    InputStream entity = response.getEntity().getContent();
                    InputStreamReader inputStream = new InputStreamReader(entity);
                    BufferedReader bufferedReader = new BufferedReader(inputStream);
                    StringBuilder stringBuilder = new StringBuilder();
                    String bufferedStrChunk = null;
                    while ((bufferedStrChunk = bufferedReader.readLine()) != null) {
                        stringBuilder.append(bufferedStrChunk);
                    }
                    return stringBuilder.toString();
                } catch (ClientProtocolException e) {
                } catch (IOException e) {
                }
                return "";
            }
            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
                String s = result.trim();

                if(s.equalsIgnoreCase("success")){
                        Intent intent = new Intent(ChangePassDialog.this, Settings.class);
                        startActivity(intent);
                        Toast.makeText(ChangePassDialog.this, "Registered successfully", Toast.LENGTH_LONG).show();
                        finish();
                    }


                        //                loadingDialog.dismiss();

            }
            }
        SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
        sendPostReqAsyncTask.execute(name,pass);
        }

PHP文件:

<?php
define('HOST','X');
define('USER','X');
define('PASS','X');
define('DB','X');

$con = mysqli_connect(HOST,USER,PASS,DB);

$name = $_POST['name'];
$pass = $_POST['pass'];


 $sql = "UPDATE tbl_user SET password='$pass' WHERE username = '$name'";
  if(mysqli_query($con,$sql)){
       echo 'success';
  }

mysqli_close($con);
?>

1 个答案:

答案 0 :(得分:0)

首先。我认为使用AsyncTask不是一个好主意,因为它可能会导致一些问题。这是讨论here

但是,这不是你的优先事项,也不是你的问题,所以让我们相处。

更改此

httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

这个

httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));

并改变这个

InputStreamReader inputStream = new InputStreamReader(entity);
BufferedReader bufferedReader = new BufferedReader(inputStream);
StringBuilder stringBuilder = new StringBuilder();
String bufferedStrChunk = null;
while ((bufferedStrChunk = bufferedReader.readLine()) != null) {
    stringBuilder.append(bufferedStrChunk);
}
return stringBuilder.toString();

到此

HttpResponse response = httpClient.execute(httpPost);
String resp = EntityUtils.toString(response.getEntity(),"UTF-8");

return resp;

并尝试将您的php文件更改为此

<?php
    define('HOST','X');
    define('USER','X');
    define('PASS','X');
    define('DB','X');

    $name = $_POST['name'];
    $pass = $_POST['pass'];

    if (isset($name) && isset($pass)) {
        $mysqli = new mysqli(HOST,USER,PASS,DB);

        if ($mysqli->connect_error) {
            die('Error while connecting to database!');
        }

        $sql = "UPDATE tbl_user SET password='" .$pass ."' WHERE username ='" . $name . "'";

        $res = $mysqli->query($sql);

        if ($res) {
            echo "success";
        }

        $mysqli->close();
    }
?>
相关问题