Skocz do zawartości
soska66

Php, Mysql - Prosta Wyszukiwarka - Nie Działa

Rekomendowane odpowiedzi

mam problem z wyszukiwaniem

 

Zastosowałem standardowe zapytanie:

 

$wykonaj="select * from film where tytulpl like '%$szukaj%'";

gdzie szukaj to nazwa pola w formie gdzie wpisujemy żądany wyraz.

 

I np...wpisując "te", wyswietla kilka tytulow z "te" (np. Statek) i "tę" (np. poznaj mojego tatę) ale nie wyswietla np. tytulu "Terminal" gdzie tez jest te. jedyna roznica to taka,ze Terminal zaczyna sie z duzej litery ale wpisujac "Te" i tak nie znajduje "Terminal'a".

 

Podobna (choc troche inna) jest sytuacja z tytulem "1984". Wyswietla go po wpisaniu "19" ale juz po wpisaniu "198" juz nie.

 

Z kolei jak wpiszę bzdurę w stylu "cvhavchjg" to wyswietla zawsze ponizsze tytuly:

 

40 dni i 40 nocy

8 Mila

28 dni później

1984

8 milimetrów

 

Ogólnie rzecz biorąc niby wyszukuje ale robi to źle i niedokładnie.

 

Gdzie tkwi bubel???

Edytowane przez soska66

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

na bank się nigdzie nie powtarza. Przejżałem dokładnie kod....poza tym testowałem sam skrypt wyszukiwania na osobno stworzonym pliku php. A może to zależy od języka kodowania samej bazy?? ostatnio w innym poscie pytalem o ten problem gdyz wszystkie tytuly zacznajace się na Ł, Ś itd. wyrzucał na końcu listy, po Z a nie zgodnie z alfabetem po L czy S. No ale jaki ma związek polska litera z tytułłem "1984" , który nie wyświetla się po wyszukaniu frazy "198":)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jaka wersja MySQL ?

 

Sprawdzales przed samym wykonaniem zapytania echo $wykonaj; ?

 

Wykorzystywanie LIKE do znalezienia substringa w stringu jest nieefektywne, powinienes raczej skorzystac z funkcji LOCATE lub INSTR, np.

SELECT * FROM film WHERE INSTR(tytulpl, '$szukaj') > 0

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

echo $szukaj pokazuje to co powinno, czyli wpisana w okno wyszukiwania fraze

 

instrukcja

SELECT * FROM film WHERE INSTR(tytulpl, '$szukaj') > 0

daje taki sam efekt. Dalej działa tak samo, czyli źle. I dokładnie te same sytuacje mają miejsce

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Spróbuj wykonać to zapytanie bezpośrednio do bazy bez udziału php.

W tym przypadku działa. bezpośrednio w bazie

 

no to co mogłem walnąć w kodzie php??

 

Moze zle wywoluje?? a moze dlatego,ze kodowanie w pliku php jest cp1250 a w bazie inne (nie konfigurowalem bazy pod tym katem.lece na domyslnym ustawieniu)??

 

fragmnent kodu:

 

formularz:

<FORM name="szukanie" METHOD=POST ACTION="spis.php?action=search"><INPUT TYPE="text" NAME="szukaj"><center><a href="javascript:document.szukanie.submit();">SZUKAJ</a></center></FORM>

skrypt sprawdzajacy i wyswietlajacy:

 

$wykonaj="SELECT * FROM film WHERE INSTR(tytulpl, '$szukaj') > 0";                       $wynik = mysql_query( $wykonaj, $sql );            if ( $wynik == True )            {                       while ( $pole = mysql_fetch_array( $wynik ) )                {                       	 echo "<a href='film.php?id=".$pole["id"]."&&l=".$l."'>".$pole["$tytulpl"]."</a><br>";                  }                     }

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ale paskudny kod.

 

ładniej na przykład tak:

$wykonaj="SELECT * FROM film WHERE INSTR(tytulpl, '$szukaj') > 0";if(!($result = mysql_query($wykonaj))) {        echo mysql_error();}else {        while($row = mysql_fetch_array($result, MYSQL_BOTH)) {             print_r($row); // albo jakieś echo, co chcesz.        }}

W każdym razie nie rozumiem jednej rzeczy - czemu masz $pole["$tytulpl"]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

formularz:

<TABLE class="tabela">   	 <TR>      <TD>     	 <FORM name="szukanie" METHOD=POST ACTION="spis.php?action=search">     	 <INPUT TYPE="text" NAME="szukaj">     	 <center><a href="javascript:document.szukanie.submit();">SZUKAJ</a></center>     	 </FORM>      </TD>   	 </TR>   	 </TABLE>

 

skrypt:

<TABLE class="tabela_spis" cellpadding="0" cellspacing="0"><?//Połączenie z bazą danych$sql=mysql_connect(localhost,root,krasnal);mysql_select_db(filmy,$sql);switch($l){	case 1:  $jezyk="tytulen";  $jezyk2="tytulpl";  break;	case 0:  $jezyk="tytulpl";  $jezyk2="tytulen";  }//Wyświetlenie listy filmówif($action!=search){	$wykonaj = "select * from film order by $jezyk asc";}else{	$wykonaj="SELECT * FROM film WHERE INSTR(tytulpl, '$szukaj') > 0";}                    $wynik = mysql_query( $wykonaj, $sql );            if ( $wynik == True )            {                // Pobranie wiersza danych i wypisanie dwóch pól                while ( $pole = mysql_fetch_array( $wynik ) )                {                    if($id!=1){                 echo "<TR><TD width=50%><a style='margin-left:3px' href='film.php?id=".$pole["id"]."&&l=".$l."'>". $pole["$jezyk"]."</a></TD><TD> ".$pole["$jezyk2"]."</TD></TR>";}   	    	                                    }                        }?> 	 </TABLE>

Reszta kodu to htmlowskie tabelki i takie tam.....nic co mogloby decydowac o bazie danych

 

Musze dodac, ze przygode z mysql i php zaczalem nie dawno i nie czytalem jeszcze specjalnie duzo fachowych porad, wiec kod jest jaki jest. bez nowatorskich rozwiazan i z rozwiazaniami "po chlopksu":)

 

i jeszcze skrypt (caly plik) ktory dodaje wpisy do bazy

function InsertRecord( $aTytulpl, $aTytulen, $aGatunek1, $aGatunek2, $aProdukcja,$aRokprod, $aRezyser,$aAktor1,$aAktor2,$aAktor3,$aAktor4, $aOpis){    // Przygotowanie wyrażenia SQL INSERT    $wstaw  = "insert into film (tytulpl,tytulen,gatunek1,gatunek2,produkcja,rokprod,rezyser,aktor1,aktor2,aktor3,aktor4,opis) values ( '$aTytulpl', '$aTytulen', '$aGatunek1', '$aGatunek2', '$aProdukcja','$aRokprod', '$aRezyser', '$aAktor1','$aAktor2','$aAktor3','$aAktor4', '$aOpis')";    // Przyłączenie do serwera i wykonanie instrukcji INSERT    $sql = mysql_connect( "localhost", "root", "krasnal" ) or die("Error1 " . mysql_error());       mysql_select_db( filmy, $sql ) or die("Error2 " . mysql_error());;    $wynik = mysql_query( $wstaw, $sql ) or die("Error3 " . mysql_error());;            if ( $wynik == True )            {                $wynik = mysql_insert_id( $sql );            }            else            {                // print( "Błąd wykonania zapytania<br>" );                $wynik = -1;            }                     return $wynik;}?> <html>    <head>        <title>Wstawianie danych do bazy </title>   <meta http-equiv="Content-type" content="text/html; charset="cp1250" />    </head>	<style>	TD {vertical-align:top;}	</style>    <body>    <?php        if ( $REQUEST_METHOD == 'POST' )         {            // Nastąpiło przesłanie danych formularza            $wynik2 = InsertRecord($Tytulpl, $Tytulen, $Gatunek1, $Gatunek2, $Produkcja, $Rokprod, $Rezyser,$Aktor1,$Aktor2,$Aktor3,$Aktor4, $Opis);            if ( $wynik2 > 0 )            {                print( "Dodano nowy wiersz, ID = $wynik2<br>" );            }            else            {                print( "Błąd funkcji InsertRecord. Kod błędu = $wynik2<br>" );            }            print( "<hr>" );        }    ?>    Wpisz dane dodawanego filmu:<br>	<FORM METHOD=POST ACTION="dodaj.php">	<table border="0"><tr><td width="25%">   <TABLE width="100%" border="0" cellpadding="0" cellspacing="0">    <TR>    <TD width="100">Tytul polski</TD>    <TD><input type="text" name="Tytulpl" maxlength="100"></TD>   <TR>    <TD>Tytul oryginalny:</TD>    <TD><input type="text" name="Tytulen" maxlength="100"></TD>   </TR>   <TR>    <TD>Gatunek:</TD>    <TD><input type="text" name="Gatunek1" maxlength="20"><br>	<input type="text" name="Gatunek2" maxlength="20"></TD>   </TR>   <TR>    <TD></TD>    <TD></TD>   </TR>   <TR>    <TD>Produkcja:</TD>    <TD><input type="text" name="Produkcja" maxlength="50"></TD>   </TR>    <TR>    <TD>Rok produkcji</TD>    <TD><input type="text" name="Rokprod" maxlength="15"></TD>   </TR>   <TR>    <TD>Rezyser:</TD>    <TD><input type="text" name="Rezyser" maxlength="30"></TD>   </TR>    <TR>    <TD>Występują:</TD>    <TD><input type="text" name="Aktor1" maxlength="30"><br>	<input type="text" name="Aktor2" maxlength="30"><br>	<input type="text" name="Aktor3" maxlength="30"><br>	<input type="text" name="Aktor4" maxlength="30"><br></TD></TR></table></td><td><iframe width="100%" frameborder="0" height="300" cellpadding="0" cellspacing="0" src="http://www.filmweb.pl"></iframe></tr><table>   <TR>    <TD width="93">Opis:</TD>    <TD><TEXTAREA NAME="Opis" ROWS="10" COLS="100%"></TEXTAREA><br></TD>   </TR>   </TABLE>   <input type="submit" name="Submit" value="Wyslij">    </form><hr><a href="index.php">Wróć do spisu</a>    </body></html>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...