【PHP】ページ送りのリンク先設定について
こんにちは、お世話になります。初学者です。
ドットインストールさんのページ送りで勉強しながら、and検索の結果をページ送りしようとしています。が、リンク設定でつまずいてしまいました。
GETで取得したキーワードを次のページに持ち越しできません。
結果ページの総数までは作れたのですが……
どのようなところを勉強すればいいのかすら分かりません。
また、Notice: Undefined variable: pageのエラーも直したいです。
(if(isset($_POST['page']))で囲ってもエラーになるだけでした……)
なにとぞよろしくお願いします。
<?php
const PER_PAGE = 3;// 1ページに表示するレコード数
// 現在のページを取得
if (preg_match('/^[1-9][0-9]*$/', $_GET['page'])){
$page = (int)$_GET['page'];
} else {
$page = 1;
}
// オフセット設定
$offset = PER_PAGE * ($page - 1);
// and検索設定
$q = "";
if($_GET){
$q = $_GET['q'];
}
require_once 'dbmanager.php';
$pdo = getDb();
$q = filter_input(INPUT_GET, 'q');
?>
<form action="sample3.php" method="GET">
<input type="text" name="q" size="20" value="<?php echo htmlspecialchars($q); ?>">
<input type="submit" value="search">
</form>
<?php
if (isset($q)) {
$words = explode(" ", str_replace(" ", " ", trim($q)));
} else {
$words = array();
}
// 解析
$tmp = array();
$arr = array();
foreach($words as $key=>$word) {
if ($word === '') { continue; }
$tmp[$key] = sprintf('(keyword like :word%d)', $key);
$arr[$key] = '%' . addcslashes($word, '\_%') . '%';
}
if (count($tmp) > 0) {
$sql = "select * from ttables where " . implode('and', $tmp) . " order by id desc LIMIT ".$offset.",".PER_PAGE;
$stmt = $pdo->prepare($sql);
foreach ($arr as $key => $word) {
$stmt->bindParam(sprintf(':word%d', $key), $arr[$key], PDO::PARAM_STR);
}
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
printf('<li>%s %s</li>', htmlspecialchars($row['keyword'],ENT_QUOTES,'UTF-8'), htmlspecialchars($row['word'],ENT_QUOTES,'UTF-8'));
}
// ページネーション設定 totalレコード数取得
try {
$ppp = getDb();
$sss = "select * from ttables where " . implode('and', $tmp) . " order by id";
$sth = $ppp->prepare($sss);
foreach ($arr as $key => $word) {
$sth->bindParam(sprintf(':word%d', $key), $arr[$key], PDO::PARAM_STR);
}
$sth->execute();
} catch (PDOException $e){
die($e->getMessage());
}
$resultSet = $sth->fetchAll();
$total = count($resultSet);
$totalPages = ceil($total / PER_PAGE);
//
} else {
$stmt = $pdo->query('select * from ttables order by id desc');
}
?>
<?php for ($i = 1; $i <= $totalPages; $i++) : ?>
此処の設定が分かりません。
【<a href="?q=<?php echo $q."?=page=".$i; ?>"><?php echo $i; ?></a>】
<?php endfor; ?>
-------
dbmanager.php
<?php
function getDb(){
$dsn = 'mysql:dbname=w_collection; host=localhost; charset=utf8';
$usr = 'user';
$psw = 'pass';
try {
$db = new PDO($dsn, $usr, $psw);
} catch (PDOException $e) {
exit('データベース接続失敗。'.$e->getMessage());
}
return $db;
}
?>