草庐IT

php - 提交登录表单后,URL 保留在操作 php 上

coder 2023-10-24 原文

您好,我目前正在处理用户登录,当一个人提交表单时可能有两种不同的情况。

我想要完成的是,如果有人登录, 他们将被重定向到用户页面或管理页面,具体取决于他们的用户名所在的表。

我的问题是,提交表单后,浏览器显示一个没有错误的空白页面,URL 是表单的 php 操作。

这是我的html文件

<?php
//Start session
//error_reporting = E_ALL & ~E_NOTICE;
ini_set( 'error_reporting', E_ALL & ~E_NOTICE);
session_start();

//Unset the variables stored in session
unset($_SESSION['SESS_MEMBER_ID']);
unset($_SESSION['SESS_USERNAME']);
unset($_SESSION['SESS_PASSWORD']);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="css/style.css" title="" />
<link rel="stylesheet" href="css/animate.css" title="" />
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,600,700,300' rel='stylesheet' type='text/css'>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.js">            </script>
<script src="js/mouseEvents.js"></script>
<title>Grey Avenue Item Inventory Login</title>
</head>
<body>
<div id="container">

<div id="mainform" >
    <div id="formcontainer" class="animated fadeInDown">
        <div id="formheader">
        <div class="logocont">
            <a href="#"><span class="logoImg"></span></a>
            <h2 class="textheader">Inventory System Log-In</h2>
        </div>

        </div>
    <form action="login.php" method="post" id="loginform">

    <div class="inputbox">  <input type="text" name="username" placeholder="Username" maxlength="12"/></div>
    <div class="inputbox"> <input type="password" name="password" placeholder="Password"  maxlength="12"/></div>
    </form>
    <div id="loginbutton">
            <button type="submit" form="loginform" class="loginbutton" value="Log In">
            <span class="loginbut_text">Log In</span>
            </button>
            <button class="regbutton" value="Register">
            <span class="loginbut_text">Register</span>
            </button>
        </div>  

        <div id="errormsg">
<?php
if( isset($_SESSION['ERRMSG_ARR']) && is_array($_SESSION['ERRMSG_ARR']) &&     count($_SESSION['ERRMSG_ARR']) >0 ) {
echo '<ul class="err">';
foreach($_SESSION['ERRMSG_ARR'] as $msg) {
echo '<li>',$msg,'</li>';
}
echo '</ul>';
unset($_SESSION['ERRMSG_ARR']);
}
?>
</div>
</div>
</div>
</div>



</body>
</html>

还有我的 login.php 文件

<?php

session_start();

require("connect.php");
require("lib/password.php");

//Array to store validation errors
$errmsg_arr = array();

//Validation error flag
$errflag = false;


$username = $_POST["username"];
$password = $_POST["password"];

//Input Validations
if($username == "") {
    $errmsg_arr[] = "*Username missing";
    $errflag = true;
}
if($password == "") {
    $errmsg_arr[] = "*Password missing";
    $errflag = true;
}

//If there are input validations, redirect back to the login form
if($errflag) {
    $_SESSION["ERRMSG_ARR"] = $errmsg_arr;
    session_write_close();
    header("location: index.php");
    die();
}

if ($sql = $conn->prepare("SELECT id, username, password, firstName, lastName FROM users WHERE username = ?")){

    $sql->bind_param("s", $username) ;
    $sql->execute();
    $sql->store_result();
    $result = $sql->num_rows;
    $sql->bind_result($id, $username, $passwordhash, $firstName, $lastName);
    $sql->fetch();

    if ($result > 0){
        if(password_verify($password, $passwordhash)){
            session_regenerate_id();
            $_SESSION["SESS_MEMBER_ID"] = $id;
            $_SESSION["SESS_USERNAME"] = $username;
            $_SESSION["SESS_PASSWORD"] = $password;
            $_SESSION["SESS_FIRSTNAME"] = $firstName;
            $_SESSION["SESS_LASTNAME"] = $lastName;

            session_write_close();

            header("location: inventory.php");
            die();  
        }
        else {
            //Login failed
            $errmsg_arr[] = "Username and Password do not match";
            $errflag = true;
            if($errflag) {
                $_SESSION["ERRMSG_ARR"] = $errmsg_arr;
                session_write_close();
                header("location:index.php");
                die();
            }
        }
    }
}
else {
    if($sql = $conn->prepare("SELECT id, username, password, firstName, lastName     FROM admin WHERE username=?")){
        $sql->bind_param("s", $username);
        $sql->execute();
        $sql->store_result();
        $result = $sql->num_rows;

        $sql->bind_result($id, $username, $passwordhash, $firstName, $lastName);
        $sql->fetch();

        if($result > 0){
            if(password_verify($password, $passwordhash)){
                session_regenerate_id();
                $_SESSION["SESS_MEMBER_ID"] = $id;
                $_SESSION["SESS_USERNAME"] = $username;
                $_SESSION["SESS_PASSWORD"] = $password;
                $_SESSION["SESS_FIRSTNAME"] = $firstName;
                $_SESSION["SESS_LASTNAME"] = $lastName;

                session_write_close();

                header("location:  http://www.greyavenue.ph/shoplogin/inventoryadmin.php");
                die();  
            }
            else {
                //Login failed
                $errmsg_arr[] = "Username and Password do not match";
                $errflag = true;
                if($errflag) {
                    $_SESSION["ERRMSG_ARR"] = $errmsg_arr;
                    session_write_close();
                    header("location: index.php");
                    die();
                }
            }
        }
        else{
            //Login failed
            $errmsg_arr[] = "Username and Password not found";
            $errflag = true;
            if($errflag) {
                $_SESSION["ERRMSG_ARR"] = $errmsg_arr;
                session_write_close();
                header("location: http://www.greyavenue.ph/shoplogin/index.php");
                die();
            }
        }
    }
}
?>

我很困惑,因为当我之前没有对密码进行哈希处理时,登录似乎可以正常工作并将浏览器重定向到页面,但现在在使用哈希函数更改代码后,URL 仍保留在此 php 文件中。

非常感谢您花时间提前阅读并回答我的问题!谢谢!

最佳答案

逻辑错误:

你的代码,精简版:

if ($sql = $conn->prepare("SELECT id, username, password, firstName, lastName FROM users WHERE username = ?")){

    // retrieve result

    if ($result > 0){
        // check result
    }
}
else {
    // select from admin
}

如果您有一个不适合的用户/密码元组,$result 为 0。 在这个特定的 cse 中,不会命中任何重定向分支,页面只会显示为空。

您需要进行类似于以下的更改:

if ($sql = $conn->prepare("SELECT id, username, password, firstName, lastName FROM users WHERE username = ?")){
  // handle sql error
}
// retrieve result
if ($result > 0){
        // check result, either logged in or error
}

// no result in users, check admin:
if ($sql = $conn->prepare("SELECT id, username, password, firstName, lastName FROM admin WHERE username = ?")){
  // handle sql error
}
// retrieve result
if ($result > 0){
        // check result, either logged in or error
}

关于php - 提交登录表单后,URL 保留在操作 php 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30597311/

有关php - 提交登录表单后,URL 保留在操作 php 上的更多相关文章

  1. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  2. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  3. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  4. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

  5. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  6. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  7. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

  8. ruby-on-rails - Rails - 使用/自定义 URL : '/dashboard' 指定根路径 - 2

    如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b

  9. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  10. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

随机推荐