2014-04-04 82 views
1

我有一个新闻列表,我也有一个表单来搜索新闻。Pdo未定义的索引通知

所以我创建了一个会话,它存储了一个sql命令,如果搜索表单被引用,我想运行,并且运行良好。

问题是当表单没有submited时,我的sql命令在sql语句中有{$ _SESSION [where]},然后我有一个未定义索引'where'错误

所以,有林的问题是,当我不传递任何价值,我的$搜索,则SQL命令需要的值$搜索,然后因为我没有通过这个值从来就得到了错误说法没有定义这样的变量。

我正在尝试几个小时的各种替代方案,但我没有找到任何好的解决方案,请给我一点帮助?

我有名字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'); 
     } 

    } 
    ?> 

然后我有我的文章,但也为搜索读statment结果

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

'session_start();'未加载。另外,这是什么'从新闻选择* {$ _SESSION [where]}'? –

+0

将'{$ _SESSION [where]}'更改为'{$ _SESSION [',其中']}'和@ Fred-ii-上面所述^ – Darren

+0

您的查询读为'(“SELECT * from news AND titulo LIKE' $ search%ORDER BY ...'如果'news'和'titulo'是两列,那么你可能打算使用逗号,很难说出你想达到什么样的结果,你想达到什么样的结果? –

回答

1

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

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. 
} 

请纠正我,如果我错了。

+0

感谢您的回答。但是那样我就需要做2读sql语句了吗?一个声明,当$ _SESSION ['where']存在和其他当这个会议不存在的权利? – John23

+1

如果用户提供搜索条件,并且第二个查询将成为您回退的“失效保护”,则第一个查询将会是。这可能是重定向到错误页面或显示所有可搜索内容的查询。这完全取决于你:) – Darren

+0

让我知道这是怎么回事,如果你需要任何帮助! – Darren

0

变化

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

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

感谢您的回答..但不解决:/ – John23

+1

在第二部分中,以$ pag开头的那个,你开始了会话吗? – Vagabond

+0

我开始在包含这一个的其他页面中登录系统的会话! – John23