このリポジトリは2023-09-09にアーカイブされています。 ファイルの閲覧とクローンは可能ですが、プッシュ、イシューの作成、プルリクエストはできません。
kensaku.online/www/search.php

104 行
2.9 KiB
PHP

<?php
if (!isset($_GET['q']) || $_GET['q'] == '') {
header('Location: /');
die();
}
require_once('../helper.php');
require_once('../config.php');
$title = $_GET['q'].'の検索';
$linktype = 'side';
$q = htmlspecialchars($_GET['q']);
$limit = 10;
$offset = (isset($_GET['page']) ? (int)$_GET['page']-1 : 0) * $limit;
$totalpages = 0;
$res = [];
$mysqli = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME);
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$q = mysqli_real_escape_string($mysqli, $q);
$tq = explode(' ', $q);
$lq = '';
foreach ($tq as $k => $v) {
$lq .= "title LIKE '%$v%' OR body LIKE '%$v%'";
if ($k != array_key_last($tq)) $lq .= " OR ";
}
$tp = mysqli_query($mysqli, "SELECT COUNT(1) FROM website_page WHERE $lq;");
$totalpages = (int)mysqli_fetch_row($tp)[0];
unset($tp);
if ($pages = mysqli_prepare($mysqli, "SELECT * FROM website_page WHERE $lq LIMIT ? OFFSET ?")) {
mysqli_stmt_bind_param($pages, "ii", $limit, $offset);
mysqli_stmt_execute($pages);
mysqli_stmt_bind_result($pages, $wpid, $webid, $pageurl, $pagetit, $pagebody);
mysqli_execute($pages);
while (mysqli_stmt_fetch($pages)) {
$cq = preg_split('/(\ +)/i', trim($q));
$cpreg = '(';
foreach ($cq as $k => $v) {
$cpreg .= $v;
if ($k != array_key_last($cq)) $cpreg .= '|';
}
$cpreg .= ')';
$tmpbody = '';
foreach ($cq as $k => $v) {
$tmpbody .= '…'.mb_substr(mb_stristr($pagebody, $v, true), -120);
$tmpbody .= mb_substr($pagebody, mb_stripos($pagebody, $v), 120).'… ';
}
$pagebody = preg_replace('/'.$cpreg.'/i', '<span class="result-mark">$1</span>', $tmpbody);
$pagetit = preg_replace('/'.$cpreg.'/i', '<span class="result-mark">$1</span>', $pagetit);
$res[] = [
'url' => $pageurl,
'title' => $pagetit,
'body' => $pagebody
];
}
mysqli_stmt_close($pages);
}
mysqli_close($mysqli);
require_once('../include/header.php');
require_once('../include/menu.php');
?>
<hr />
<div class="form">
<form action="/search.php" method="get">
<input type="text" name="q" value="<?= $q; ?>" />
<input type="submit" value="送信" />
</form>
</div>
<hr />
<?php foreach ($res as $r) { ?>
<div class="result">
<a href="<?= $r['url']; ?>">
<span class="result-url"><?= $r['url']; ?></span>
<div class="result-title"><?= $r['title']; ?></div>
<div class="result-description"><?= $r['body']; ?></div>
</a>
</div>
<?php } ?>
<hr />
<?php for ($i = 1; $i <= ceil($totalpages/$limit); $i++) { ?>
<a class="pagination" href="/search.php?q=<?= $q; ?>&page=<?= $i; ?>"><?= $i; ?></a>
<?php } ?>
<?php
require_once('../include/footer.php');
?>