PDO 'undefined index'通知



我有一个新闻列表,我还有一个搜索新闻的表格。

因此,我创建了一个会话,用于存储一个 SQL 命令,如果提交搜索表单,我想运行该命令,到目前为止它运行良好。

问题是当表单未提交时,我的 SQL 命令在 SQL 语句中具有{$_SESSION[where]},然后我遇到错误未定义的索引"where"。

所以,我遇到的问题是,当我没有向我的$search传递任何值时,SQL 命令需要 $search 的值,然后因为我没有传递这个值,我收到错误说没有定义这样的变量。

我已经尝试了几个小时的各种替代方案,但我没有找到任何好的解决方案,你能给我一点帮助吗?

我有一个名为 sendForm 的表单,然后在用户提交表单时有以下代码:

<?php if(isset($_POST['sendForm']))
    {
        $search = $_POST['search'];
        if(!empty($search) && $search != 'Search...')
        {
            $_SESSION['where'] = "AND titulo LIKE '%$search%'";
            header('Location: index2.php?exe=posts/news');          
        }
        //clean search
        else
        {
            unset($_SESSION['where']);
            header('Location: index2.php?exe=posts/news');
        }
    }
    ?>

然后我有文章的阅读声明,还有搜索结果:

$pag = (empty($_GET['pag']) ? '1' : $_GET['pag']);
$max = 15; 
$begin = ($pag * $max) - $max;
$readNews = $pdo->prepare("SELECT * from news {$_SESSION[where]}  ORDER BY data DESC LIMIT ?, ?");   
$readNews->bindValue(1, $begin,PDO::PARAM_INT);
$readNews->bindValue(2, $max,PDO::PARAM_INT);
$readNews->execute();

如果我理解正确的话;如果用户/您不提供$search查询,则取消设置会话变量 -> $_SESSION['where'] if 块:

if(!empty($search) && $search != 'Search...')
        {
            $_SESSION['where'] = "AND titulo LIKE '%$search%'";
            header('Location: index2.php?exe=posts/news');          
        }
        //clean search
        else
        {
            unset($_SESSION['where']);
            header('Location: index2.php?exe=posts/news');
        }

但是,您没有做的是在进入PDO语句时检查会话变量是否已设置。查看您的代码段时很明显:

$pag = (empty($_GET['pag']) ? '1' : $_GET['pag']);
$max = 15; 
$begin = ($pag * $max) - $max;
$readNews = $pdo->prepare("SELECT * from news {$_SESSION[where]}  ORDER BY data DESC LIMIT ?, ?");   
$readNews->bindValue(1, $begin,PDO::PARAM_INT);
$readNews->bindValue(2, $max,PDO::PARAM_INT);
$readNews->execute();

假设在此之前确实检查了session_start(),则需要添加检查以查看$_SESSION['where']是否已设置。

这样的事情应该就足够了:

if(isset($_SESSION['where']) && !empty($_SESSION['where'])) {
    // Do PDO query stuff
} else {
    // No $search query supplied.....do something else.
}

如果我错了,请纠正我。

更改

<?php if(isset($_POST['sendForm']))

<?php if(isset($_POST['sendForm']) && isset($_POST['search']))

最新更新