我试图通过检查我通过电子邮件发送的动态链接中的变量是否与存储在mysql中的哈希值匹配来注册用户。
我试过调试一下。我发现$ verify和$ hash确实相等,当我在if语句之前回显到浏览器中。 一个哈希值来自mysqli选择查询,而另一个来自$ _GET ['']帖子。 我的哈希包含(=,$ +)符号。这会阻止它正确评估吗?当我的代码在浏览器中显示时,它对if语句没有任何作用。(我没有收到“它工作”的回声,也没有收到“它不起作用”的回声) 如果您知道这个问题可能是什么或者有关于故障排除的建议,那将非常感激。提前感谢你的帮助。
部分代码我似乎遇到了问题:
if ($verify === $hash ){
echo "It works!";}
else{ echo "It doesn't work!";}
我也尝试使用以下两种替代方案对其进行评估,但它们不起作用:
$values = array($verify, $hash);
if(count(array_unique($values)) === 1) {
echo "It works!";}
if (strcmp("$verify","$hash")===0){
echo "It works!";
这是我的完整代码:
$servername = "localhost";
$un = "root";
$password = "";
$dbname = "secure_login";
$conn = new mysqli($servername, $un, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$username = mysqli_real_escape_string($conn,$_GET['username']);
$hash = mysqli_real_escape_string($conn,$_GET['hash']);
$sql = "SELECT hash FROM login WHERE username = '$username'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$verify = $row["hash"];
}
} else {
echo "0 results";
echo "Error Selecting record: " . $conn->error;
}
echo $username;
echo $hash;
if ($verify == $hash ){
echo "It works!";
$sql = "UPDATE login SET active = 1 WHERE username = '$username'";
}
if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} else {
echo $conn->error;
}
$conn->close();
}