【问题标题】:Session if else statement会话 if else 语句
【发布时间】:2016-11-21 05:30:40
【问题描述】:

如果以用户身份登录,我正在尝试显示信息 A,如果以管理员身份登录,则显示信息 B。这里的问题是,我只能执行第一个if statementelse statement,这意味着我可以登录。但是,它永远不会进入else if statement。谁能帮帮我,我不确定这里有什么问题。

<?php
$dbhost = "localhost";
$dbuser = "root";
$dbpassword = "";
$dbdatabase = "test";
$db = mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_select_db($dbdatabase, $db);
?>

somewhere.php

<?php
if(!isset($_SESSION)){
    session_start();
}
include("configuration.php");
?>
<html>
<body>
<?php

    if (isset($_SESSION['SESS_EXIST']) == true && isset($_SESSION['SESS_TYPE']) == 'A' ){ ?>
            //this is the user html information form
        <?php } 
    else if (isset($_SESSION['SESS_EXIST']) == true && isset($_SESSION['SESS_TYPE1']) == 'B' ){ ?>
            //this is the admin html information form
    <?php } else { ?>
            //ask user/admin to login html form
            <form action ="login.php">
               <button type="submit" name="login" class="btn-primary">Sign Up</button>
            </form>
    <?php } ?>
</body>
</html>

login.php

<?php
session_start();
require("configuration.php");
if(isset($_SESSION['SESS_EXIST']) == TRUE) {
header("Location: somewhere.php");
die();
}
$email = $_POST['Email'];
$pass =  $_POST['Pass'];

$sql = "SELECT * FROM user WHERE Email='$email' and Pass ='$pass' " ;
$res = mysql_query($sql);
$rows = mysql_num_rows($res);

$sql1 = "SELECT * FROM admin WHERE Email='$email' and Pass ='$pass' " ;
$res1 = mysql_query($sql1);
$rows1 = mysql_num_rows($res1);

if($rows == 1)
{
$row = mysql_fetch_assoc($res);
$_SESSION['SESS_EMAIL'] = $row['Email'];
$_SESSION['SESS_NAME'] = $row['Name'];
$_SESSION['SESS_PASS'] = $row['Pass'];
$_SESSION['SESS_TYPE'] = 'A';
$_SESSION['SESS_LOGGED'] = 1;
header("Location: somewhere.php");
die();

}
else if($rows1 == 1)
{
$row1 = mysql_fetch_assoc($res1);
$_SESSION['SESS_EMAIL1'] = $row['Email'];
$_SESSION['SESS_NAME1'] = $row['Name'];
$_SESSION['SESS_PASS1'] = $row['Pass'];
$_SESSION['SESS_TYPE1'] = 'B';
$_SESSION['SESS_LOGGED'] = 1;
header("Location: somewhere.php");
die();
}
else {
echo '<script language = "javascript">';
echo 'alert("Fail login")';
echo '</script>';
echo "<script>window.location.assign('somewhere.php')</script>";
die();
}
?>

【问题讨论】:

  • isset($_SESSION['SESS_TYPE']) 返回 true(有时为 false)。而'A' 始终是true
  • 使用准备好的语句来防止 SQL 注入
  • 我可以知道为什么 'A' 总是返回 true ,因为我设置了 'B' 也是 true 吗?
  • 你用的是什么版本的php?
  • somewhere.php 脚本末尾有一个额外的 ?&gt;(php 结束标记)

标签: php html session isset


【解决方案1】:

你好,你的情况永远不会成真

if (isset($_SESSION['SESS_TYPE']) && $_SESSION['SESS_TYPE'] == 'A') {
   // your   code here
}


  `isset` — Determine if a `variable` is set and is not `NULL`. `Returns` `TRUE` if var exists and has value other than NULL, FALSE otherwise. 

【讨论】:

    【解决方案2】:

    我认为您在注销时不会重置 SESSION。试试这个:
    Login.php

    <?php
    session_start();
    require("configuration.php");
    if(isset($_SESSION['SESS_EXIST']) == TRUE) {
    header("Location: somewhere.php");
    die();
    }
    session_unset();
    $email = $_POST['Email'];
    $pass =  $_POST['Pass'];
    
    $sql = "SELECT * FROM user WHERE Email='$email' and Pass ='$pass' " ;
    $res = mysql_query($sql);
    $rows = mysql_num_rows($res);
    
    $sql1 = "SELECT * FROM admin WHERE Email='$email' and Pass ='$pass' " ;
    $res1 = mysql_query($sql1);
    $rows1 = mysql_num_rows($res1);
    
    if($rows == 1)
    {
    $row = mysql_fetch_assoc($res);
    $_SESSION['SESS_EMAIL'] = $row['Email'];
    $_SESSION['SESS_NAME'] = $row['Name'];
    $_SESSION['SESS_PASS'] = $row['Pass'];
    $_SESSION['SESS_TYPE'] = 'A';
    $_SESSION['SESS_LOGGED'] = 1;
    header("Location: somewhere.php");
    die();
    
    }
    else if($rows1 == 1)
    {
    $row1 = mysql_fetch_assoc($res1);
    $_SESSION['SESS_EMAIL1'] = $row['Email'];
    $_SESSION['SESS_NAME1'] = $row['Name'];
    $_SESSION['SESS_PASS1'] = $row['Pass'];
    $_SESSION['SESS_TYPE1'] = 'B';
    $_SESSION['SESS_LOGGED'] = 1;
    header("Location: somewhere.php");
    die();
    }
    else {
    echo '<script language = "javascript">';
    echo 'alert("Fail login")';
    echo '</script>';
    echo "<script>window.location.assign('somewhere.php')</script>";
    die();
    }
    ?>
    

    您的 If 语句也不正确。正如其他答案中提到的,它应该是这样的:
    somewhere.php Edit

    <?php
    if(!isset($_SESSION)){
        session_start();
    }
    include("configuration.php");
    ?>
    <html>
        <body>
        <?php
        if(isset($_SESSION['SESS_EXIST'])){
            if ($_SESSION['SESS_EXIST'] == true && $_SESSION['SESS_TYPE'] == 'A' ){
                ?> //this is the user html information form <?php
            } 
            else if ($_SESSION['SESS_EXIST'] == true && $_SESSION['SESS_TYPE1'] == 'B' ){
                ?> //this is the admin html information form <?php
            }
        } else { ?> //ask user/admin to login html form
            <form action ="login.php">
                <button type="submit" name="login" class="btn-primary">Sign Up</button>
            </form>
        <?php
        }
        ?>
        </body>
    </html>
    

    【讨论】:

    • 我得到一个错误 undefined index on else if ($_SESSION['SESS_EXIST'] == true && $_SESSION['SESS_TYPE1'] == 'B' ) 即使第一个是正确的
    • 我用 isset() 添加了一个外部 If 语句。
    • 您不需要带有外部检查的$_SESSION['SESS_EXIST'] == trues。不过,$_SESSION['SESS_TYPE'] 也会发出通知。
    • if ($_SESSION['SESS_EXIST'] == true && $_SESSION['SESS_TYPE'] == 'A') 和 else if ($_SESSION[' SESS_EXIST'] == true && $_SESSION['SESS_TYPE1'] == 'B'){
    • 这是一个通知,而不是一个错误。而且这种类型的通知不会影响您的脚本。
    猜你喜欢
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2017-02-05
    • 2015-07-06
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多