2014-04-04 132 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