Nie działająca wyszukiwarka

0

Witam szanownych kolegów :)

Mam problem z wyszukiwarką a właściwie, że nie działa...
Joomla i własny komponent. Wyświetlam sobie tabelę z rekordami z bazy a powyżej mam wyszukiwarkę gdzie chciałbym znaleźć odpowiednie rekordy. Ma wyszukać tylko z jednej tabeli pomieszczenia: id_pomieszczenia, nr_pomieszczenia, opis. Nie działa też przycisk "czyść". Za każdym razem mam komunikat: " Brak danych spełniających podane kryterium". Podaję kod może ktoś mógłby pomóc:

 echo '
<table>';

echo' <h1>Wpisz szukaną frazę</h1>
        <form method="post" id="search" action="index.php?option=com_katalog&view=kwat_pom">
        <p>
          <input name="search_query" class="textbox" type="text" value="';
    echo $_POST['search_query'];
    echo '" />
          <input name="klawisz" class="searchbutton" value="Szukaj" type="submit" /> 
          <input type="reset" value="wyczyśc" name=""/>
         
        </p>
      </form>';
        ?>

 <div id="com_katalog_content">
    <h1 class="componentheading">Pomieszczenia</h1>
        
</div>
           <?php  
       $db = JFactory::getDBO();
       if (isset($_POST['search_query'])){
            $warunek = "WHERE nr_pomieszczenia
                        LIKE '%".$_POST['search_query']."%' AND opis LIKE '%".$_POST['search_query']."%' ";
            }
      $query = "SELECT *
               FROM #__pomieszczenia";
     

// Executes the current SQL query string.
$db->setQuery($query);
// returns the array of database objects
$list = $db->loadObjectList();
// create the list of titles
foreach ($list as $item) {
$item_title = $item->title;


}

$db->setQuery($query);
$row = $db->loadObjectList();

$tabela = $this->get('getCategory');

 if($i==0&&strstr($_POST['klawisz'],'Szukaj')!==FALSE&&strlen($warunek)>0){
            echo '<tr><b>Brak danych spełniających podane kryterium</b></td></tr>';
        }
        
echo "<table id=tabelka>";


echo "<tr><th>Nr pomieszczenia</th><th>Opis</th>";
    
foreach ($list as $item) {

    echo "<tr>";
        
         echo "<td>";
        
         echo JHTML::_('link', 'index.php?option=com_katalog&view=listasprzetu&id='.$item->id_pomieszczenia, $item->nr_pomieszczenia);
       echo "</td>";
               
        echo "<td><left>".$item->opis."</left></td>";
       
    echo "</tr>";
    
}
 
echo "</table>";
0

Nie chce mi się tego analizować (anty-Joomlowy jestem), ale to:

 <input name="search_query" class="textbox" type="text" value="';
    echo $_POST['search_query'];
    echo '" />

To się nazywa XSS (sprawdź w Google)

0

No tak... Składnia wygląda na podatną ataki. A register_globals to samozagłada jak mawia autor Bełdzio :)

może coś na ten styl:

$podstawaszukania = addslashes($podstawaszukania);  



$query = "select * from jos_pomiesczenia where ".$podstawaszukania." like '%"; 
$result = mysql_query($query);  
$num_results = mysql_num_rows($result);  

print "<p>Ilość znalezionych rekordów: ".$num_results."</p>";  
for ($i=0; $i <$num_results; $i++)  {  
   $row = mysql_fetch_array($result);    
   print ($i+1).". ";   
   print stripslashes($row["nr_pomieszczenia"]);    
   print ", nr_pomieszczenia: ";     
   print stripslashes($row["opis"]);    
   print "opis:";

   print "<br>";
}
0

addslashes do zapytania MySQL?
A manual czytałeś?

To escape database parameters, DBMS specific escape function (e.g. mysqli_real_escape_string() for MySQL or pg_escape_literal(), pg_escape_string() for PostgreSQL) should be used for security reasons.

A ten security reason to fakt, ze addslashes pozwala na wstrzyknięcie kodu SQL (poczytaj na necie - nie jest to tak trywialne jak dopisanie z klawiatury apostrofu w parametrze GET, ale możliwe).

register_globals to jeszcze większe zło jak magic quotes (o które Ci chyba chodziło). I w ogóle dlaczego korzystasz z mysql_query? Joomla chyba ma jakieś klasy do bazy danych?

0

Odniesienie do istniejącej bazy danych w Joomla można uzyskać za pomocą:$db =& JFactory::getDBO();

function getGreeting()
{
   $db =& JFactory::getDBO();
 
   $query = 'SELECT greeting FROM #__pomieszczenia';
   $db->setQuery( $query );
   $greeting = $db->loadResult();
 
   return $greeting;
} 

No nic... Nie mam dużego doświadczenia szczególnie jeżeli chodzi o mechanizm wyszukiwania.

0

Co do przycisku "czyść" - co to znaczy, że nie działa. Bo w HTML reset formy działa tak, że przywraca ją do pierwotnego stanu przy załadowaniu strony - nie czyści! - istotna różnica

spróbuj w warunku AND zmienić na OR - to chyba rozwiąże Twój problem. nie znam się na Joomli i jej sterowniku bazy, ale jeżeli Ty też nie jesteś pewien to na poziomie phpMyAdmin sprawdź czy masz jakieś wyniki pod danym zapytaniem, potem montuj wyświetlanie ich na stronie ;)

ach, i w zapytaniu też masz dziurę, tym razem SQL Injection (bo w formie to jest XSS)

0

Zmieniłem oczywiście na OR, ale coś jest jeszcze skopane. Muszę to wszystko przeanalizować bo jest coś pomieszałem.

0

Joomla to coś takiego, czego chyba nawet twórcy do końca nie rozumieją :)

0

Od strony zaplecza wyszukiwarka świetnie działa. Problem jest na stronie frontowej.

0

Już działa.

Wystarczyło dodać $warunek do zapytania:

  $query = "SELECT *
               FROM #__pomieszczenia ".$warunek;

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