我不知道如何通过另一张表进行搜索。我该怎么做? 表名是注释,我想搜索存储在列名kom
中的所有帖子另一件事是我不能让分页开始工作...... 我在一个其他的声明中开始了分页,因为当我得到超过1个结果时我只需要它。 我可以显示页面链接并限制显示的搜索帖子,但是当我点击链接中的一个时我无法进入下一页 继承人的代码
<?php
$search = $_POST["search"];
$field = $_POST["field"];
if($_POST["submit"] && $search)
{
echo "<div id='result'>";
echo "<h2>Resultat</h2>";
$search = strtoupper($search);
$search = strip_tags($search);
$search = trim($search);
$query = "SELECT * FROM blogTable WHERE title LIKE '%$search%'
UNION
SELECT * FROM blogTable WHERE post LIKE '%$search%'";
$result = mysql_query($query, $conn) or die(mysql_error());
$matches = mysql_num_rows($result);
if($matches == 0)
//code if serch didnt result any results
else if($matches == 1)
//code if the matches only 1
else
{
$per_page = 4;
$pages = ceil($matches / $per_page);
$page = (isset($_GET['page'])) ? (int)$_GET['page']: 1;
$start = ($page - 1) * $per_page;
$query2 = "SELECT * FROM blogTable WHERE title LIKE '%$search%'
UNION
SELECT * FROM blogTable WHERE post LIKE '%$search%' LIMIT $start, $per_page";
$result2 = mysql_query($query2, $conn) or die(mysql_error());
echo "<font size='-1'>Sökningen $search gav $matches resultat</font><br/>";
while ($r2 = mysql_fetch_array($result2))
{
$id = $r["id"];
$title = $r["title"];
$post = $r["post"];
$time = $r["time"];
echo "<br/><strong><a href='comment.php?id=$id'>$title</a></strong><br/>";
echo "<font size='-1'>".substr($post, 0, 60)."</font><br/>";
echo "<font size='-1'>".substr($post, 60, 70)."</font><br/>";
echo "<font size='-3'>$time</font><br/>";
}
//theese are showin but cannot click of any of them
if($pages >= 1 && $page <= $pages)
{
for($nr = 1; $nr <= $pages; $nr++)
{
if($nr == $page)
echo "<a href='?page=".$nr."' style='font-size:20px;'>$nr</a>";
else
echo "<a href='?page=".$nr."' style='font-size:15px;'>$nr</a> ";
}
}
}
}
?>
答案 0 :(得分:0)
您使用UNION
是否有特定原因?
如果没有,您可以更改:
$query = "SELECT * FROM blogTable WHERE title LIKE '%$search%'
UNION
SELECT * FROM blogTable WHERE post LIKE '%$search%'";
为:
$query = "SELECT * FROM blogTable WHERE (title LIKE '%$search%') OR (post LIKE '%$search%')";
无论如何,我永远不会执行相同的查询两次,如果没有给出启动参数(例如查询字符串中的页码),则只获取前x个结果,并计算启动参数时的起点。 / p>
如果您想要总计,请使用COUNT(*)
查询或更改您的查询:
$query = "SELECT SQL_CALC_FOUND_ROWS * FROM blogTable WHERE (title LIKE '%$search%') OR (post LIKE '%$search%')";
答案 1 :(得分:0)
吸引眼球的一点是,您展示的代码容易受到SQL injection的攻击。</ p>
摆脱strip_tags()
(如果是为了安全,在这种情况下它是无用的)并对搜索查询中使用的每个值执行mysql_real_escape_string()
,或检查该值是否实际为使用int
列时的号码。
另一件事是<font>
标签已经过时了。样式文本的酷CSS方式是使用外部CSS样式表,并在其中定义类似
span.small { font-size: 12px; color: green }
然后在HTML中使用它:
<span class="small">Text goes here</span>
说,这可能属于CodeReview.SE ....
答案 2 :(得分:0)
问候。