我正在为我的网站创建一个登录页面,该页面连接到存储登录详细信息的mysql数据库。但是,当我提交表单时,无论登录是否有效,它都会重定向信息。我对可能出现的问题感到非常困惑。
我的表格:
<form name="login" action="edit_profile/index.php" method="post"> //redirects to this page regardless of what has been submitted
<fieldset>
<legend>Please enter your login details</legend>
<label for="username">Username</label>
<input id="username" name="username" type="text" value="" required/><br>
<label for="password">Password</label>
<input id="password" name="password" type="password" value="" required/><br>
<input type="submit" value="submit"/>
</fieldset>
pHp脚本:
<?php require_once "connectdb.php";?>
<?php
if(isset($_POST["submit"])){
$username=$_POST["username"];
$password=$_POST["password"];
$query=mysql_query("SELECT * FROM login_details WHERE Username='".$username."'AND Password='".$password."'");
$numrows=mysql_num_rows($query);
if($numrows!=0) {
while($$row=mysql_fetch_asoc($query)) {
$dbusername=$row["Username"];
$dbpassword=$row["Password"];
}
if($user == $dbusername && $pass == $dbpassword) {
session_start();
$_SESSION["user_session"]=$user;
echo "<pre>";
print_r($_SESSION);
echo '</pre>';
}
} else {
echo "Invalid username or password!"; //does not echo
}
}
?>
答案 0 :(得分:6)
您的代码存在一些问题。
其中一个是你的条件陈述
if(isset($_POST["submit"])){...}
您的提交按钮没有名称属性
<input type="submit" value="submit"/>
将其修改为
<input type="submit" name="submit" value="submit"/>
然后此while($$row
删除其中一个$
且mysql_fetch_asoc
有拼写错误,应为mysql_fetch_assoc
while($row=mysql_fetch_assoc($query))
另外,您发布的代码似乎缺少结束</form>
代码。
您还应该检查action
并确保它确实是您的PHP的正确网址。
您应该将AND
中可能导致问题的Username='".$username."'AND
空出Username='".$username."' AND
,以防万一。
然后我们有这一行:
if($user == $dbusername && $pass == $dbpassword)
目前 $user
和$pass
未定义,因此您可能希望分别使用$username
和$password
。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告应仅在暂存时完成,而不是生产。
or die(mysql_error())
添加到mysql_query()
。<强>脚注:强>
我注意到您可能以纯文本格式存储密码。如果是这种情况,则非常气馁。
我建议您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
功能。对于PHP&lt; 5.5使用password_hash() compatibility pack
。
您目前的代码向SQL injection开放。使用mysqli
with prepared statements或PDO with prepared statements。对于密码存储,请使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
功能。对于PHP&lt; 5.5使用password_hash() compatibility pack
。
password_hash()
和password_verify()