无论如何,登录脚本都会重定向用户

0 php mysql forms login

我正在为我的网站创建一个登录页面,该页面连接到存储登录详细信息的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)

Fun*_*ner 6

您的代码存在一些问题.

其中一个是你的条件陈述

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.

  • 你应该从空间ANDUsername='".$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.