在查询中引用SESSION()

时间:2011-08-07 10:54:59

标签: php mysql

我正在尝试从SESSION()控制器引用存储在SESSION()中的变量,我在使用代码时遇到了一些麻烦。我所拥有的是两张桌子,一张用于文章,一张用于作者。登录的当前用户的作者ID通过$id中access.inc.php中的SQL查询存储在我的function databaseContainsAuthor($email, $password, &$id)变量中,然后在function userIsLoggedIn() and stored in $_SESSION['id']中引用

包含> 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;
    }
}

现在我有变量$id,其中包含当前用户的id,存储在$_SESSION['id']中,我想在index.php的SQL查询中使用SESSION()在我的文章表中插入作者的id及其文章,以便作者和作者提交的文章被链接。我只是在执行正确的代码时遇到一些麻烦,在我的SQL查询中引用$_SESSION['id']为index.php

文章&gt; 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']))下,但我不确定这是否是用于执行此操作的礼仪语法。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

代码似乎很好。检查$ id是否具有您希望它在查询之前的值,因为如果每次您的authorid必须具有一些始终显示的默认值时返回零,则在这种情况下为零。