2017-02-06 10 views
1

数日前にこの作業をしましたが、ユーザーがアカウントにサインインするとセッションIDが画面に表示されないようです。私は私が取り組んできた2つのPHPを持っています。私はチェッカーを使ってエラーをチェックしました。下の内容では、ユーザーがサインインすると、サイトのヘッダー内にセッションIDが表示されますが、正しくログインしていても(自分のデータベースにログインしていることを確認したにもかかわらず)あなたはログインしていません! "PHP - ユーザーがサインインした後に情報を表示する際の問題

Login.inc.php

<?php 
    include '../dbh.php'; 

    $email = $_POST['email']; 
    $pwd = $_POST['pwd']; 

    $sql = "SELECT * FROM user WHERE email='$email' AND pwd='$pwd'"; 
    $result = mysqli_query($conn, $sql); 

    if (!$row = mysqli_fetch_assoc($result)) { 
     echo "You are not signed in!"; 
    } else { 
     $_SESSION['id'] = $row['id']; 
    } 
    header("Location: ../index.php"); 
    ?> 

site_header.phpは

<head> 
    <?php 
     session_start(); 
     ?> 
     <link rel="stylesheet" type="text/css" href="vendors/css/normalize.css"> 
     <link rel="stylesheet" type="text/css" href="vendors/css/grid.css"> 
     <link rel="stylesheet" type="text/css" href="vendors/css/ionicons.min.css"> 
     <link rel="stylesheet" type="text/css" href="css/style.css"> 
     <link href="https://fonts.googleapis.com/css?family=Lato:400,300,100,300,200italic" rel="stylesheet" type="text/css"> 
     <title>iBPBuyer</title> 
</head> 
<body> 
    <header> 
     <nav> 
     <ul> 
      <li><a href="index.php">HOME</a></li> 
      <li><a href="signup.php">SIGN UP</a></li> 
      <?php 
       echo "<form action='includes/login.inc.php' method='POST'> 
        <input type='email' name='email' placeholder='E-Mail'> 
        <input type='password' name='pwd' placeholder='Password'> 
        <button type='submit'>Login</button> 
       </form>"; 
       ?> 
      <?php 
       if(isset($_SESSION['id'])) { 
        echo $_SESSION['id']; 
       } else { 
        echo "You are not logged in!"; 
       } 
       ?> 
     </ul> 
     </nav> 
    </header> 
+1

は 'にsession_startを入れて行うことができ、認証済みフラグ

<?php include '../dbh.php'; session_start(); //THIS APPEARS TO BE MISSING $email = $_POST['email']; $pwd = $_POST['pwd']; $sql = "SELECT * FROM user WHERE email='$email' AND pwd='$pwd'"; $result = mysqli_query($conn, $sql); if (!$row = mysqli_fetch_assoc($result)) { //You have Session no matter what for this user $_SESSION['authenticated'] = false; } else { $_SESSION['authenticated'] = true; $_SESSION['id'] = $row['id']; } header("Location: ../index.php"); ?> 

を使用することをお勧めします()' PHPスクリプト –

+0

@Ayaouの初めに、私は誤ってそれをカット投稿したコードスクリプトのうち、site_header.phpファイルの上にある –

+0

@BenParryログインしていますか? – nerdlyist

答えて

1

を参照してください。私はその後、あなたのビューで、あなたがこの

<?php 
if($_SESSION['authenticated']) { 
    echo $_SESSION['id']; 
} else { 
    echo "You are not logged in!"; 
} 
?> 
0

はあなたが送っbefor header("Location: ../index.php");を持っているか、何をエコーする必要があります。

ヘッダーがecho "You are not logged in"で送信されたため、リダイレクトする別のヘッダーを送信します。

エコーをスキップするか、Jsを使用してユーザーをリダイレクトすると回避できます。

if (!$row = mysqli_fetch_assoc($result)) { 
    header("Location: ../index.php"); 

} else { 
    $_SESSION['id'] = $row['id']; 
} 

これは同じで、それがヘッダにセッションクッキーを送信する必要があるためSESSION_STARTには適用され、さらに下

ALOSを働くだろう。

SOこのヘッドタグも問題

<head> 
    <?php 
     session_start(); 
     ?> 

があなたのエラーログを確認し引き起こしている、私はあなたがヘッダを持っている賭けるすでにwraningを送ってきました。

したがって、セッションを開始する前、またはheader()を使用する前に、何も送信またはエコーすることはできません。別の解決策は、出力バッファを使用することです。あなただけのものをエコーさせたくないhttp://php.net/manual/en/function.ob-start.php

http://php.net/manual/en/function.header.php

http://php.net/manual/en/function.session-start.php

関連する問題