我正在使用PHP和mysqli,程序正在做的是它要求重置代码和电子邮件地址,如果在数据库中找到电子邮件添加和重置代码它设置密码, this部分功能正在运作,
我需要这方面的帮助:我需要做的是告诉用户密码是否已设置,以便更新是否成功。
我在做什么:
$uinsert = "UPDATE member SET password = '$password' WHERE emailadd = '$emailadd' AND resetCode = '$resetcode'";
$update = mysqli_query($mysqli, $uinsert) or die(mysqli_error($mysqli));
if(mysqli_affected_rows($update) == 1 ){ //ifnum
header("location: ../index.php"); // Redirecting To Other Page
}
else{
echo "<script> alert('Incorrect code, try again!');</script>";
}
注意:$ mysqli是我的连接字符串
答案 0 :(得分:4)
&#34; @ Fred-ii-非常感谢你的作品! - 58秒前的咖啡编码器&#34;
使用context 'when the request contains an authentication header' do
it 'should return the user info' do
user = create(:user)
get URL, headers: authenticated_header(user)
expect(response).to have_http_status(:ok)
expect(response.content_type).to eq('application/vnd.api+json')
expect(json_body["data"]["attributes"]["email"]).to eq(user.email)
expect(json_body["data"]["attributes"]["name"]).to eq(user.name)
end
end
或根本不进行比较。
旁注:if(mysqli_affected_rows($mysqli) >0 )
仅比较1,而不是==1
,您可能尝试更新多行。然而,在极少数情况下,>0
是必需的,之前我也遇到过这种情况;这就是我回答的原因。
>0
使用连接,而不是查询的连接。
另外,如果您要存储纯文本密码,请使用affected_rows()
,因为它更安全:
旁注:如果您决定转到该功能,请确保您根本不操作密码。散列/验证它可以解决这个问题,你这样做可能弊大于利,并限制密码。
I.e。:password_hash()
的有效密码将被解释为test'123
,并在使用test\'123
时呈现为FALSE。
或者您可能仍在使用real_escape_string()
根据您的其他问题Comparing/check if correct Password from mysqli database [hash_hmac]
和准备好的声明:
最好在标题后添加hash_hmac
。否则,您的代码可能希望继续执行。
exit;
答案 1 :(得分:2)
if (mysqli_affected_rows($mysqli) == 1 ) {
由于mysqli_affected_rows()
不使用查询$update
作为参数,因此它使用连接变量:$mysqli
答案 2 :(得分:2)
更改mysqli_affected_rows()的参数,参数必须是mysql连接
mysqli_affected_rows($update)
到
mysqli_affected_rows($mysqli)
请参阅此参考 https://www.w3schools.com/php/func_mysqli_affected_rows.asp
答案 3 :(得分:1)
将您的mysqli连接对象($ connection)传递给 mysqli_affected_rows(connection_object)以检查受影响的行。
connection_object就像 - $con=mysqli_connect("localhost","bd_user","db_password","your_db_name");
所以,代码将是
if(mysqli_affected_rows($con)== 1 ){
header("location: ../index.php");
}