странициране с търсене

efrdimitrov

Registered
Използвам по долния код за странициране това е търсене по градове когато посоча даден град при първото търсене ми изкарва всичко наред
например 10 заявки и ми изкарва 3 страници понеже съм съм с по 4 на страница но като кликна на следваща ми изкарва всичките обяви налични и ако кликна на същата страница пак всички и получавам грешка:Notice: Undefined index: search in D:\TUK\xampp\htdocs\search-grad.php on line 8 как да стане благодаря на всички
<?php
$tarsene = $_GET['search'];
$server = "localhost";
$dbusername = "root";
$dbpassword = "***";
$db_name = "obqvi";

mysql_connect($server, $dbusername, $dbpassword)or die("Сайтът не може да се свърже към базата данни");
mysql_select_db($db_name) or die("Грешна база данни");
mysql_query("SET names cp1251/* DA NE SE PROMENQ*/");/*NE GO TRII*/
// определяме колко реда да ни показва. В случая 20 на страница.
$broinastranica = 4;
// от коя страница да почне да показва.Може да искаме да е от втора или от последна.
$pageNum = 1;
// ако има получени данни $_GET['page'] ще покаже страницата с номер $_GET['page']
if(isset($_GET['page']))
{
$pageNum = $_GET['page'];
}
//тука определяме кои редове ще се показват - примерно ако $_GET['page']=2
// ще покаже от 20 до 40-ти ред.
$redove = ($pageNum - 1) * $broinastranica;
//заявката ще върне само посочените редове - примерно от 20 до 40 в зависимост от $_GET['page']
$query = "SELECT id, kategoriq, text, ime, tel, grad, cena, data, email, ip FROM publikuvai WHERE c = '1' AND grad LIKE '%$tarsene%'".
" LIMIT $redove, $broinastranica";
$result = mysql_query($query) or die('Error, query failed');
// print-ваме посочените редове в таблица.
while($row = mysql_fetch_array($result))
{
echo "<a title='ВИЖ ЦЯЛАТА ОБЯВА' href='pregled.php?id=$row[id]'><table width='712' border='1' bgcolor='cdcdcd' align='center'>";

include "table.php";

echo"</table></a><br />";
}
// проверяваме таблицата колко редове има
$query = "SELECT COUNT(id) AS numrows FROM publikuvai WHERE c = '1' AND grad LIKE '%$tarsene%'";
$result = mysql_query($query) or die('Error, query failed');
$row = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];

$maxPage = ceil($numrows/$broinastranica);

$self = $_SERVER['PHP_SELF'];
$nomeranastranici = '';

for($page = 1; $page <= $maxPage; $page++)
{
if ($page == $pageNum)
{
$nomeranastranici .= " $page ";
}
else{
$nomeranastranici .= " <a href=\"$self?page=$page\">$page</a> ";
}}
// създаване на ликовете [предишна] [следваща]
// както и линковете [първа] и [последна]
if ($pageNum > 1)
{
$page = $pageNum - 1;
$predishna = " <a href=\"$self?page=$page\"> <<<  </a> ";

$parva = " <a href=\"$self?page=1\">първа</a> ";
}
else
{
$predishna = ' ';
$parva = ' ';
}
if ($pageNum < $maxPage)
{
$page = $pageNum + 1;
$sledvashta = " <a href=\"$self?page=$page\">  >>> </a> ";
$posledna = " <a href=\"$self?page=$maxPage\">последна</a> ";
}
else
{
$sledvashta = ' ';
$posledna = ' ';
}
// показваме
echo " <p align='center'> $parva $predishna $nomeranastranici $sledvashta $posledna ";
include "krai.php"
?>
 
Минавай през urlencode() и за всеки случай си филтрирай метода.

http://php.net/manual/en/function.urlencode.php

$tarsene = $_GET['search'];

го правиш на
PHP:
$tarsene = (isset($_GET['search']) ? $_GET['search'] : "";

или
PHP:
if(isSet($_GET['search'])) {
$tarsene = $_GET['search'];
} else {
$tarsene = "";
}

Филтрирай $_GET и го мини през urlencode().

След, което адреса би трябвало да изглежда горе-долу така:

site.com/search.php?search=tyrsene+na+duma&page=3

site.com/search.php?search=tyrsene+na+duma&page=4

site.com/search.php?search=tyrsene+na+duma&page=5
....

П.С. Тъй като $_GET['page']; - ще са само числа, сложи пред него (int) , защото в момента е уязвимо.

Тоест:

if(isset($_GET['page']))
{
$pageNum = $_GET['page'];
}

Става на

if(isset($_GET['page']))
{
$pageNum = (int)$_GET['page'];
}

Не съм ти гледал целия, но предполагам ще стане. :?:
 

Горе