Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/MySQL] LIKE / kodowanie bazy danych
Forum PHP.pl > Forum > Przedszkole
mpawel007
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.
erix
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.
mpawel007
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)
erix
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?
mpawel007
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
Kofel
Co do krzaczków z bazy:
SET NAMES 'utf8';

Przy łączeniu z MySQL smile.gif
janusz85
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.
mpawel007
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.