Премини към съдържанието
vicid

Помощ за търсачка

Препоръчан отговор


Ето кода ми.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-88">
<title>Търсене</title>
<form name='search' method='GET'>
Търсене: <input type='text' name='duma' />
<select name='table'>
<option value="program">program</option>
<option value="news">news</option>
</select>
<br /><input type='submit' name='submit' value='Търси' /><br />
<form>
<<?
include("conf.php");
$button = $_GET ['submit'];

$duma = $_GET['duma'];
$table = $_GET['table'];



if (strlen($duma) < 4) {
echo "Трябва да въведете повече от 4 символа.";
}
else {
	$constructs ="SELECT * FROM '$table' namepr, name LIKE'%$duma%'";
$run = $conn->query($constructs);
    
$foundnum =  $run->num_rows; 
    

  
$per_page = 1;
$start = isset($_GET['start']) ? $_GET['start']: '';
$max_pages = ceil($foundnum / $per_page);
if(!$start)
$start=0; 
$sql = "LIMIT $start, $per_page" ;
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "Name: " . $row["namepr"]. "<br>";
		        echo "Name: " . $row["name"]. "<br>";

		
    }
} else {
    echo "0 results";
}

Но търсачката не работи. Искам да мога да търсия и в двете таблици , но да избирам в коя таблица да търся.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Как да направя търсачка която да търси в два таблици? С опция за избор на таблица в която да търси

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Как да направя търсачка която да търси в два таблици? С опция за избор на таблица в която да търси

 

Не работи, защото имаш елементарни грешки в кода.

Виж как отваряш php кода ?

А къде го затваряш ?

Търси си грешките, които се извеждат в браузъра поне !

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Проблема не е от това По надоло го затварям, че имам странициране а в браузъра не дава грешка. А това пише на адрес бара search.php?duma=test&table=program&submit=Търси

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

А на първия if, къде затваряш скобата след else ?


И тя ли някъде надолу в кода ?


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

За този ли.

if (strlen($duma) < 4) {
echo "Трябва да въведете повече от 4 символа.";
}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Де да знам. Брой в показания от теб по-горе код if-овете и гледай първия.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Значи трябва да е така ли?

if (strlen($duma) < 4) {
echo "Трябва да въведете повече от 4 символа.";

else {
}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

 

Значи трябва да е така ли?

if (strlen($duma) < 4) {
echo "Трябва да въведете повече от 4 символа.";

else {
}

 

Не знам. Кодът е твой. Ти не показваш целия файл, а само част от него.

Възможно е да се затваря и някъде по-надолу.

Но пак ти казвам - оправи си първо грешките из кода и обясни какво означава "търсачката не работи".

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ето целя код!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-88">
<title>Търсене</title>
<form name='search' method='GET'>
Търсене: <input type='text' name='duma' />
<select name='table'>
<option value="program">program</option>
<option value="news">news</option>
</select>
<br /><input type='submit' name='submit' value='Търси' /><br />
<form>
<?
include("conf.php");
$button = $_GET ['submit'];

$duma = $_GET['duma'];
$table = $_GET['table'];



if (strlen($duma) < 4) {
echo "Трябва да въведете повече от 4 символа.";
}
else {
	$constructs ="SELECT * FROM '$table' namepr, name LIKE'%$duma%'";
$run = $conn->query($constructs);
    
$foundnum =  $run->num_rows; 
    

  
$per_page = 1;
$start = isset($_GET['start']) ? $_GET['start']: '';
$max_pages = ceil($foundnum / $per_page);
if(!$start)
$start=0; 
$sql = "SELECT * FROM '$table' namepr, name LIKE'%$duma%' LIMIT $start, $per_page" ;
result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "Name: " . $row["namepr"]. "<br>";
		        echo "Name: " . $row["name"]. "<br>";

		
    }
} else {
    echo "0 results";
}
echo "<center>";
  
$prev = $start - $per_page;
$next = $start + $per_page;
                       
$adjacents = 3;
$last = $max_pages - 1;
  
if($max_pages > 1)
{   
//previous button
if (!($start<=0)) 
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$prev'>Prev</a> ";    
          
//pages 
if ($max_pages < 7 + ($adjacents * 2))   //not enough pages to bother breaking it up
{
$i = 0;   
for ($counter = 1; $counter <= $max_pages; $counter++)
{
if ($i == $start){
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'><b>$counter</b></a> ";
}
else {
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'>$counter</a> ";
}  
$i = $i + $per_page;                 
}
}
elseif($max_pages > 5 + ($adjacents * 2))    //enough pages to hide some
{
//close to beginning; only hide later pages
if(($start/$per_page) < 1 + ($adjacents * 2))        
{
$i = 0;
for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
{
if ($i == $start){
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'><b>$counter</b></a> ";
}
else {
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'>$counter</a> ";
} 
$i = $i + $per_page;                                       
}
                          
}
//in middle; hide some front and some back
elseif($max_pages - ($adjacents * 2) > ($start / $per_page) && ($start / $per_page) > ($adjacents * 2))
{
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=0'>1</a> ";
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$per_page'>2</a> .... ";
 
$i = $start;                 
for ($counter = ($start/$per_page)+1; $counter < ($start / $per_page) + $adjacents + 2; $counter++)
{
if ($i == $start){
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'><b>$counter</b></a> ";
}
else {
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'>$counter</a> ";
}   
$i = $i + $per_page;                
}
                                  
}
//close to end; only hide early pages
else
{
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=0'>1</a> ";
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$per_page'>2</a> .... ";
 
$i = $start;                
for ($counter = ($start / $per_page) + 1; $counter <= $max_pages; $counter++)
{
if ($i == $start){
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'><b>$counter</b></a> ";
}
else {
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'>$counter</a> ";   
} 
$i = $i + $per_page;              
}
}
}
          
//next button
if (!($start >=$foundnum-$per_page))
echo " <a href='search.php?search=$search&duma=$duma&Търси&start=$next'>Next</a> ";    
}   
echo "</center>";
} 




?>

"търсачката не работи"  означава, че като напиша нещо в търсачката и избера таблица и дам търсене ми дава това 0 results.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

А защо не използваш WHERE в SQL заявките ?

 

$sql = "SELECT * FROM '$table' namepr, name where (namepr LIKE'%$duma%') or (name LIKE'%$duma%') LIMIT $start, $per_page" ;

 

Малко по-нагоре имаш още една подобна заявка.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
$sql = "SELECT * FROM '$table' namepr, name where (namepr LIKE'%$duma%') or (name LIKE'%$duma%') LIMIT $start, $per_page" ;

Промених го така и пак не търси

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
$sql = "SELECT * FROM '$table' namepr, name where (namepr LIKE'%$duma%') or (name LIKE'%$duma%') LIMIT $start, $per_page" ;

Промених го така и пак не търси

 

 

Хайде промени го тогава така :

 

$sql = "SELECT * FROM '$table' where (namepr LIKE'%$duma%') or (name LIKE'%$duma%') LIMIT $start, $per_page" ;

Научи се да пишеш сам кода си.

Не се доверявай сляпо на всичко, което ти дадат.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ето целя код!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-88">
<title>Търсене</title>
<form name='search' method='GET'>
Търсене: <input type='text' name='duma' />
<select name='table'>
<option value="program">program</option>
<option value="news">news</option>
</select>
<br /><input type='submit' name='submit' value='Търси' /><br />
<form>
<?
include("conf.php");
$button = $_GET ['submit'];

$duma = $_GET['duma'];
$table = $_GET['table'];



if (strlen($duma) < 4) {
echo "Трябва да въведете повече от 4 символа.";
}
else {
	$constructs ="SELECT * FROM '$table' namepr, name LIKE'%$duma%'";
$run = $conn->query($constructs);
    
$foundnum =  $run->num_rows; 
    

  
$per_page = 1;
$start = isset($_GET['start']) ? $_GET['start']: '';
$max_pages = ceil($foundnum / $per_page);
if(!$start)
$start=0; 
$sql = "SELECT * FROM '$table' namepr, name LIKE'%$duma%' LIMIT $start, $per_page" ;
result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "Name: " . $row["namepr"]. "<br>";
		        echo "Name: " . $row["name"]. "<br>";

		
    }
} else {
    echo "0 results";
}
echo "<center>";
  
$prev = $start - $per_page;
$next = $start + $per_page;
                       
$adjacents = 3;
$last = $max_pages - 1;
  
if($max_pages > 1)
{   
//previous button
if (!($start<=0)) 
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$prev'>Prev</a> ";    
          
//pages 
if ($max_pages < 7 + ($adjacents * 2))   //not enough pages to bother breaking it up
{
$i = 0;   
for ($counter = 1; $counter <= $max_pages; $counter++)
{
if ($i == $start){
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'><b>$counter</b></a> ";
}
else {
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'>$counter</a> ";
}  
$i = $i + $per_page;                 
}
}
elseif($max_pages > 5 + ($adjacents * 2))    //enough pages to hide some
{
//close to beginning; only hide later pages
if(($start/$per_page) < 1 + ($adjacents * 2))        
{
$i = 0;
for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
{
if ($i == $start){
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'><b>$counter</b></a> ";
}
else {
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'>$counter</a> ";
} 
$i = $i + $per_page;                                       
}
                          
}
//in middle; hide some front and some back
elseif($max_pages - ($adjacents * 2) > ($start / $per_page) && ($start / $per_page) > ($adjacents * 2))
{
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=0'>1</a> ";
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$per_page'>2</a> .... ";
 
$i = $start;                 
for ($counter = ($start/$per_page)+1; $counter < ($start / $per_page) + $adjacents + 2; $counter++)
{
if ($i == $start){
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'><b>$counter</b></a> ";
}
else {
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'>$counter</a> ";
}   
$i = $i + $per_page;                
}
                                  
}
//close to end; only hide early pages
else
{
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=0'>1</a> ";
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$per_page'>2</a> .... ";
 
$i = $start;                
for ($counter = ($start / $per_page) + 1; $counter <= $max_pages; $counter++)
{
if ($i == $start){
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'><b>$counter</b></a> ";
}
else {
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'>$counter</a> ";   
} 
$i = $i + $per_page;              
}
}
}
          
//next button
if (!($start >=$foundnum-$per_page))
echo " <a href='search.php?search=$search&duma=$duma&Търси&start=$next'>Next</a> ";    
}   
echo "</center>";
} 




?>

"търсачката не работи"  означава, че като напиша нещо в търсачката и избера таблица и дам търсене ми дава това 0 results.

Ето ми кода

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Но ти нищо не си променил !

Нито грешките си поправил, нито SQL заявките са променени.

Как искаш да работи ?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-88">
<title>Търсене</title>
<form name='search' method='GET'>
Търсене: <input type='text' name='duma' />
<select name='table'>
<option value="program">program</option>
<option value="news">news</option>
</select>
<br /><input type='submit' name='submit' value='Търси' /><br />
<form>
<?
include("conf.php");
$button = $_GET ['submit'];

$duma = $_GET['duma'];
$table = $_GET['table'];



if (strlen($duma) < 4) {
echo "Трябва да въведете повече от 4 символа.";
}
else {
	$constructs ="SELECT * FROM $table  where (namepr LIKE'%$duma%')or (name LIKE'%$duma%')   ";
$run = $conn->query($constructs);
    
$foundnum =  $run->num_rows; 
    

  
$per_page = 1;
$start = isset($_GET['start']) ? $_GET['start']: '';
$max_pages = ceil($foundnum / $per_page);
if(!$start)
$start=0; 
$sql = "SELECT * FROM $table  where (namepr LIKE'%$duma%')or (name LIKE'%$duma%')  LIMIT $start, $per_page" ;
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "Name: " . $row["namepr"]. "<br>";
		        echo "Name: " . $row["name"]. "<br>";

		
    }
} else {
    echo "0 results";
}
echo "<center>";
  
$prev = $start - $per_page;
$next = $start + $per_page;
                       
$adjacents = 3;
$last = $max_pages - 1;
  
if($max_pages > 1)
{   
//previous button
if (!($start<=0)) 
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$prev'>Prev</a> ";    
          
//pages 
if ($max_pages < 7 + ($adjacents * 2))   //not enough pages to bother breaking it up
{
$i = 0;   
for ($counter = 1; $counter <= $max_pages; $counter++)
{
if ($i == $start){
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'><b>$counter</b></a> ";
}
else {
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'>$counter</a> ";
}  
$i = $i + $per_page;                 
}
}
elseif($max_pages > 5 + ($adjacents * 2))    //enough pages to hide some
{
//close to beginning; only hide later pages
if(($start/$per_page) < 1 + ($adjacents * 2))        
{
$i = 0;
for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
{
if ($i == $start){
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'><b>$counter</b></a> ";
}
else {
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'>$counter</a> ";
} 
$i = $i + $per_page;                                       
}
                          
}
//in middle; hide some front and some back
elseif($max_pages - ($adjacents * 2) > ($start / $per_page) && ($start / $per_page) > ($adjacents * 2))
{
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=0'>1</a> ";
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$per_page'>2</a> .... ";
 
$i = $start;                 
for ($counter = ($start/$per_page)+1; $counter < ($start / $per_page) + $adjacents + 2; $counter++)
{
if ($i == $start){
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'><b>$counter</b></a> ";
}
else {
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'>$counter</a> ";
}   
$i = $i + $per_page;                
}
                                  
}
//close to end; only hide early pages
else
{
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=0'>1</a> ";
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$per_page'>2</a> .... ";
 
$i = $start;                
for ($counter = ($start / $per_page) + 1; $counter <= $max_pages; $counter++)
{
if ($i == $start){
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'><b>$counter</b></a> ";
}
else {
echo " <a href='search.php?search=$search&duma=$duma&submit=Search+source+code&start=$i'>$counter</a> ";   
} 
$i = $i + $per_page;              
}
}
}
          
//next button
if (!($start >=$foundnum-$per_page))
echo " <a href='search.php?search=$search&duma=$duma&table=$table&Търси&start=$next'>Next</a> ";    
}   
echo "</center>";
} 




?>

Ето ми кода. Ако променя заявките така търси $sql = "SELECT * FROM $table  where (namepr LIKE'%$duma%')  LIMIT $start, $per_page" ; Само в таблица програми, но ако променя това namepr на name търси в таблица новини. Как да оправя заявката та да търси в поле на таблица новини.

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Пробах заявките така.

 $constructs ="SELECT * FROM $table  where (namepr OR name LIKE'%$duma%')   ";

$sql = "SELECT * FROM $table  where (namepr OR name LIKE'%$duma%')  LIMIT $start, $per_page" ;

И така.

 $constructs ="SELECT * FROM $table  where (namepr LIKE'%$duma%') OR  (name LIKE'%$duma%')";
$sql = "SELECT * FROM $table  where (namepr  LIKE'%$duma%') OR  (name LIKE'%$duma%') LIMIT $start, $per_page" ;


И по двата начина не търси.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

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

Променяй и името на полето, по което ще търсиш, ако е необходимо.

Нали си съгласен, че няма как да знам коя твоя таблица, какви полета има ?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ай-ай-ай...

Този сайтец плаче за хакване с този кодец:

$duma = $_GET['duma'];
$table = $_GET['table'];

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ще сложа защита щом търсачката я завърша. 

Търсачката трябва да търси в две таблици. Едната таблица е news  колона за търсене е name тип на полето varchar(255).

Втората таблица е program  колона за търсене е namepr тип на полето varchar(255).

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ще сложа защита щом търсачката я завърша. 

Търсачката трябва да търси в две таблици. Едната таблица е news  колона за търсене е name тип на полето varchar(255).

Втората таблица е program  колона за търсене е namepr тип на полето varchar(255).

 

https://dev.mysql.com/doc/refman/5.0/en/union.html

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Пробвах и с UNION заявките и пак не намира нищо. Ето как пробвах заявките.

 $constructs ="(SELECT namepr FROM $table  where (namepr LIKE'%$duma%'))  UNION  (SELECT name FROM $table  where (name LIKE'%$duma%'))";

 

$sql = "(SELECT namepr FROM $table  where (namepr LIKE'%$duma%') ) UNION  (SELECT name FROM $table  where (name LIKE'%$duma%')) LIMIT $start, $per_page" ;

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

UNION заявката е ако ще търсиш едновременно в двете таблици. Тогава ще е нещо такова:

(SELECT namepr as name FROM table1  where (namepr LIKE'%$duma%'))  UNION  (SELECT name FROM table2  where (name LIKE'%$duma%'))

Таблиците трябва да са указани със съответните си имена, а не с $table. Ти реално гледаш в една таблица за несъществуващо име.

 

Ако ще търсиш само в една, като заместваш името на таблицата, замествай и името на полето. И нямаш нужда от UNION

 

Когато е избрана едната таблица ще имаш:

SELECT namepr as name FROM $table  where (namepr LIKE'%$duma%')

А когато е другата :

SELECT name as name FROM $table  where (namepr LIKE'%$duma%')
Редактирано от Ken (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.