2016-07-14 9 views
0

ユーザーログインに基づいて別のヘッダーを表示しようとしています。ユーザーはlogin.phpを使用してログインできます。しかし、ユーザがログインしていないときやログインしていないときにheader.phpを表示することができません。ログインしているときにプロフィールフォームの内容を表示し、その逆も同様です。誰も助けることができますか?ログイン時にユーザーをリダイレクト

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
    <body> 
     <?php 
     require("header.php"); 
     ?> 
     <div class = "container"> 
     //form content 
     </div> 
    </body> 

</html> 

config.phpの

<?php 
$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpassword = "123"; 
$dbdatabase = "db"; 
$db = mysqli_connect($dbhost, $dbuser, $dbpassword) or die("couldn't connect to the Database"); 
mysqli_select_db($db, $dbdatabase) or die ("couldn't find db"); 
?> 

header.phpの

<?php 
if(!isset($_SESSION)){ 
    session_start(); 
} 
if (isset($_SESSION['SESS_LOGGEDIN']) == TRUE) { 
    session_unset(); 
    session_regenerate_id(); 
} 
include("config.php"); 
?> 
!DOCTYPE html> 
<html> 
    <head> 
    </head> 
    <body> 
     <?php 
    //if user is logged in, display navigation bar with user data 
    if (isset($_SESSION['SESS_LOGGEDIN']) == TRUE){ ?> 
      <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"> 
       //navigation - profile form content 
      </nav>  
    <?php} 
    //if user is not logged in, ask them to login 
    else { ?> 
      <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"> 
       //user log in here 
       //navigation - login form content 
      </nav> 

    <?php } ?> 
    </body> 

</html> 

login.php

<?php 
session_start(); 
require_once("config.php"); 

if(isset($_SESSION['SESS_LOGGEDIN'])) { 
header("Location: index.php"); 
die(); 
} 


$useremail = $_POST['Lemail']; 
$userpassword = $_POST['Lpass']; 

if ($useremail&&$userpassword) { 

    $sql = mysqli_query($connect,"SELECT * FROM users WHERE userEmail='$useremail' and userpassword = $userpassword"); 
    $numrows = mysqli_num_rows($sql); 

    if ($numrows!=0) { 

     while ($row = mysqli_fetch_assoc($sql)) { 
      $_SESSION['SESS_LOGGEDIN'] = 1; 
      $dbemail = $row['email']; 
      $dbpassword = $row['password']; 
      $dbname = $row['firs_Name']; 
     } 
     if ($useremail==$dbemail&&$userpassword==$dbpassword) { 
       header("Location: index.php"); 
      $_SESSION['Lemail']= $useremail; 
      die(); 

     } 
     else 
      header("Location: index.php"); 
      die(); 
    } 
    else 
     die("That user doesn't exist!"); 
} 
else 
    die("please enter username and password"); 

?>

+0

ユーザがログインしているときに 'session_unset()'を呼び出すのはなぜですか? – Barmar

+0

'<!DOCTYPE html>'の先頭に '<'がありません。 – Barmar

+0

'mysql_fetcxh_assoc'は' mysql_fetch_assoc'でなければなりません。さらに実行されないようにリダイレクトした後に 'die()'や 'exit()'を必ず含めてください。最後に、スクリプトを開始するときに 'session_start()'を一度呼び出すだけで、設定したい変数ごとに呼び出すことはありません。 – jpschroeder

答えて

-2

私はあなたを承認しない、あなたはajaxやgotoすることができます。

$.ajax({ 
 
      type:"POST", 
 
      async:false, 
 
      url:"this.php", 
 
      data:{url:"a"}, 
 
      beforeSend: function() { 
 
      alertLoad('loding...'); 
 
      }, 
 
      success:function(GetRes){ 
 
       thisdom.html(GetRes); 
 
      }, 
 
      error:function(){ 
 
       alertNew('error.'); 
 
      }   
 

 

 
    });

this.php <?php echo $this_data; ?>

+2

あなたは間違った質問に答えましたか? –

0

コメントが示唆したものといくつかの改訂コード:

<?php 
session_start(); 
require_once("config.php"); 
if(isset($_SESSION['SESS_LOGGEDIN'])) { 
    header("Location: index.php"); 
    die(); 
} 

$useremail = $_POST['Lemail']; 
$userpassword = $_POST['Lpass']; 
$loginres = mysqli_query("SELECT * FROM users WHERE userEmail='$useremail'"); 
$numrows = mysqli_num_rows($loginres); 
if($numrows == 1) 
{ 

    $loginrow = mysql_fetch_assoc($loginres); 
    $_SESSION['SESS_LOGGEDIN'] = 1; 
    $_SESSION['SESS_USEREMAIL'] = $loginrow['userEmail']; 
    $_SESSION['SESS_USERPASS'] = $loginrow['userpassword']; 
    $_SESSION['SESS_USERNAME'] = $loginrow['username']; 
    header("Location: index.php"); 
    die(); 
} 
else { 
    header("Location: http://" .$_SERVER['HTTP_HOST']. $_SERVER['SCRIPT_NAME'] . "?error=1"); 
    die(); 
} 

他のいくつかの注意事項:すべての場合は決算?>をオフのままにファイルにPHPが含まれており、出力が出血するのを防ぎますバッファこのコードでは、ユーザーのパスワードを確認することはありません。おそらく良い考えです。最後に、ユーザーのパスワードをセッション変数として保存することは決して適切な理由ではありません。

+0

このコードには他にも多くの問題があり、完全に失敗します。 '$ loginsql'と' $ loginres'行を見てください。これは完全に書き直す必要があります。 :) –

+0

本当です。最初にmysqliを使用することは言うまでもありません。 – jpschroeder

+0

さて、Mysqliはまだうまく動作しています(彼はMysqlに固執し、データベースベンダーを変更しないと仮定しています)が、準備された文を使うべきです。また、電子メールだけでなく、パスワードでユーザーを検証する必要があります。p –

関連する問題