Autor Zpráva
marko12
Profil *
Dobrý deň,
mám jeden problém so svojim skriptom pre FullTextove vyhľadávanie v databáze MySQL. Skúšam si sam urobiť skript no nechce mi vypísať výsledky aj keď dané slovo sa nachádza v databáze.

function odstranDiakritiku($str) 
{ 
   //pismena s diakritikou 
   $dia = array('á', 'ä', 'č', 'ď', 'é', 'ě', 'í', 'ľ', 'ĺ', 'ň', 'ó', 'ô', 'ŕ', 'ř', 'š', 'ť', 'ú', 'ů', 'ý', 'ž', 'Á', 'Ä', 'Č', 'Ď', 'É', 'Í', 'Ľ', 'Ĺ', 'Ň', 'Ó', 'Ô', 'Ř', 'Š', 'Ť', 'Ú', 'Ý', 'Ž'); 

   //prislusne pismena bez diakritiky 
   $nodia = array('a', 'a', 'c', 'd', 'e', 'e', 'i', 'l', 'l', 'n', 'o', 'o', 'r', 'r', 's', 't', 'u', 'u', 'y', 'z', 'A', 'A', 'C', 'D', 'E', 'I', 'L', 'L', 'N', 'O', 'O', 'R', 'S', 'T', 'U', 'Y', 'Z'); 
    
   return str_replace($dia, $nodia, $str); 
} 
 
      
 //Overime ci bolo stlacene tlacitko HLADAT
 if (isset($_POST["hladat"])) 
 { 
 echo "<h2>Vysledky</h2>"; 
 
 $find = $_POST["find"]; 
 if ($find == "") 
 { 
 echo "<p>Nezadali ste ziadne slovo</p>"; 
 exit; 
 }  
 
 // Trosku upravime vlozene slovo  
 $find = strtoupper($find); 
 $find = strip_tags($find); 
 $find = trim ($find);
 $find = odstranDiakritiku($find);

if (strlen($find) <=3) { echo "<p>Zadané slovo musí obsahovať najmenej 4 znaky.</p>"; }
 
 //Skript na vyhladavanie v databaze
 $data = mysql_query("SELECT * FROM clanky WHERE odstranDiakritiku(upper(nadpis)) AND odstranDiakritiku(upper(nadpis)) AND odstranDiakritiku(upper(nadpis)) LIKE'%$find%' COLLATE 'utf8_general_ci'"); 
 
 //And we display the results 
 while($result = mysql_fetch_array( $data )) 
 { 
 echo $result['nadpis']; 
 echo "<br>"; 
 echo $result['odsek']; 
 echo "<br>"; 
 echo "<br>"; 
 } 
 
 //Zistíme počet výsledkov 
 $anymatches=mysql_num_rows($data); 
 if ($anymatches == 0) 
 { 
 echo "Zadané slovo sa v databáze nenachádza<br><br>"; 
 } 
 
 //Pripomenieme uzivatelovi, ze co hladat
 echo "<b>Hladane slovo:</b> " .$find; 
 } 

      
      ?>

Stále mi to vypíše: Zadané slovo sa v databáze nenachádza.

Určite bude chyba v premennej $data mohli by ste ma uviesť na pravu mieru, že ako to má vyzerať?
Ďakujem veľmi pekne,
prajem pekný deň.
Oli
Profil *
Myslím, že takhle nemůžes uvnitř řetězce použít funkci. A ještě jsem nepochopil, proč tam je 3x AND na to samé.

Podle tohodle se navíc snažíš o něco, co není potřeba. ;-)
marko12
Profil *
Nahradil som to tymto:
$data = mysql_query("SELECT nadpis,odsek,text FROM LOWER(clanky) LIKE LOWER('%$find%') COLLATE 'utf8_general_ci'");
Ale ani toto nie je ono, stale vypise: Zadané slovo sa v databáze nenachádza.
marko12
Profil *
Kde je problem?

Nahradil som premennu data tymto:
 $data = mysql_query("SELECT * FROM clanky LIKE %".$find."% COLLATE 'utf8_general_ci'");

a aj tak nič nenájde. Prihlásenie do databázy mám a aj tabuľka clanky existuje. Vedel by teda niekto poradiť, kde mám chybu?
Stále sa vypíše,že zadané slovo sa v databáze nenachádza.

Ďakujem
Alphard
Profil
SQL dotaz jste redukoval tak dlouho, až jste ztratil where a sloupec. Vyhledávaný výraz není obalen apostrofy.
abc
Profil
marko12:
chybí ti tam WHERE ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0