Пак проблем-а със търсачката ..

DirectX

Registered
Пак проблема със търсачката имам, но този път е малко по-сложно има и странициране. Работа е там че като избере няква опция изкарва броя на зададените резултата на страница, обаче като дам на другата страница седи бяла страница, докато не дам пак да търси по избраната опция и чак тогава ми зареджда останалите резултата ...

PHP:
<div align="center">
<form name="form1" method="post" action="">
<p> </p>
<select name="search" id="type">
    <option>Music</option>
    <option>Fun video</option>
  </select>
<input name="submit" type="submit" id="button" value="Search !" />
</form>
<?php
if(isset($_POST['submit'])){
$type = htmlspecialchars(addslashes($_POST['search']));

$conn = mysql_connect('localhost', 'root', 'stanimir') or die("Грешка! Моля съобщете на администраторите!"); 
$rez = mysql_select_db('user_manager', $conn) or die("Грешка! Моля съобщете на администраторите!"); 
$the_limit = "3"; 
$the_query = "SELECT * FROM `blanka` WHERE `type` LIKE '%$type%' ORDER BY id DESC";
$listed = ""; 
$listed_end = ""; 

$page = trim($_GET['page']); 
if(is_numeric($page)){ 
$page = $page * $the_limit; 
if( (!$page) or ($page == "0") ){ 
$a = "0"; 
$b = $the_limit; 
} else { 
$a = $page; 
$b = $a + $the_limit; 
} 
} else { 
$a = "0"; 
$b = $the_limit; 
} 


$query = $the_query." limit $a, $the_limit"; 
$result = mysql_query($query, $conn) or die (mysql_error()); 
$result_all = mysql_query($the_query, $conn) or die (mysql_error()); 
$num_all = mysql_num_rows($result_all); 
while($row = mysql_fetch_array($result)){ 

$desc = $row['desc']; 
$url = $desc; 

$nomer = $row['id'];
if(isset($_POST['report'])) {
mysql_query("UPDATE `blanka` SET `report`=1 WHERE `id`=$nomer");
} 
if(preg_match("/youtube/si",$url)){ 
parse_str(parse_url($url, PHP_URL_QUERY )); 
$id = $v; 
echo'<iframe width="450" height="403" src="http://www.youtube.com/embed/'.$id.'?rel=0" frameborder="0" allowfullscreen></iframe><br /a><br /a>'; 


}

elseif(preg_match("/vbox7/si",$url)){
$id = end(explode('play:',$url));
echo'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="450" height="403"><param name="movie" value="http://i47.vbox7.com/player/ext.swf?vid='.$id.'"><param name="quality" value="high"><embed src="http://i48.vbox7.com/player/ext.swf?vid='.$id.'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="403"></embed></object><br /a><br /a>' ;


 }

} 
$num_pages = ceil($num_all / $the_limit); 
for($i=0;$i<$num_pages;$i++){ 
$name = $i; 
$name++; 
if($name != $num_pages){ 
$last = " | "; 
} else $last = ""; 


$pages.= "<a href=\"?page=".$i."\">".$name."</a>".$last; 
} 

echo $pages; 
echo "<br /a>Показване на резултати от ".$a." до ".$b."<br /><br />"; 
echo $listed.$listed_end; 
echo "<br /><br />"; 



}
	?>
    </div>
 
Значи първо линка не събмитва формата отново и затова губиш данните. Затова трябва да събмитнеш формата, като добавиш и параметър страницата. Променяме кода в следните посоки:
1. Добавяме ново невидимо поле PAGE
2. $_GET['page'] става $_POST['page']
3. Слагаме id на формата, за да я достъпваме лесно през javascript
4. Слагаме на линка обработка с javascript
5. Добавяме в head на страницата в таг <script> функцията за обработка

PHP:
<div align="center">
<form name="form1" id="form1" method="post" action="">
<p> </p>
<select name="search" id="type">
    <option>Music</option>
    <option>Fun video</option>
  </select>
  <input type="hidden" id="page" name="page" value="<? if (isset($_POST['page'])) echo (int) $_POST['page']; ?>"/>
<input name="submit" type="submit" id="button" value="Search !" />
</form>
<?php
if(isset($_POST['submit'])){
$type = htmlspecialchars(addslashes($_POST['search']));

$conn = mysql_connect('localhost', 'root', 'stanimir') or die("Грешка! Моля съобщете на администраторите!"); 
$rez = mysql_select_db('user_manager', $conn) or die("Грешка! Моля съобщете на администраторите!"); 
$the_limit = "3"; 
$the_query = "SELECT * FROM `blanka` WHERE `type` LIKE '%$type%' ORDER BY id DESC";
$listed = ""; 
$listed_end = ""; 

$page = (isset($_POST['page'])) ? trim($_POST['page']) : ''; 
if(is_numeric($page)){ 
$page = $page * $the_limit; 
if( (!$page) or ($page == "0") ){ 
$a = "0"; 
$b = $the_limit; 
} else { 
$a = $page; 
$b = $a + $the_limit; 
} 
} else { 
$a = "0"; 
$b = $the_limit; 
} 


$query = $the_query." limit $a, $the_limit"; 
$result = mysql_query($query, $conn) or die (mysql_error()); 
$result_all = mysql_query($the_query, $conn) or die (mysql_error()); 
$num_all = mysql_num_rows($result_all); 
while($row = mysql_fetch_array($result)){ 

$desc = $row['desc']; 
$url = $desc; 

$nomer = $row['id'];
if(isset($_POST['report'])) {
mysql_query("UPDATE `blanka` SET `report`=1 WHERE `id`=$nomer");
} 
if(preg_match("/youtube/si",$url)){ 
parse_str(parse_url($url, PHP_URL_QUERY )); 
$id = $v; 
echo'<iframe width="450" height="403" src="http://www.youtube.com/embed/'.$id.'?rel=0" frameborder="0" allowfullscreen></iframe><br /a><br /a>'; 


}

elseif(preg_match("/vbox7/si",$url)){
$id = end(explode('play:',$url));
echo'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="450" height="403"><param name="movie" value="http://i47.vbox7.com/player/ext.swf?vid='.$id.'"><param name="quality" value="high"><embed src="http://i48.vbox7.com/player/ext.swf?vid='.$id.'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="403"></embed></object><br /a><br /a>' ;


 }

} 
$num_pages = ceil($num_all / $the_limit); 
for($i=0;$i<$num_pages;$i++){ 
$name = $i; 
$name++; 
if($name != $num_pages){ 
$last = " | "; 
} else $last = ""; 


$pages.= "<a href=\"javascript:gotopage(".$i.")\">".$name."</a>".$last; 
} 

echo $pages; 
echo "<br /a>Показване на резултати от ".$a." до ".$b."<br /><br />"; 
echo $listed.$listed_end; 
echo "<br /><br />"; 



}
        ?>
    </div>


[js]
function gotopage(pg) {
document.getElementById('page').value=pg;
document.getElementById('form1').submit();
}
[/js]
 
направих всичко както каза, но като дам да смени страницата, натискам за другата страница ама не се сменя, чак като натисна за 2-ра страница примерно и пак натисна Search тогава излизат другите резултати .. :/
 
Задръж малко...
Значи промени си кода на формата по следния начин:

<input name="submit" type="submit" id="button" value="Search !" />
го направи
<input name="submitbutton" type="submit" id="button" value="Search !" />

след това в кода промени проверката:
if(isset($_POST['submit'])){
на
if(isset($_POST['submitbutton'])){

и кажи какво става
 
значи вече прехвърля успешно на друга страница, но пак се губят данните и трябва да натисна отново search за да излязат .. :?
 
Да - не зареждаме стойността в падащия списък. Направи си селекта така:
HTML:
<select name="search" id="type">
    <option value="Music">Music</option>
    <option value="Fun video">Fun video</option>
  </select>

и добави следния код преди затварящия </body>, за да заредим стойността от $_POST-a

PHP:
<?
if (isset($_POST['search'])) {
			echo '<script>';
			echo 'for (var i=0; i<document.getElementById("type").options.length; i++) ';
			echo '		if ("'.addslashes($_POST['search']).'"==document.getElementById("type").options[i].value)';
			echo '			document.getElementById("type").selectedIndex=i;';
			echo '</script>';
}
?>
 
По-добре отдели време и направи страницирането ти и формата да работи с $_GET ще ти е доста по-лесно отколкото с $_POST :?:
 
Сигурен ли си, че това си го променил

if(isset($_POST['submit'])){

на

if(isset($_POST['submitbutton'])){

ако е така пусни пак целия код
 
Ev0luti0N каза:
По-добре отдели време и направи страницирането ти и формата да работи с $_GET ще ти е доста по-лесно отколкото с $_POST :?:

По принцип си прав обаче е мнооого по-уязвим на инжекции - особено в неговия случай
 
PHP:
<?php session_start(); ?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Search</title>
<script> 
function gotopage(pg) {
        document.getElementById('page').value=pg;
        document.getElementById('form1').submit();
   }
   </script>
<style type="text/css">
	@import url(menu_style.css); 
</style>
<style type="text/css">
a:link {
	color: #06F;
}
a:visited {
	color: #06F;
}
a:hover {
	color: #06F;
}
a:active {
	color: #06F;
}
</style>
</head> 
<ul id="menu">
<a href="index.php">Начало</a>
<a href="project.php">Относно</a>
<a href="members.php">Потребители</a>
<a href="search.php">Търсене</a>
<?php
	include '_inc.php';
	if($user->isAuthorized()){
		?>
<a href="members.php?profile=<?php print $user->getId(); ?>">Моя профил </a>
	
    	<a href="edit-profile.php">Промяна на профила</a>
        <?php print $user->getType() === MK_RecordUser::TYPE_CORE ? '<a href="change-password.php">Смяна на парола</a>' : '' ?>
        <?php print $user->getGroup()->isAdmin() ? '<a href="admin" target="_blank">Админ панел</a>
		<a href="stats.php" target="_blank">Статистика</a>' : '' ?> 				      
         <a href="logout.php">Изход</a>
        
    
<?php
	}else{
?>
					<a href="login.php">Вход</a>
                    <a href="register.php">Регистрация</a>
<?php
	}
?> 
</ul>

	
</ul>		
</head>
<body>
<div align="center">
<form name="form1" id="form1" method="post" action="">
<p> </p>
<select name="search" id="type">
    <option value="Music">Music</option>
    <option value="Fun video">Fun video</option>
  </select>
  <input type="hidden" id="page" name="page" value="<? if (isset($_POST['page'])) echo (int) $_POST['page']; ?>"/>
<input name="submitbutton" type="submit" id="button" value="Search !" />
</form>
<?php
if(isset($_POST['submitbutton'])){

$type = htmlspecialchars(addslashes($_POST['search']));
$conn = mysql_connect('localhost', 'root', 'stanimir') or die("Грешка! Моля съобщете на администраторите!"); 
$rez = mysql_select_db('user_manager', $conn) or die("Грешка! Моля съобщете на администраторите!"); 
$the_limit = "3"; 
$the_query = "SELECT * FROM `blanka` WHERE `type` LIKE '%$type%' ORDER BY id DESC";
$listed = ""; 
$listed_end = ""; 

$page = (isset($_POST['page'])) ? trim($_POST['page']) : ''; 
if(is_numeric($page)){ 
$page = $page * $the_limit; 
if( (!$page) or ($page == "0") ){ 
$a = "0"; 
$b = $the_limit; 
} else { 
$a = $page; 
$b = $a + $the_limit; 
} 
} else { 
$a = "0"; 
$b = $the_limit; 
} 


$query = $the_query." limit $a, $the_limit"; 
$result = mysql_query($query, $conn) or die (mysql_error()); 
$result_all = mysql_query($the_query, $conn) or die (mysql_error()); 
$num_all = mysql_num_rows($result_all); 
while($row = mysql_fetch_array($result)){ 

$desc = $row['desc']; 
$url = $desc; 

$nomer = $row['id'];
if(isset($_POST['report'])) {
mysql_query("UPDATE `blanka` SET `report`=1 WHERE `id`=$nomer");
} 
if(preg_match("/youtube/si",$url)){ 
parse_str(parse_url($url, PHP_URL_QUERY )); 
$id = $v; 
echo'<iframe width="450" height="403" src="http://www.youtube.com/embed/'.$id.'?rel=0" frameborder="0" allowfullscreen></iframe><br /a><br /a>'; 


}

elseif(preg_match("/vbox7/si",$url)){
$id = end(explode('play:',$url));
echo'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="450" height="403"><param name="movie" value="http://i47.vbox7.com/player/ext.swf?vid='.$id.'"><param name="quality" value="high"><embed src="http://i48.vbox7.com/player/ext.swf?vid='.$id.'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="450" height="403"></embed></object><br /a><br /a>' ;


 }

} 
$num_pages = ceil($num_all / $the_limit); 
for($i=0;$i<$num_pages;$i++){ 
$name = $i; 
$name++; 
if($name != $num_pages){ 
$last = " | "; 
} else $last = ""; 


$pages.= "<a href=\"javascript:gotopage(".$i.")\">".$name."</a>".$last; 
} 

echo $pages; 
echo "<br /a>Показване на резултати от ".$a." до ".$b."<br /><br />"; 
echo $listed.$listed_end; 
echo "<br /><br />"; 



}
        ?>
    
    <?
if (isset($_POST['search'])) {
                        echo '<script>';
                        echo 'for (var i=0; i<document.getElementById("type").options.length; i++) ';
                        echo '          if ("'.addslashes($_POST['search']).'"==document.getElementById("type").options[i].value)';
                        echo '                  document.getElementById("type").selectedIndex=i;';
                        echo '</script>';
}
?></div>
</body>
</html>
 
Ако това горе не е решението, щото не ми се чете всичко ще ти дам идея как да се оправиш. Същия проблем има и в codeigniter и там решението е да си запазваш променливата за търсенето в сесия, и да я викаш с всяка следваща страница.
 
rombeca: В сесия не е оферта за търсене защото няма да може да се търси нормално ако потребителя си отвори повече от един прозорец в сесията.

DirectX: Според мен алгоритъма за страницирането ти не е както трябва. Сложи си на ред 99 едно
echo $query;
за да видиш при различните случаи какво се изпълнява и най-вероятно ще си намериш грешката.
 
SELECT * FROM `blanka` WHERE `type` LIKE '%Music%' ORDER BY id DESC limit 0, 3

SELECT * FROM `blanka` WHERE `type` LIKE '%Music%' ORDER BY id DESC limit 3, 3

ето това излиза като дам съответно на 1-вата страница и на 2-рата
 
което означава че всички данни се прехвърлят коректно - айде сега изпълни тия заявки в phpmyadmin и виж какво ти връщат и дали е това което очакваш.
Така или иначе данните във формата се постват коректно - и стойността за търсене и стойността на страницата явно.
 
да няма проблем със резултати всеки точно излиза ...
http://212.104.107.37/search.php

ето виж нагледно ...
 

Back
Горе