PHP登录重定向

PHP登录重定向,php,login,Php,Login,我正在创建一个页面,但遇到了一个问题。下一个问题是: 我有index.php,其中包含“header.php”和“footer.php” 在header.php中,我有一个带有用户名和密码字段的表单,该表单有一个名为login_的提交表单。下面是header.php中的代码: <?php session_start(); include 'functions.php'; if (isset($_POST['login_form'])) { $username = mysql_re

我正在创建一个页面,但遇到了一个问题。下一个问题是:

我有index.php,其中包含“header.php”和“footer.php”

在header.php中,我有一个带有用户名和密码字段的表单,该表单有一个名为login_的提交表单。下面是header.php中的代码:

<?php
session_start();
include 'functions.php';
if (isset($_POST['login_form'])) {

    $username = mysql_real_escape_string($_POST['username']);
    $password = mysql_real_escape_string($_POST['password']);

    $_SESSION['username'] = $username;
    $_SESSION['password'] = $password;
    $username = $_SESSION['username'];
    $password = $_SESSION['password'];

        if (!empty($username) && !empty($password)) {

            connectDB();

   $sql="SELECT id, name, type FROM users WHERE username = '$username' AND password ='$password'";
   $result = mysql_query($sql);

   if(mysql_num_rows($result) == 0 ) {
                $error = "No user with that combination username and password! ";
                echo $error;
                header("Location:index.php");
            } else {
                $_SESSION['username'] = $username;
                echo "Some message " . $username;
                header("Location:index.php");
        }    }
编辑
这个基于
mysqli.*
的方法适合我,它已经类似于我的一个脚本了

N.B.:出于测试目的,我注释掉了
标题以及引发错误的一行代码

旁注:我知道这是一个大学项目,但以明文形式存储密码是不安全的。仅供参考

<?php
session_start();
// include 'functions.php';

$link = new mysqli("localhost","xxx", "xxx", "xxx");

if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

if (isset($_POST['login_form'])) { // is my submit button name below in form

    $username = mysqli_real_escape_string($link,$_POST['username']);
    $password = mysqli_real_escape_string($link,$_POST['password']);

    $_SESSION['username'] = $username;
    $_SESSION['password'] = $password;
    $username = $_SESSION['username'];
    $password = $_SESSION['password'];

        if (!empty($username) && !empty($password)) {

   $sql="SELECT * FROM users WHERE username = '$username' AND password ='$password'";

   $result = mysqli_query($link,$sql);

// throws an error
//   if(mysqli_num_rows($result) == 0 ) {

// works properly
   if(mysqli_num_rows($result) !=1 ) {
                $error = "No user with that combination username and password! ";
                echo $error;
                // header("Location:index.php");
            } else {
                $_SESSION['username'] = $username;
                echo "Some message " . $username;
                // header("Location:index.php");
        }

    }

}

?>

<form action="" method="post">
Username: 
<input type="text" name="username">
<br>
Password: 
<input type="text" name="password">
<br>
<input type="submit" name="login_form" value="Submit">
</form>
为您的
if(isset($\u POST['login\u form']){
条件语句添加一个缺少的右括号
}


或者,如果上述操作仍然无法处理已修复的缺失报价,则可能需要使用
选择*

$sql="SELECT * FROM users WHERE username = '$username' AND password ='$password'";

…我成功了。以下是如何做到的:

当用户登录时,因为每个用户都有自己的类型(管理员、用户、版主),所以我想为他显示菜单

身份验证完成后->

用户类型=0是管理员

用户类型=1是用户

header.php

 <?php
 ...
 if(isset($user)) {
  if $user_type == 0} { ?>
    <ul class='submenu'>
                <li><a href='skladiste.php?dnr=3'>Add new item</a> |</li>
                <li><a href='skladiste.php?s=6'>Promet robe</a> |</li>
                <li><a href='admin.php?pregled'>Edit users</a></li>
            </ul><?php } 
    else if ($user_type == 1) { //Menu for user  ?>
            <ul class='submenu'>
                    <li><a href='naruci.php'>Order item</a> |</li>
                    <li><a href='kosarica.php'>My orders</a> |</li>                     
                    <li><a href='artikli.php?stanje'>Edit my profile</a></li>
                </ul>
            <?php }} ?>




因此,在登录后,您可以使用admin、guest、user设置一个变量。然后检查用户是否已登录以及他拥有哪个会话变量。然后在php include中使用if else子句。这样他们将始终看到正确的站点。
$\u session['type']=“admin”;
mysql函数已被弃用。请改用PDO或mysqli!是的,我知道它们已被弃用,但构建此函数是为了上大学,所以我必须使用旧方法。请看我在下面发布的内容。@b3nkyyes,我知道它们已弃用,但构建此函数是为了上大学,所以我必须使用旧方法。关于一个引用,我没有输入错误。我只是编辑了一下d我一分钟前的回答。您发布的代码缺少一个用于您的
if(isset($\u POST['login\u form'])的右括号
}
){
conditional语句。@b3nkyAlso,我刚刚用我自己的信息测试了你的代码,当我从用户中选择id、名称、类型时,它抛出了一个错误,但如果我从用户中选择了,它就起作用了。所以这可能是问题所在。试着用那种方式。另外,不要做if(mysql_num_rows($result)=0)
您可能希望将其更改为
if(mysql_num_rows($result)!=1)
,因为第一个方法无法正常工作。@b3nkyI使用了基于
mysqli_*
的版本进行了编辑,该版本有效(基于我使用的内容,类似于您的代码)@b3nky您只需将DB凭据替换为您自己的凭据。此外,代码中的
$link
基于DB连接,因此如果您的DB变量不同,则需要更改这些凭据。只是想知道哪种方式更好地回显菜单?如上所述或通过“回显”
 <?php
 ...
 if(isset($user)) {
  if $user_type == 0} { ?>
    <ul class='submenu'>
                <li><a href='skladiste.php?dnr=3'>Add new item</a> |</li>
                <li><a href='skladiste.php?s=6'>Promet robe</a> |</li>
                <li><a href='admin.php?pregled'>Edit users</a></li>
            </ul><?php } 
    else if ($user_type == 1) { //Menu for user  ?>
            <ul class='submenu'>
                    <li><a href='naruci.php'>Order item</a> |</li>
                    <li><a href='kosarica.php'>My orders</a> |</li>                     
                    <li><a href='artikli.php?stanje'>Edit my profile</a></li>
                </ul>
            <?php }} ?>