heh.pl
Kanał informacyjny Heh.pl


Piątek 3 maja 2024 r.

artykuły | abc komputera (archiwum) | forum dyskusyjne | redakcja


Temat

Php, Mysql - Prosta Wyszukiwarka - Nie Działa


195.205.63.* napisał:
mam problem z wyszukiwaniem

Zastosowałem standardowe zapytanie:

CODE
$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???

80.53.147.* napisał:
podaj strukturę tabeli.

195.205.63.* napisał:
Wkleje screen'a

80.53.147.* napisał:
Object not found!

Czy nie możesz po prostu przekopiować struktury?

195.205.63.* napisał:
[attachmentid=174]

80.53.147.* napisał:
Dziwne. A podaj jeszcze kod programu... może jakoś w trakcie zmienia się $szukaj?

195.205.63.* napisał:
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":)

212.109.132.* napisał:
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.
CODE
SELECT * FROM film WHERE INSTR(tytulpl, '$szukaj') > 0




195.205.63.* napisał:
echo $szukaj pokazuje to co powinno, czyli wpisana w okno wyszukiwania fraze

instrukcja
CODE
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

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

195.205.63.* napisał:
Mam wersje:

Apache 1.3.29
PHP 4.3.4
MySQL 3.23.58
phpMyAdmin 2.5.4

Korzystam z serwera "KRASNAL Serv"

80.53.147.* napisał:
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.

195.205.63.* napisał:


80.53.147.* napisał:
Ale paskudny kod.

ładniej na przykład tak:
CODE

$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"]



195.205.63.* napisał:
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??

80.53.147.* napisał:
Nie jest to przypadkiem błąd wprowadzania/parse'owania danych?
Teoretycznie powinno działać. Teoretycznie.

195.205.63.* napisał:
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??


80.53.147.* napisał:
Pokaż cały kod.

195.205.63.* napisał:
formularz:
CODE

<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:
CODE

<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ów
if($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
CODE

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>


195.205.63.* napisał:
dobra............juz działa:)

nowsza wersje mysql wrzucilem

ale swoja droga i tak dziwna sytuacja

Podobne tematy


Działy









Copyright © 2002-2024 | Prywatność | Load: 2.35 | SQL: 1 | Uptime: 42 days, 9:38 h:m | Wszelkie uwagi prosimy zgłaszać pod adresem eddy@heh.pl