Wyszukiwanie pełnotekstowe a numerowanie stron

0

Witam,
Mam pytanie co do kodu, który mi nie do końca prawidłowo działa. Samo numerowanie działa mi. Samo wyszukiwanie słów wpisując nazwa, nazwa wyszukuje bez problemu. Ale gdy oba opcje chce połączyć, to efekt jest taki, że gdy wpisze wyraz, to wyświetla się. Gdy wejde na 2 podstronę, to pusta biała strona jest. Jak to inaczej napisać?
Pomijam połączenie z bazą danych.
O to kod:

$record_count = $mysqli->query("SELECT * FROM searchapp");
$per_page=2;
$pages = ceil($record_count->num_rows / $per_page);
if(!isset($_GET['page']))
{
$page = 1;
} else{
$page = $_GET['page'];
}
if($page <= 0) 
{
 $start = 1;
} else 
{
 $start = $page * $per_page - $per_page;
}
$prev = $page -1;
$next = $page +1;
if(isset($_POST['submit'])){
$wyraz = $_POST['wyraz'];
}
if(empty($wyraz)){
 
}else{


$result = $mysqli->query("SELECT *, MATCH (temat, opis) AGAINST ('*".$mysqli->real_escape_string($_POST['wyraz'])."*' IN BOOLEAN MODE)  FROM searchapp  WHERE MATCH (temat, opis) AGAINST ('*".$mysqli->real_escape_string($_POST['wyraz'])."*' IN BOOLEAN MODE)");
   {
   
    if($result->num_rows >0)
	
	{
    while ($row = $result->fetch_object()) 
	{
	   echo '<h3>',"$row->temat", '</h3>' ;
	   echo "$row->opis";
		
    }


   }
  }
}

$mysqli->close();

?>


</div>
<?php
if($prev > 0)
{
echo "<a href='?page=$prev'> << </a>";
echo "&nbsp;";
}

$number = 1;
for($number; $number <= $pages; $number+=1) {
if($page==$number){
echo "<b> $number</b>";
}else {
echo "<a href='?page=$number'>&nbsp; $number</a>";
 }
}
if($page < $pages)
{
echo "&nbsp;";
echo "<a href='?page=$next'> >> </a>";
}


?>
0
$record_count = $mysqli->query("SELECT * FROM searchapp");
$pages = ceil($record_count->num_rows / $per_page);

o boże, SERIO? o.O

SELECT * bez LIMIT i WHERE żeby POLICZYĆ REKORDY? Powodzenia w dalszym zarzynaniu serwera.

Google: "mysql count".

Inna rzecz - może zainteresuj się PDO zamiast pisać takie tworki jak

$mysqli->query("SELECT *, MATCH (temat, opis) AGAINST ('*".$mysqli->real_escape_string($_POST['wyraz'])."*' IN BOOLEAN MODE)  FROM searchapp  WHERE MATCH (temat, opis) AGAINST ('*".$mysqli->real_escape_string($_POST['wyraz'])."*' IN BOOLEAN MODE)");

to W OGÓLE nie jest czytelne.

kolejna rzecz - skoro liczysz ile jest WSZYSTKICH wierszy w bazie, na tej podstawie ustalasz że jest 10 podstron wyników, to co się dziwisz, że po wyszukaniu CZĘŚCI wierszy okazuje się, że jednak nie?
Przy zapytaniu SELECT COUNT -- .... też musisz zawszeć warunek WHERE, żeby policzyć ile masz wierszy tylko pasujących do zapytania

0

Te tworki to zapytanie pełnotekstowe. Czyli mam rozumieć, że błąd jest w pierwszym zapytaniu gdzie nie ma where ani Limit?

0

Dodałem do zapytania count(*) i teraz jest numer 1 w paginacji, i jak wpiszę kilka słów do pola wyszukiwania, efekt jest ten sam. Dobra spróbuje napisać aby wyszukiwało po jednym słowie bez paginacji, bo już nie wiem co może być źle.

0

ja się nie czepiam wyszukiwania pełnotekstowego, tylko łączenia zapytania z jednego wielkiego stringa, i to jescze wstawionego bezpośrednio w mysqli query, wraz z eskejpowaniem zmiennych także w tej linii, a sama funkcja eskepjująca ma taką nazwę, że włazi na połowę linijki tekstu :P

jak coś zmieniasz to pokaż nowy kod, będzie łatwiej zobaczyć co zmieniłeś (z opisów często wynika coś innego niż autor tematu faktycznie robi)

0

Kiedyś robiłem wyszukiwarkę, gdzie po wpisaniu słowa pokazywały sie definicje ale nie było to pełnotekstowe wyszukiwanie.
A używałem Select nazwaX, nazwaY from Nazwa Tabeli where nazwa_Kolumny Like '%szukana_nazwa%' order by id asc; I działało. Teraz to ponownie zrobię bez paginacji.

Ale zgodzę sie, że PDO jest lepszym rozwiązaniem ale wole jak na razie z mysqli korzystać.
Aby nie pisać post pod postem, napisałem inaczej. paginacja działa ale wskazuje mi na błąd w zapytaniu czyli na wyraz Undefined variable;
O to kod:

$record_count = $mysqli->query("SELECT * FROM searchapp");
$per_page=4;
$pages = ceil($record_count->num_rows / $per_page);




if(!isset($_GET['page']))
{
$page = 1;
} else{
$page = $_GET['page'];
}
if($page <= 0) 
{
 $start = 1;
} else 
{
 $start = $page * $per_page - $per_page;
}
$prev = $page -1;
$next = $page +1;

if(isset($_GET['submit'])){
$wyraz = $_GET['wyraz'];
}


  $query = "SELECT  temat, opis FROM searchapp WHERE temat LIKE '%$wyraz%' ORDER BY id ASC LIMIT  $start, $per_page ";
  {
 if ($result = $mysqli->query($query)) 
     {

    
    while ($row = $result->fetch_assoc()) {
     
       $temat = $row['temat'];
       $opis = $row['opis'];
       echo '<b>',"$temat", '</b>','<br>';
       echo "$opis",'<br>';
       // echo '<h3>',"$row->temat", '</h3>' ;
       // echo "$row->opis";
        
    }


   }
  }
  


$mysqli->close();

reszte kodu nie wstawiam bo numeracja jest taka sama jak na początku postu.
W tamtym pierwszym kodzie nie daje błędu w zapytaniu a w tym daje. Nie wiem czemu. Wiem, że to oznacza źle zdefiniowana zmienna. No cóż, wystarczy że dam @ przez $query.
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1