2016-07-18 11 views
3

ユーザーとしてログインすると情報Aを表示しようとしています。管理者としてログインすると情報Bを表示しようとしています。ここで問題となるのは、最初にif statementelse statementを実行して、ログインできることです。しかし、それは決してelse if statementに入ることはありません。誰も私を助けることができる、私はここで何が問題なのか分からない。セッションif else文

<?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(); 
} 
?> 
+0

'のISSET($ _ SESSION [ 'SESS_TYPE'])'戻っ__true__(そして時には偽):他の回答で述べたように、それはこのようにする必要があります。そして、「A」は常に__true__です –

+0

SQLインジェクションを防ぐためにPrepared Statementを使用してください –

+0

私は 'B'もtrueであると仮定すると 'A'が常に真を返す理由を知っているかもしれませんか? – xodebox95

答えて

1

あなたはログアウトします。これを試してみてください:
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編集

<?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> 
+0

最初のonが正しくても、else($ _SESSION ['SESS_EXIST'] == true && $ _SESSION ['SESS_TYPE1'] == 'B')でエラーが未定義です。 – xodebox95

+0

外部If-Statementを追加しました。 isset()を使って。 –

+0

外部チェックで '$ _SESSION ['SESS_EXIST'] == true'sは必要ありません。通知は '$ _SESSION ['SESS_TYPE']'でもスローされます。 – chris85

1

こんにちはあなたの状態は決して得ない、私はあなたがあなたのSESSIONときをリセットしないと思う真

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.