2016-07-18 17 views
3

Ich versuche, die Informationen A anzuzeigen, wenn ich mich als Benutzer einlogge, und Information B, wenn ich mich als Administrator anmelde. Das Problem hierbei ist, dass ich nur die ersten if statement und die else statement ausführen kann, was bedeutet, dass ich mich einloggen kann. Allerdings wird es nie in die else if statement geraten. Kann mir jemand helfen, ich bin mir nicht sicher, woran das liegt.Session if else Anweisung

<?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'])' kehrt __true__ (und manchmal falsch). Und ''A'' ist immer __true__ –

+0

Verwenden Sie vorbereitete Anweisungen, um SQL-Injektionen zu verhindern –

+0

kann ich wissen, warum' A 'immer wahr zurückgibt, da ich gesetzt habe' B 'ist auch wahr? – xodebox95

Antwort

1

Ich glaube, Sie nicht zurücksetzen Ihre Sitzung, wenn Sie melden sich ab. Versuchen Sie folgendes:
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(); 
} 
?> 

Ihre If-Statement ist auch nicht richtig. Wie in anderen Antworten erwähnt es so sein sollte:
somewhere.phpbearbeiten

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

Ich habe einen Fehler undefinierten Index auf else if ($ _SESSION ['SESS_EXIST'] == Wahr && $ _SESSION ['SESS_TYPE1'] == 'B') obwohl die erste korrekt war – xodebox95

+0

Ich habe eine äußere If-Anweisung hinzugefügt mit isset(). –

+0

Sie brauchen nicht die '$ _SESSION ['SESS_EXIST'] == true's mit der äußeren Prüfung. Es werden jedoch auch Hinweise für '$ _SESSION ['SESS_TYPE']' geworfen. – chris85

1

Hallo Ihr Zustand wird nie wahr

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.