Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/MySQL] LIKE / kodowanie bazy danych
mpawel007
post 3.08.2009, 21:09:09
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.02.2009

Ostrzeżenie: (0%)
-----


Witam.
Mam dwa problemy!
Zacznę od pierwszego bardziej istotnego (pod względem mojej bezradności). Napisałem sobie prosty kodzik wyciągający z bazy danych MySQL wartość tabeli zapytanie wygląda mniej więcej tak:
  1. SELECT * FROM nazwa_tabeli WHERE DATA >= '$data' AND branza = '$branza' AND sta LIKE '$fraza' ORDER BY id_o DESC

a $fraza = '%'.$_GET['klucz'].'%';
niestety operator LIKE nie działa no i w tym przypadku nie mam pojęcia dlaczego
<IMG src="style_emoticons/default/sad.gif" emoid=":(" border="0" style="vertical-align: middle">
Oto kod z małym komentarzem
Kod
$ofe="";$typ="";
$fraza = "%".$_GET['klucz']."%";
$branza = "$_GET['branza'];
switch($_GET['r']){   //tutaj sobie sprawdzam rozne warunki dla ktorych daje rozne zapytania
/*...*/
case 's':  //trafiam na interesujacy mnie fragment kodu
$ofe = "- Wyszukiwanie"; //ustawiam jakis tytul (nieistotne)
$typ = 6; //ustawiam typ (nieistotne w tym przypadku)
$zapytanie = mysql_query("SELECT * FROM nazwa_tabeli WHERE data &gt;= '$data' AND branza = '$branza' AND sta LIKE '$fraza' ORDER BY id_o DESC") or die(...);  /*zapytanie nie zwraca żadnych rezultatow nawet jesli zamiast $fraza wpisze %a% natomiast bez LIKE wszystko dziala ladnie i pięknie*/</P><P>break;
/*...*/
}
/*...*/
while($wykonaj = mysql_fetch_row($zapytanie)){ /*...*/}


Drugi problem polega na źle dobranym kodowaniu bazy danych (być może jego wynikiem jest problem pierwszy ;p
Kodowanie bazy ustawiałem na utf-8-polish-ci i latin-2-general-ci o ile sie dobrze orientuje one obsluguja polskie znaki. Swoj skrypcik mam kodowany na utf-8 (Bez BOM cokolwiek by to mialo znaczyć winksmiley.jpg. Jak bym nie zapisał rekordów w bazie to i tak pojawiają sie krzaczki (zamiast polskich znaków oczywiście) przy odczycie przez skrypt.
Z góry dziękuję za odpowiedzi.

Ten post edytował mpawel007 3.08.2009, 21:11:44
Go to the top of the page
+Quote Post
erix
post 3.08.2009, 22:01:45
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
iestety operator LIKE nie działa no i w tym przypadku nie mam pojęcia dlaczego

Tzn? Nic nie zwraca?

Cytat
Drugi problem polega na źle dobranym kodowaniu bazy danych (być może jego wynikiem jest problem pierwszy ;p
Kodowanie bazy ustawiałem na utf-8-polish-ci i latin-2-general-ci o ile sie dobrze orientuje one obsluguja polskie znaki. Swoj skrypcik mam kodowany na utf-8 (Bez BOM cokolwiek by to mialo znaczyć

Z polskimi znakami via GET jest problem, wysyłaj przez POST.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
mpawel007
post 3.08.2009, 22:24:32
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.02.2009

Ostrzeżenie: (0%)
-----


Cytat(erix)
Tzn? Nic nie zwraca?

na przykład jeśli policzę ile kolumn mi wyszukało (mysql_num_rows()) zawsze jest 0, czyli jakby nie było pasujących kryteriów (a takowe istnieją)

Co do drugiego problemu to wysyłam POST'em GET'a używam tylko w tym wypadku do wyszukiwania (w wyszukiwaniu nie muszą być uwzględniane polskie znaki wystarczy, żeby działał LIKE jak należy)
Go to the top of the page
+Quote Post
erix
post 4.08.2009, 11:49:48
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ale każda przeglądarka koduje znaki w GET inaczej i nie da się tak uniwersalnie. Najprościej ten problem rozwiązać przez POST.

Cytat
na przykład jeśli policzę ile kolumn mi wyszukało (mysql_num_rows()) zawsze jest 0, czyli jakby nie było pasujących kryteriów (a takowe istnieją)

A to samo zapytanie wykonane ręcznie zwraca wyniki?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
mpawel007
post 4.08.2009, 22:29:18
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.02.2009

Ostrzeżenie: (0%)
-----


Właśnie wklepałem w phpMyAdmina to zapytanie ręcznie i się elegancko wyszukało (tak jak powinno w założeniu)
Zmieniłem też na POST i dalej nie działa :/

EDIT>>
OK! wszystko działa przepraszam za zamieszanie poprostu po drodze zapomniałem dopisać znaku dolarka '$' przy jednej ze zmiennych przez co nie mógł być spełniony warunek ;p

Mam jednak kolejny dylemat wrzuciłem pliki na zewnetrzny serwer ftp. i wyskoczyło ostrzeżenie
Kod
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/.../.../.../public_html/.../conf/settings.php:2) in /home/.../.../.../public_html/.../conf/loginout.php on line 75
... - oznaczają katalogi nieistotne w tym przypadku

plik settings.php przechowuje dane bazy danych i łączy się z nią (w drugiej linijce mam tekst <?php)
plik loginout ładuje sesję, zapisuje ciasteczka i takie tam inne bzdety zresztą jak widać na listingu
Ponieważ sesji nie ogarniam za bardzo prosiłbym o małą pomoc

EDIT 2>>
Ok teraz się pośpieszyłem ;p (znow gafa)
Może komuś się przyda rozwiązanie:
poprostu w includowaniu pliku były spacje przed znacznikiem '<?php' i po '?>' przez co przegladarka zaczela wyswietlac tekst

MOŻNA ZAMKNĄĆ TEMAT

Ten post edytował mpawel007 4.08.2009, 23:00:57
Go to the top of the page
+Quote Post
Kofel
post 5.08.2009, 08:57:56
Post #6





Grupa: Zarejestrowani
Postów: 99
Pomógł: 22
Dołączył: 14.12.2007
Skąd: Wyszków

Ostrzeżenie: (0%)
-----


Co do krzaczków z bazy:
SET NAMES 'utf8';

Przy łączeniu z MySQL smile.gif
Go to the top of the page
+Quote Post
janusz85
post 5.08.2009, 09:23:51
Post #7





Grupa: Zarejestrowani
Postów: 26
Pomógł: 5
Dołączył: 29.07.2009

Ostrzeżenie: (0%)
-----


Cytat(mpawel007 @ 3.08.2009, 22:09:09 ) *
$fraza = "%".$_GET['klucz']."%";
$branza = "$_GET['branza'];


Ja się tylko przyczepię, że jeżeli po prostu wrzucasz zawartość GET do zapytania SQL, to taki skrypt jest BARDZO podatny na ataki SQL Injection.
Go to the top of the page
+Quote Post
mpawel007
post 5.08.2009, 15:33:38
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.02.2009

Ostrzeżenie: (0%)
-----


Cytat(janusz85 @ 5.08.2009, 10:23:51 ) *
Ja się tylko przyczepię, że jeżeli po prostu wrzucasz zawartość GET do zapytania SQL, to taki skrypt jest BARDZO podatny na ataki SQL Injection.


Dzięki za uwagę poprawię to ;] 

sprawdziłem i rzeczywiście skrypt jest podatny
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.05.2025 - 05:33