проблем със странициране и заявка

stoqnski

Registered
Здравейте имам 2 таблици със полета :
obiavi
- id [ пореден номер за обявите ]
- grad [ съдържа gid от gradove ]
- status [ако е 0 е неодобрена , ако е 1 е одобрена ]
gradove
- gid [ пореден номер на града ]
- ggrad [ име на града ]

Примерен записи от obiavi :
ID grad STATUS
1 3 1
2 2 1
3 1 0

Искам да напиша следната заявка със странициране на резултатите:
Да взима всичко от обяви , за които град = $_GET['gid'] and status='1' (т.е. одобрените ]

Eто какво написах аз , но когато изкарва страниците ми брои всички id-та и не се съобразява с параметъра WHERE obiavi.status = '1' ... :
PHP:
<?
		include ('conf.php');
$getid = (int)$_GET['gid']; 
if(!$getid){
 header('Location: all.php');
 } else {
$broinastranica = 4; 
$pageNum = 1; 
if(isset($_GET['page'])) 
{ 
$pageNum = $_GET['page']; 
} 
$redove = ($pageNum - 1) * $broinastranica; 
$querya = ("SELECT obiavi.*, gradove.gid AS gids, gradove.ggrad AS town_name FROM gradove RIGHT JOIN obiavi ON gradove.gid = 
obiavi.grad WHERE gid = '$getid' AND obiavi.status = '1' LIMIT $redove, $broinastranica") or die (mysql_error());
$result = mysql_query($querya) or die('Error, query failed'); 
while($row = mysql_fetch_array($result)) 
{ 
echo "
обяви за град: $row[town_name] <br /><a href=\"vij_o.php?id=$row[id]\">$row[ime]</a> <br />
<p><img src=\"$row[snimka]\" id=\"snimka-snimka\" align=\"left\" border=\"0px\" width=\"80px\" height=\"80px\" /> $row[text] </p> <br />  
Автор: $row[awtor] <br /> <br />
</p>
<br />"; 
}
$query = "SELECT COUNT(id) AS sta FROM obiavi WHERE obiavi.status = '1'"; 
$result = mysql_query($query) or die('Error, query failed'); 
$row = mysql_fetch_array($result, MYSQL_ASSOC); 
$sta = $row['sta']; 
$maxPage = ceil($sta/$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 $parva . $predishna . $nomeranastranici . $sledvashta . $posledna; 
}
?>

Визуализация с проблема :

5311.png
 
$query = "SELECT COUNT(id) AS sta FROM obiavi WHERE obiavi.status = '1'";


Според мен проблема ти не идва от там, че не зачита всички обяви със статус 1, а защото не си изключил другите градове.
 
deam0n каза:
$query = "SELECT COUNT(id) AS sta FROM obiavi WHERE obiavi.status = '1'";


Според мен проблема ти не идва от там, че не зачита всички обяви със статус 1, а защото не си изключил другите градове.

не знам , но ми гръмна главата с тази заявка .. , как да ги изключа и с WHERE obiavi.grad = gid ?
http://localhost/obqvi/gradove.php?gid=1
това показва за кой град се отнасят обявите
не знам .. приемам всякакви примерни или алтернативни,по-оптимизиране заявки

да , страницирането така се показва правилно , но как да оправя пък страниците :

сега станаха така :

gradove.php?page=1 , 2 и т.н. ...
и може ли да стане нещо подобно :
gradove.php?gid=1&page=1 , 2 , 3 и т.н.
 
stoqnski каза:
deam0n каза:
$query = "SELECT COUNT(id) AS sta FROM obiavi WHERE obiavi.status = '1'";


Според мен проблема ти не идва от там, че не зачита всички обяви със статус 1, а защото не си изключил другите градове.

не знам , но ми гръмна главата с тази заявка .. , как да ги изключа и с WHERE obiavi.grad = gid ?
http://localhost/obqvi/gradove.php?gid=1
това показва за кой град се отнасят обявите
не знам .. приемам всякакви примерни или алтернативни,по-оптимизиране заявки

да , страницирането така се показва правилно , но как да оправя пък страниците :

сега станаха така :

gradove.php?page=1 , 2 и т.н. ...
и може ли да стане нещо подобно :
gradove.php?gid=1&page=1 , 2 , 3 и т.н.

Смисъл със заявката с която броиш обявите, за да можеш да сметнеш колко страници ще бъдят, трябва да броиш освен активните обяви, то само и единствено тези от избрания град. (obiavi.grad = gid )
 
deam0n каза:
stoqnski каза:
deam0n каза:
$query = "SELECT COUNT(id) AS sta FROM obiavi WHERE obiavi.status = '1'";


Според мен проблема ти не идва от там, че не зачита всички обяви със статус 1, а защото не си изключил другите градове.

не знам , но ми гръмна главата с тази заявка .. , как да ги изключа и с WHERE obiavi.grad = gid ?
http://localhost/obqvi/gradove.php?gid=1
това показва за кой град се отнасят обявите
не знам .. приемам всякакви примерни или алтернативни,по-оптимизиране заявки

да , страницирането така се показва правилно , но как да оправя пък страниците :

сега станаха така :

gradove.php?page=1 , 2 и т.н. ...
и може ли да стане нещо подобно :
gradove.php?gid=1&page=1 , 2 , 3 и т.н.

Смисъл със заявката с която броиш обявите, за да можеш да сметнеш колко страници ще бъдят, трябва да броиш освен активните обяви, то само и единствено тези от избрания град. (obiavi.grad = gid )

да това го направих така:
$query = "SELECT COUNT(id) AS sta FROM obiavi WHERE obiavi.status = '1' AND obiavi.grad = '$getid'";
$getid се явява 'gid' , визуализацията (т.е. count-ването ) е правилно сега , но когато дам примерно на 2втора страница url-то ми става така :
gradove.php?page=2 и не ми изкарва и нищо , а аз искам да става така :
gradove.php?gid=5392&page=1
или нещо подобно ...

Визуализация:
5313.png

Ред14: $getid = (int)$_GET['gid'];

Код:
PHP:
<?
		include ('conf.php');
$getid = (int)$_GET['gid']; 
$broinastranica = 4; 
$pageNum = 1; 
if(isset($_GET['page'])) 
{ 
$pageNum = $_GET['page']; 
} 
$redove = ($pageNum - 1) * $broinastranica; 
$querya = ("SELECT obiavi.*, gradove.gid AS gids, gradove.ggrad AS town_name FROM gradove RIGHT JOIN obiavi ON gradove.gid = 
obiavi.grad WHERE gid = '$getid' AND obiavi.status = '1' LIMIT $redove, $broinastranica") or die (mysql_error());
$result = mysql_query($querya) or die('Error, query failed'); 
while($row = mysql_fetch_array($result)) 
{ 
echo "
обяви за град: $row[town_name] <br /><a href="vij_o.php?id=$row[id]">$row[ime]</a> <br />
<p><img src="$row[snimka]" id="snimka-snimka" align="left" border="0px" width="80px" height="80px" /> $row[text] </p> <br />  
Автор: $row[awtor] <br /> <br />
</p>
<br />"; 
}
$query = "SELECT COUNT(id) AS sta FROM obiavi WHERE obiavi.status = '1' AND obiavi.grad = '$getid'"; 
$result = mysql_query($query) or die('Error, query failed'); 
$rowa = mysql_fetch_array($result, MYSQL_ASSOC); 
$sta = $rowa['sta']; 
$maxPage = ceil($sta/$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 $parva . $predishna . $nomeranastranici . $sledvashta . $posledna; 
?>
 
Трябва да зададеш gid в линка след като смениш страницата :Р

Виж линка ти е gradove.php?id=1212 а трябва да бъде gradove.php?id=124312&gid=12412412

ПС: Добре, че си прикачил картинка :D
 
deam0n каза:
Трябва да зададеш gid в линка след като смениш страницата :Р

Виж линка ти е gradove.php?id=1212 а трябва да бъде gradove.php?id=124312&gid=12412412

ПС: Добре, че си прикачил картинка :D

Написах го така :

<a href="$self?gid=$getid&page=$page">$page</a>

добре ли е от към exploit-ване ?
това правилно ли е като синтаксис:
PHP:
$sta = (int)$rowa['sta'];
?
 

Back
Горе