soska66 Napisano 25 Stycznia 2005 Zgłoś Napisano 25 Stycznia 2005 (edytowane) 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 25 Stycznia 2005 przez soska66 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
ParanoiK Napisano 25 Stycznia 2005 Zgłoś Napisano 25 Stycznia 2005 podaj strukturę tabeli. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
soska66 Napisano 25 Stycznia 2005 Zgłoś Napisano 25 Stycznia 2005 (edytowane) Wkleje screen'a Edytowane 25 Stycznia 2005 przez soska66 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
ParanoiK Napisano 25 Stycznia 2005 Zgłoś Napisano 25 Stycznia 2005 Object not found! Czy nie możesz po prostu przekopiować struORT: ORT: ORT: ktury? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
soska66 Napisano 25 Stycznia 2005 Zgłoś Napisano 25 Stycznia 2005 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
ParanoiK Napisano 25 Stycznia 2005 Zgłoś Napisano 25 Stycznia 2005 Dziwne. A podaj jeszcze kod programu... może jakoś w trakcie zmienia się $szukaj? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
soska66 Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 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":) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
Gość Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
soska66 Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
ParanoiK Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 Spróbuj wykonać to zapytanie bezpośrednio do bazy bez udziału php. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
soska66 Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 Mam wersje: Apache 1.3.29 PHP 4.3.4 MySQL 3.23.58 phpMyAdmin 2.5.4 Korzystam z serwera "KRASNAL Serv" Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
ParanoiK Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 Choroba... Kończą mi się pomysły co mogłeś zepsuć. Testowałem mysql 3.23.52-log, 4.1.8, php 4.3.10, 4.3.0 i wszystko w każdym przypadku działa prawidłowo. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
soska66 Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 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>"; } } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
ParanoiK Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 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"] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
soska66 Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 mój błąd.......normlnie jest tam zmienna ale dla potrzeb zaprezentowania kodu poprawiłem na tytulpl i przeoczyłem usunięcia $. tak czy siak............czy paskudny kod czy nie.....powinno wszystko dzialac czy nie?? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
ParanoiK Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 Nie jest to przypadkiem błąd wprowadzania/parse'owania danych? Teoretycznie powinno działać. Teoretycznie. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
soska66 Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 wprowadzania lub parse'owania?? no nie wiem.....wszystko składnie działa, oprócz tego szukania No bo niby jak miałoby być żeby było dobrze?? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
ParanoiK Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 Pokaż cały kod. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
soska66 Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 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> Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...
soska66 Napisano 26 Stycznia 2005 Zgłoś Napisano 26 Stycznia 2005 dobra............juz działa:) nowsza wersje mysql wrzucilem ale swoja droga i tak dziwna sytuacja Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach More sharing options...