我有一个名为“ pwt”的SQL表,其列为“ usr”和“ pw”。 只有一个条目的值为“ admin”和“ chat”。
我通过php表单传输了2个值。现在,我应该将给定值与sql表中的两个值进行比较,如果它们都正确(“ admin”和“ chat”),则脚本应该重定向到另一个站点,否则应回显“ password errors” < / p>
我知道这不是真正的密码机制,但是它只是在虚拟机上运行,我只想使该机制正常工作。
这是代码:
<?php
$servername = "localhost";
$username = "name";
$password = "password";
$dbname = "chat";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$us1 = $_GET["user"];
$pw1 = $_GET["pswd"];
// sql for compare record
$sql = "SELECT usr, pw FROM pwt WHERE EXISTS (SELECT usr, pw FROM pwt WHERE usr = '$us1' AND pw = '$pw1')";
if ($conn->query($sql) === TRUE) {
header('Location: http://192.168.56.101/testat/source/admin.php');
} else {
echo "Falsches Passwort " . $conn->error;
echo "Passwort ist $pw1";
echo "Name ist $us1";
}
$conn->close();
?>
我的错误在哪里?
谢谢。
答案 0 :(得分:0)
此查询功能
$conn->query($sql)
仅在查询失败(错误)时返回false。您想检查您是否真的得到结果。试试
if ($result->num_rows > 0) {
header('Location: http://192.168.56.101/testat/source/admin.php');
} else {
echo "Falsches Passwort " . $conn->error;
echo "Passwort ist $pw1";
echo "Name ist $us1";
}
除此之外,您应该直接使用此查询,因为当存在子句为true时,您应该从pwt返回每一行,即使只是一行:
$sql = "SELECT usr, pw FROM pwt WHERE usr = '$us1' AND pw = '$pw1'";
答案 1 :(得分:0)
我解决了这个问题
// sql for compare record
$sql = "SELECT usr, pw FROM pwt WHERE EXISTS (SELECT usr, pw FROM pwt WHERE usr = '$us1' AND pw = '$pw1')";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
header('Location: http://192.168.56.101/testat/source/admin.php');
这很好用:),谢谢大家的帮助。