2011-08-07 6 views
0

SESSION()に格納された変数をSESSION()コントローラから参照しようとしていますが、コードに問題があります。私が持っているものは、記事用と著者用の2つのテーブルです。現在ログインしているユーザの作成者IDは、次にfunction userIsLoggedIn() and stored in $_SESSION['id']クエリでSESSION()を参照する

> access.inc.php

<?php 
function userIsLoggedIn() 
{ 
    if (isset($_POST['action']) and $_POST['action'] == 'login') 
    { 
     if (!isset($_POST['email']) or $_POST['email'] == '' or 
      !isset($_POST['password']) or $_POST['password'] == '') 
     { 
      $GLOBALS['loginError'] = 'Please fill in both fields'; 
      return FALSE; 
     } 
     $password = md5($_POST['password'] . 'chainfire db'); 

     if (databaseContainsAuthor($_POST['email'], $password, $id)) 
     { 
     include 'db.inc.php'; 
      session_start(); 
      $_SESSION['loggedIn'] = TRUE; 
      $_SESSION['email'] = $_POST['email']; 
      $_SESSION['password'] = $password; 
      $_SESSION['id'] = $id; 
      return TRUE; 
     } 
     else 
     { 
      session_start(); 
      unset($_SESSION['loggedIn']); 
      unset($_SESSION['email']); 
      unset($_SESSION['password']); 
      unset($_SESSION['id']); 
      $GLOBALS['loginError'] = 'The specified email address or password was incorrect.'; 
      return FALSE; 
     } 
    } 
    if (isset($_POST['action']) and $_POST['action'] == 'logout') 
    { 
     session_start(); 
     unset($_SESSION['loggedIn']); 
     unset($_SESSION['email']); 
     unset($_SESSION['password']); 
     unset($_SESSION['id']); 
     header('Location: ' . $_POST['goto']); 
     exit(); 
    } 
    session_start(); 
    if (isset($_SESSION['loggedIn'])) 
    { 
     return databaseContainsAuthor($_SESSION['email'], $_SESSION['password'], $_SESSION['id']); 
    } 
} 
function databaseContainsAuthor($email, $password, &$id) 
{ 
    include 'db.inc.php'; 

    $email = mysqli_real_escape_string($link, $email); 
    $password = mysqli_real_escape_string($link, $password); 

    $sql = "SELECT COUNT(*) FROM author 
      WHERE email='$email' AND password='$password'"; 
    $result = mysqli_query($link, $sql); 

    if (!$result) 
    { 
     $error = 'Error searching for author.'; 
     include 'error.html.php'; 
     exit(); 
    } 
    $row = mysqli_fetch_array($result); 

    $sql = "SELECT id FROM author 
      WHERE email='$email'"; 
    $id = mysqli_query($link, $sql); 
    if (!$id) 
    { 
     $error = 'Error searching for id.'; 
     include 'error.html.php'; 
     exit(); 
    }  

    if ($row[0] > 0) 
    { 
     return TRUE; 
    } 
    else 
    { 
     return FALSE; 
    } 
} 
を含んで参照、 function databaseContainsAuthor($email, $password, &$id)でaccess.inc.phpにSQLクエリを介して私の $id変数に格納されています

$_SESSION['id']に保存されている現在のユーザーのIDを含む変数$idがありましたので、index.phpのSQLクエリでSESSION()を使用して、記事のテーブルに記事のIDを挿入します。著者と投稿者が提出した記事はリンクされています。私はちょうどindex.phpのための私のSQLクエリで

記事を$_SESSION['id']を参照するために、正しいコードを実装、トラブルのビットを持っています> index.phpを

<?php 
include_once $_SERVER['DOCUMENT_ROOT'] . 
     '/includes/magicquotes.inc.php'; 
include $_SERVER['DOCUMENT_ROOT'] . 
     '/includes/access.inc.php'; 

if (isset($_GET['add'])) 
    if (!userIsLoggedIn()) 
{ 
     include $_SERVER['DOCUMENT_ROOT'] . '/includes/login.inc.html.php'; 
     exit(); 
} 
    else 
{ 
    $pagetitle = 'New Article'; 
    $action = 'addform'; 
    $text = ''; 
    $authorid = ''; 
    $id = ''; 
    $button = 'Add article'; 

    include 'form.html.php'; 
    exit(); 
} 
if (isset($_GET['addform'])) 
{ 
    include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php'; 

    $text = mysqli_real_escape_string($link, $_POST['text']); 
    $id = $_SESSION['id']; 

    $sql = "INSERT INTO article SET 
      articletext='$text', 
      articledate=CURDATE(), 
      authorid= '$id'"; 
    if (!mysqli_query($link, $sql)) 
    { 
     $error = 'Error adding submitted article: ' . mysqli_error($link); 
     include 'error.html.php'; 
     exit(); 
    } 

    header('Location: .'); 
    exit(); 
} 
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php'; 

$result = mysqli_query($link, 'SELECT id, articletext FROM article'); 
if (!$result) 
{ 
    $error = 'Error fetching articles: ' . mysqli_error($link); 
    include 'error.html.php'; 
    exit(); 
} 

while ($row = mysqli_fetch_array($result)) 
{ 
    $articles[] = array('id' => $row['id'], 'text' => $row['articletext']); 
} 

include 'articles.html.php'; 
?> 

私が参照しようとしているSESSION()if (isset($_GET['addform']))ですが、これを使用するための儀式構文であるかどうかは不明です。どんな助けでも大歓迎です!

+4

スクリプトの最上部に 'error_reporting(E_ALL);'を追加して質問を編集し、そのエラーを含めると... –

+0

Lawrence - 'error_reporting(E_ALL);を追加するとエラーはないようです。 '、私は文法が正しいと思うので、記事が提出され、記事テーブルのauthoridカラムが0を返します。コードが正しい場合、記事を投稿した著者のIDを返します。 – rumspringa00

+0

あなたはそのOOPの事を調べるべきです。何かを学ぶかもしれない –

答えて

0

コードには問題はありません。$ idにはクエリの直前の値があるかどうかを確認してください。オーサライドが常に表示されるデフォルト値(この場合はゼロ)を持つ必要があるたびにゼロを返すためです。

関連する問題