Php 未定义变量?

Php 未定义变量?,php,mysql,Php,Mysql,第15行和第21行中,$id变量出现未定义的变量错误,有人能解释一下原因吗?我看不出有什么问题 <?php function userIsLoggedIn() { if (isset($_POST['action']) and $_POST['action'] == 'login') { if (!isset($_POST['email']) or $_POST['email'] == '' or !isset($_POST['pas

第15行和第21行中,
$id
变量出现未定义的变量错误,有人能解释一下原因吗?我看不出有什么问题

<?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;
    }
}
在函数中更改(或定义)的变量不会影响脚本的其余部分。例如:

<?php
function changeVariabe($person) {
    $person = 'Bob';
}
$person = 'Alice';
changeVariable($person);
echo "Hello $person!"; // Outputs: Hello Alice!
有几件事 在使用变量$id之前,应先定义它(不是必需的,但良好的做法)

比如说

$id = NULL;
if (databaseContainsAuthor($_POST['email'], $password, $id)) 
另外,在databaseContainsAuthor函数中设置$id并不意味着$id将在该函数的作用域之外更改

你可以让它全球化,但这被认为是不好的做法

您的函数数据库也包含Sautor

包含此代码

if ($row[0] > 0)
{
    return TRUE;
}
else
{
    return FALSE;
}
它将返回TRUE或FALSE。但是请注意,一旦代码返回一个值,之后的代码都不会运行

这意味着这一部分也可能被注释掉,因为它位于return语句之后,永远不会运行

$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();
    }    

谢谢,使用$id变量的原因是将作者id存储在会话()中,这样我就可以将该id与作者提交的文章链接起来。如果有更好的方法在会话()中存储当前用户的id,即当前登录的用户,我完全赞成。您尝试做的很好,请将If/return语句放在分配$id=mysqli的代码位之后。。。。。将此函数定义更改为databaseContainsAuthor($email、$password、$id),我按照您的建议执行了操作,但在第14行和第21行中,$id仍然存在未定义的变量错误。有什么想法吗?Op使用修订后的代码进行更新。谢谢。你换了这个位子吗?函数数据库containsautor($email、$password、$id)注意$id前面的(&F)就是它,再次感谢!现在,我只需要找到一种在index.php查询中引用$id的方法。。这就是我迷路的地方,我已经习惯了javascript。可能是
if ($row[0] > 0)
{
    return TRUE;
}
else
{
    return FALSE;
}
$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();
    }