2016-04-17 12 views
1

ページ作成スクリプトでいくつかの問題があります。次のボタンを使用して新しいページを読み込んだときに、検索用語$search_term = "%" . $_POST['searchBar'] . "%";が失われます。これを避ける方法はありますか?または検索語を設定値として設定しますか?

次のページのURLがとても似ている - http://examplewebsite.com/user/Courses/SearchResultsPage.php?pn=2

これで任意の助けいただければ幸いです。

ページ分割スクリプトの残りは以下のとおりです。

<?php 
    $mysqli = new mysqli('localhost', 'user', 'password','db'); 
    if ($mysqli->connect_errno) 
    { 
     die('Database connection failed'); 
    } 
//$m->set_charset('utf8'); 
//here are my main changes 
//turn errors on to develop, back off when you go live 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$search_term = "%" . $_POST['searchBar'] . "%"; 
$search_param = $_SESSION['$search_term']=$search_term; 
$stmt =$mysqli->prepare("SELECT title, summary, id FROM course WHERE title 
LIKE ?"); 
$stmt->bind_param("s", $search_param); //learn this 
$stmt->execute(); 
$result = $stmt->get_result(); 

//This gets the number of rows in a query result 
$rows = $result->num_rows; 

//number of results per page 
$rows_per_page = 10; 

//shows last page 
$last_page = ceil($rows/$rows_per_page); 
if($last_page < 1){ 
$last_page = 1; 
} 

if(isset($_GET['pn'])){ 
    $page_number = preg_replace('#[^0-9]#', '', $_GET['pn']); 
} else { 
$page_number = 1; 
} 

//makes sure page number is between limits of $page_number 
if($page_number < 1){ 
    $page_number = 1; 
} else if($page_number > $last_page){ 
    $page_number = $last_page; 
} 

// sets the value of items to view 
$limit = 'LIMIT ' .($page_number -1) * $rows_per_page .',' .$rows_per_page; 

//displays to the user the total number of results and the page numbers 
$total_number_of_results = "Search Results (<b>$rows</b>)"; 
$page_user_is_on = "Page <b>$page_number</b> of <b>$last_page</b>"; 

//query again only grabbing the set number of rows depending on page number 
$stmt = $mysqli->prepare("SELECT title, summary, id FROM course WHERE title LIKE ? ".$limit); 
$stmt->bind_param("s", $search_param); 
$stmt->execute(); 
$result = $stmt->get_result(); 


$list = ''; 
while($row = $result->fetch_assoc()){ 
$title = $row['title']; 
$id = $row['id']; 
//I'm assuming you want each link to be different here... 
$list.='<p><a href="Selectedcourse.php?id='.$id.'">' . $title . '</a></p>'; 
} 
mysqli_close($mysqli); 

//set up pagination 
$pagination_controls = ''; 
if($last_page != 1){ 
    if($page_number > 1){ 
     $previous = $page_number - 1; 
     $pagination_controls .='<a href="'.$_SERVER['PHP_SELF'].'?pn='.$previous.'">previous</a> &nbsp; &nbsp; '; 
     for($i = $page_number - 4; $i < $page_number; $i++) 
     { 
      if($i > 0){ 
      $pagination_controls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$i.'">'.$i.'</a> &nbsp; '; 
     } 
    } 
} 
$pagination_controls.=''.$page_number.' &nbsp; '; 

//clickable links to the left 
for($i = $page_number+1; $i <= $last_page; $i++) 
    { 
     $pagination_controls .= '<a href="'.$_SERVER['PHP_SELF'].'?pn='.$i.'">'.$i.'</a> &nbsp; '; 
     if($i >= $page_number+4){ 
      break; 
     } 
    } 
    if($page_number != $last_page){ 
     $next = $page_number + 1; 
     $pagination_controls.='&nbsp; &nbsp; <a href="'.$_SERVER['PHP_SELF'].'?pn='.$next.'">Next</a>'; 
    } 
} 
?> 
<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <link rel='stylesheet' href='courses.css'> 
</head> 
<body> 
    <div class="header"> 
<h1>Search Results for - <?= $search_param ?></h1> 
</div> 
<div> 
<h3> <?php echo $page_user_is_on ?> </h3> 
<p><?php echo $list; ?></p> 
<p><?php /* echo $search_result['summary']; //Where was this coming from? */?> </p> 
</div> 
<div id="pagination_controls"><?php echo $pagination_controls; ?></div> 
</body> 
</html> 
+0

全文を投稿 – Mihai

+0

@Mihai thatsここに完全なドキュメント – bdg

+0

質問は、なぜセッションを使用していますか?あなたの以前の質問はそれらを使用せずに動作します。 –

答えて

2

たびは、次のページが更新をクリックして、あなたはいけないので、これらの2行

$search_term = "%" . $_POST['searchBar'] . "%"; 
$search_param = $_SESSION['$search_term']=$search_term; 

に置き換え

<?php 
session_start(); 
.... 

使用:で

if(isset($_POST['searchBar'])){ 
    $search_term = "%" . $_POST['searchBar'] . "%"; 
    $search_param = $_SESSION['search'] = $search_term ; 
} 
else { 
    $search_param = $_SESSION['search']; 
} 

トップ、$_SESSION['$search_term'] sが

を失っても、私はあなたの問題は$のSEARCH_TERMは、次のページにのみ負荷に設定されている、それがNULLであるとのセッションもに設定されていることだと思うあなたのPOST

EDIT

ためISSETチェックを追加ヌル。

+0

どうすればそれを自分のコードに組み込むことができますか?上記の行に 'session_start();'を入れるのと同じくらい簡単ですか? – bdg

+0

@bdg First line – Mihai

+0

これを追加しても、 'Notice:未定義インデックス:SearchBar in SearchResultsPage.php in 15行目 'というエラーがスローされ、' $ search_param'の値が失われます。 – bdg

関連する問題