<html>
<head>
</head>
<body>
<form action="login_process.php" method="post">
SID: <input type="text" name="sid">
<br />
Password: <input type="text" name="pw">
<br />
<input type="submit" value="Login">
</form>
</body>
</html>
login_process.php文件
<html>
<head>
</head>
<body>
<?php
include ("connection.php");
$sid = $_POST['sid'];
$pw = $_POST['pw'];
setcookie("username", "$sid". time()+86400);
$result = mysqli_query($con, "SELECT SID FROM student_table WHERE SID='$sid' and password='$pw'") or die('Query failed');
if(!$result){
echo "Failed";
} else {
echo "success". $_COOKIE['username'];
$_SESSION['username'] = $sid;
}
?>
</body>
</html>
我的student_table
中有数据。但无论我给出什么样的输入都说成功。即使我没有任何输入点击登录按钮它仍然说成功。请帮忙。
答案 0 :(得分:3)
在sql查询中分配值时应使用引号。
SELECT
SID
FROM
student_table
WHERE
SID = '$sid' and password = '$pw'
还期待准备好的语句以保护自己免受sql注入。您还应该添加以下代码来获取所选行:
while ($row = mysqli_fetch_array($result)) {
$_SESSION['username'] = $row['SID'];
}
答案 1 :(得分:2)
开始学习基本调试:
如果查询失败,请执行以下操作:
不是运行它(mysql_query,或者mysqli_query或者你拥有的任何东西),而是ECHO它:
echo "SELECT SID FROM student_table WHERE SID='$sid' and password='$pw'";
提交表单后,您将看到运行的查询,转到phpmyadmin或您使用的任何内容并手动运行查询。看看是否有错误,也看看发生了什么更容易。当你像这样工作时建议,首先在phpmyadmin中尝试查询,然后在你确信它们没问题后将它们应用到代码中。
答案 2 :(得分:0)
这不是一个真正的答案,而是更多关于如何在代码无法正常工作时找出问题所在。
首先,始终将SQL放入变量中。为什么,所以你可以&#39; var_dump&#39;它,看看发生了什么。所以,试试这个:
$sql = "SELECT SID FROM student_table WHERE SID=$sid and password=$pw";
var_dump($sql, 'my_query'); // you will see what PHP created.
然后尝试提供的答案:
$sql = "SELECT
SID
FROM
student_table
WHERE
SID = '$sid' and password = '$pw'";
至少你会看到可能不正确的东西。
var_dump($sql, 'the answer_query'); // you will see what PHP created.
$ result = mysqli_query($ con,$ sql)或死亡(&#39;查询失败&#39;);
外部引号必须是&#34; (双引号)不是&#34; &#39; &#34; (单引号)这两者都是完全有效的PHP。前者允许在字符串中替换变量。 后者将eveything视为字符串。