有人可以帮我解决问题吗?我是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
。
答案 0 :(得分:2)
您应该向php代码添加错误报告并检查日志。
$pssword = $_POST['password'];
$ password变量拼写错误。
PS:请不要在生产环境中使用该代码,绝不能信任用户输入。
答案 1 :(得分:2)
首先,如果您使用错误报告并检查查询中的错误,您会看到它会引发您的错误, 错误 。
需要引用的 WHERE name = $name;";
,因为它是一个字符串。
WHERE name = '$name';";
然后,查询中的未定义变量$password
,您在$pssword = $_POST['password'];
中指定它(或者将其指定为)。但是,这可能只是你的错字。
<强>密码强>
我还注意到您可能以纯文本格式存储密码。不建议这样做。
使用以下其中一项:
crypt()
bcrypt()
scrypt()
password_hash()
功能。其他链接:
您目前的代码向SQL injection开放。使用mysqli_*
with prepared statements或PDO与prepared 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