Wyszukiwarka mysql Koreya

2010-10-20 12:00:53 Post #1 korey

 
Jako że zostałem zaintrygowany problemem Justyny postanowiłem troszkę bliżej wglądnąć się w kod stworzony przez Justynę we współpracy z Nospor-em. Wpadłem na pomysł że w moim skromnym servisiku też przyda się jakaś skromna wyszukiwarka działająca na DB. Pierw lekko dopieszczony kod:

<?php
if(isset($_POST['submit_form'])){
$pokaz_form = 0;
$blad=false;
if(isset($_POST['wyszukaj']))
{
$wh = array();
if ($_POST['wyszukaj'] == 'tytul'){
$wh[] = "`tytul` LIKE '%$_POST[znajdz]%' ";
}
if ($_POST['wyszukaj'] == 'tresc'){ 
$wh[] = "`tresc` LIKE '%$_POST[znajdz]%' "; 
}

if ($_POST['wyszukaj'] == 'autor'){
$wh[] = "`autor` LIKE  '%$_POST[znajdz]%' "; 
}

if (!empty($wh)){
	$where = implode(' and ', $wh); 
	echo $where;
	echo '<br />';
	print_r($wh);
	echo '<br />';
}
else{
	$where = '';
}
}

else{
echo 'Zaznasz jedna z poanych kategorii!';
$pokaz_form = 1;
$blad=true;
}

///////////
if($blad != true){
	$sql = "SELECT * FROM `artykuly` WHERE ".$where;
	echo $sql;
	mysql_query($sql) or die('<br /><br />ZAPYTANIE: '.$sql.polskie_znaki('BŁĄD: '.mysql_error()));
	$wynik = mysql_query($sql);
	$num_results = mysql_num_rows($wynik); 
echo "<h4>Wyniki wyszukiwania:</h4>"; 

 echo("<h2>Ilość znalezionych produktow: ".$num_results. "</h2><br/>");
 for ($i=0; $i<$num_results; $i++) {
    $row = mysql_fetch_array($wynik);
	
    echo($i+1);
    echo polskie_znaki($row['tytul']);
    echo '<br /> ';
    echo polskie_znaki($row['tresc']);
    echo '<br /> ';
    echo polskie_znaki($row['autor']);
    echo '<br/> ';
	echo '<hr>';
}
$pokaz_form = 0;
}

}
else{
$_POST['wyszukaj'] = '';
$pokaz_form = 1;
}
if($pokaz_form != 0){
?>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<input name="wyszukaj" type="radio" value="tytul" /> W tytule<br />
<input name="wyszukaj" type="radio" value="tresc" /> W treść<br /> 
<input name="wyszukaj" type="radio" value="autor" /> w/g autora<br />
Wpisz wyszukiwany związek: <input type="text" name="znajdz" />
 <input type="submit" name="submit_form" value="szukaj!" />
</form> 
<?php
}
else{
return null;
}
?>


Jest To wyszukiwarka która wyszukuje treści zawartych w artykułach.. no i teraz opis napotkanego problemu.:

załóżmy ze wyszukujemy treści newsa. Przykładowa treść:
"Korey lubi sobie pić browarka w weekend.. bla bla bla"
Normalnie jak wpiszę w pole name="znajdz" tekst "korey lubi so" lub "pić browar".
PHP zwróci mi pozytywny wynik i wyświetli artykuł który zawiera taki tekst.
Lecz gdy wpiszę w pole name="znajdz" korey browar lubi PHP zwróci 0 wyników.

Po wyświetlałem sobie poprzez ECHO co zawiera zmienna $wh[] i $where.
$where oddaje mi np: `tresc` LIKE '%korey browar lubi%' <-< ten wiersz zwraca 0 w zapytaniu.
teraz chciałbym zrobić tak by $where zwróciło mi coś takiego:

<?php
tresc` LIKE  '%korey%' and tresc` LIKE  '%browar%' and tresc` LIKE  '%lubi%'
// gdzie $_POST zawierałby korey browar lubi.
?>


Kombinowałem to przerobić używając innych funkcji (tj. str_replace();, explode() ale to nie przynosiło pożądanego efektu.


PS: cos się zj-e-b-o z opcją CODE. gdy umieściłem w niej drugi kod to wyświetlało mi ten pierwszy. ;/

2010-10-20 14:34:25 Post #2 nospor

 
Zainteresuj się wyszukiwanie pełnokontekstowym.

Jeśli jednak cię to nie interesuje, to musisz swoją fraze rozbić na słowa. Do tego celu uzyj explode() i dziel po spacji. A potem z uzyskanej tablicy słów skleć kawałek kodu z like co pokazałeś

2010-10-20 17:16:00 Post #3 korey

 
no właśnie używałem explode() i jakoś nic z tego nie wychodziło mi

2010-10-20 18:23:02 Post #4 nospor

 
No to pokaz jak robiles to się poprawi

2010-10-21 17:57:24 Post #5 korey

 
Pobawiłem się trochę tymi funkcjami i o to działający kod:

<?php
if(isset($_POST['submit_form'])){
$pokaz_form = 0;
$blad=false;
//usuwamy białe znaki
	foreach ($_POST AS $klucz => $wartosc)
    {
        $wartosc= trim($wartosc);
          if (get_magic_quotes_gpc()) 
              $wartosc= stripslashes($wartosc);
        $wartosc=htmlspecialchars($wartosc, ENT_QUOTES);
        $_POST[$klucz]=$wartosc;
    }
if(empty($_POST['znajdz'])){
$error = 'Wypełnij pole wyszukiwarki!';
$pokaz_form = 1;
$blad=true;
}
else if(empty($_POST['wyszukaj']))
{
$error = 'Zaznasz jedna z poanych kategorii!';
$pokaz_form = 1;
$blad=true;
/////////////
}
else{
$wh = array();
if ($_POST['wyszukaj'] == 'tytul'){
$wh = "'%$_POST[znajdz]%'";
$from = "`tytul`";
}
if ($_POST['wyszukaj'] == 'tresc'){ 
$wh = "'%$_POST[znajdz]%'"; 
$from = "`tresc`";
}

if ($_POST['wyszukaj'] == 'autor'){
$wh = "'%$_POST[znajdz]%'"; 
$from = "`autor`";
}

if (!empty($wh)){
	$zamiana = str_replace(" ", "%' '%", $wh); //zamieniamy  wszystkie SPACJE z ciągu znaków na (  ', '   )
	$rozbicie = explode(" ", $zamiana); // rozbijamy przygotowany ciąg znaków na tablice
	$where = implode(" OR $from LIKE ", $rozbicie);
	
#####################=== Pomocne zmienne ===#######################
/*	
	print_r($wh); echo ' --- zmienna WH<br /><br />'; // Zawartość ZMIENNEJ $wh
	echo $zamiana.' --- $Zamiana<br /><br />'; // Zawartość ZMIENNEJ $zamiana
	print_r($rozbicie); echo ' --- ROZBICIE Na tablice<br /><br />'; // Zawartość ZMIENNEJ $rozbicie
	print_r($where); echo ' --- zmienna WHERE gotowa do użycie w zapytaniu.<br /><br />'; // Zawartość ZMIENNEJ $where
*/
################################################################
}
else{
	$where = '';
}
}
///////////
if($blad != true){
	$sql = "SELECT * FROM `artykuly` WHERE $from LIKE ".$where;
	echo $sql;
	mysql_query($sql) or die('<br /><br />ZAPYTANIE: '.$sql.polskie_znaki('BŁĄD: '.mysql_error()));
	$wynik = mysql_query($sql);
	$num_results = mysql_num_rows($wynik); 
echo "<h4>Wyniki wyszukiwania:</h4>"; 

 echo("<h2>Ilość znalezionych produktow: ".$num_results. "</h2><br/>");
 for ($i=0; $i<$num_results; $i++) {
    $row = mysql_fetch_array($wynik);
	
    echo($i+1);
    echo polskie_znaki($row['tytul']);
    echo '<br /> ';
    echo polskie_znaki($row['tresc']);
    echo '<br /> ';
    echo polskie_znaki($row['autor']);
    echo '<br/> ';
	echo '<hr>';
}
$pokaz_form = 0;
}

}
else{
$_POST['wyszukaj'] = '';
$pokaz_form = 1;
}
if($pokaz_form != 0){
?>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<ul id="form">
<li><?php if(!empty($error)){ echo polskie_znaki($error); }else{}?></li>
<li><b>Szukaj w:</b>
<input name="wyszukaj" type="radio" value="tytul" />Tytule 
<input name="wyszukaj" type="radio" value="tresc" />Treści
<input name="wyszukaj" type="radio" value="autor" />w/g Autora
</li>
<li><input class="write" type="text" name="znajdz" />
<input class="action" type="submit" name="submit_form" value="szukaj!" />
</li>
</ul>
</form> 

<?php
}
else{
return null;
}
?>

2010-10-22 09:43:47 Post #6 nospor

 
Kod co tu pokazałeś ma się nijak do wyszukiwarki, o której wspominałeś na początku....

2010-10-22 14:21:41 Post #7 korey

 
Tak przez pomyłkę wkleiłem nie to co trzeba... Już to poprawiłem.

Odpowiedz

Ostatnio komentowane

  1. ShoutBox Ktos
  2. Opcje dwuwartościowe... gosc
  3. Opcje dwuwartościowe... Krzysiek
  4. ShoutBox gosc
  5. ShoutBox Net-Studio
  6. Liczba dni roboczych Torin
  7. Mysql - FAQ Paweł

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer