无论如何,登录脚本都会重定向用户
login script redirects user no matter what
我正在为我的网站创建一个登录页面,该页面连接到存储登录详细信息的 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
}
}
?>
您的代码有一些问题。
其中一个是你的条件语句
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
并确保 URL 确实适合您的 PHP。
您应该 space 删除 Username='".$username."'AND
中的 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 or PHP 5.5's password_hash()
function. For PHP < 5.5 use the password_hash() compatibility pack
。
您当前的代码是开放SQL注入。将 mysqli
与准备好的语句一起使用 ,或将 PDO 与准备好的语句 结合使用。对于密码存储,使用 CRYPT_BLOWFISH or PHP 5.5's password_hash()
function. For PHP < 5.5 use the password_hash() compatibility pack
.
- ircmaxell 昨天使用
password_hash()
和 password_verify()
发布了一个答案
- 看看:
改变这个:
<?php
if(isset($_POST["submit"])){
对此:
<?php
if(isset($_POST["password"])&&isset($_POST["username"])){
确保未发布空表单。
检查这里的错别字:
while($$row=mysql_fetch_asoc($query)) {
将其更改为
while($row=mysql_fetch_asoc($query)) {
我正在为我的网站创建一个登录页面,该页面连接到存储登录详细信息的 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
}
}
?>
您的代码有一些问题。
其中一个是你的条件语句
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
并确保 URL 确实适合您的 PHP。您应该 space 删除
Username='".$username."'AND
中的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 or PHP 5.5's password_hash()
function. For PHP < 5.5 use the password_hash() compatibility pack
。
您当前的代码是开放SQL注入。将 mysqli
与准备好的语句一起使用 ,或将 PDO 与准备好的语句 结合使用。对于密码存储,使用 CRYPT_BLOWFISH or PHP 5.5's password_hash()
function. For PHP < 5.5 use the password_hash() compatibility pack
.
- ircmaxell 昨天使用
password_hash()
和password_verify()
发布了一个答案
- 看看:
改变这个:
<?php
if(isset($_POST["submit"])){
对此:
<?php
if(isset($_POST["password"])&&isset($_POST["username"])){
确保未发布空表单。
检查这里的错别字:
while($$row=mysql_fetch_asoc($query)) {
将其更改为
while($row=mysql_fetch_asoc($query)) {