我正在为我的网站创建一个登录页面,该页面连接到存储登录详细信息的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>
Run Code Online (Sandbox Code Playgroud)
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
}
}
?>
Run Code Online (Sandbox Code Playgroud)
您的代码存在一些问题.
其中一个是你的条件陈述
if(isset($_POST["submit"])){...}
Run Code Online (Sandbox Code Playgroud)
您的提交按钮没有名称属性
<input type="submit" value="submit"/>
Run Code Online (Sandbox Code Playgroud)
将其修改为读作
<input type="submit" name="submit" value="submit"/>
Run Code Online (Sandbox Code Playgroud)
然后这while($$row删除其中一个$
并mysql_fetch_asoc有一个错字,它应该为已读mysql_fetch_assoc
while($row=mysql_fetch_assoc($query))
另外,您发布的代码似乎缺少结束</form>标记.
您还应该检查action并确保它确实是PHP的正确URL.
你应该从空间AND中Username='".$username."'AND可能导致的问题Username='".$username."' AND,以防万一.
然后我们有这条线:
if($user == $dbusername && $pass == $dbpassword)
Run Code Online (Sandbox Code Playgroud)
$user并且$pass此时未定义,因此您可能希望分别使用$username和$password.
将错误报告添加到文件的顶部,这将有助于查找错误.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
Run Code Online (Sandbox Code Playgroud)
旁注:错误报告应该只在暂存中完成,而不是生产.
or die(mysql_error())到mysql_query().脚注:
我注意到你可能用纯文本存储密码.如果是这种情况,则非常气馁.
我建议你使用CRYPT_BLOWFISH或PHP 5.5的password_hash()功能.对于PHP <5.5使用password_hash() compatibility pack.
您现在的代码对SQL注入是开放的.使用mysqli预处理语句,或与准备语句PDO.对于密码存储,请使用CRYPT_BLOWFISH或PHP 5.5的password_hash()功能.对于PHP <5.5使用password_hash() compatibility pack.
password_hash()和发布了一个答案password_verify()