Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] $_GET i polskie znaki
Forum PHP.pl > Forum > Przedszkole
arek33
Witam!

Mam pytanie a propos zapytania do bazy danych, ewentualnie - jakiej funkcji użyć w PHP? W bazie danych mam tabelę daneskładającą się z id i nazwa. Rekord należące do tej tabeli to:

id = 1;
nazwa = Robert Żukowicz

Mając kod:

  1. <?php
  2. ]$nazwa = Robert Żukowicz; // pierwotna (właściwa) nazwa
  3. $nazwa_link = no_pl($nazwa); // no_pl - funkcja zamieniająca polskie znaki na litery bez ogonków i białe znaki na 'i'.
  4. echo "<a href=\"".$nazwa_link."\">".$nazwa."</a>";
  5. ?>


Rezultatem jest link w postaci: http://localhost/Robert-Zukowicz a $_GET['nazwa'] = Robert-Zukowicz

Zamianę w drugą stronę, czyli '-' na '[space]' jestem w stanie zrobić, wówczas mój $_GET['nazwa'] = Robert Zukowicz
  1. <?php
  2. $in = $_GET['nazwa'];
  3. $q = mysql_query("SELECT * FROM dane where nazwa='$in");
  4. ?>

Wynikiem tego zapytania będą wszystkie rekordy zawierające nazwę "Robert Zukowicz", czyli w moim przypadku nic.

Jak zatem sprawić, aby zmienna $in miała pierwotną wartość?

Pozdrawiam,Arek
konole
Kod
$q = mysql_query("SELECT * FROM dane WHERE nazwa='$in[b]'[/b]");
Zabrakło Ci średnika.

Tak czy siak, na Twoim miejscu skorzystałbym z PDO. W szybki sposób pozbędziesz się możliwości SQL injection, na co Twój kod jest podatny.

PS Aha i rozumiem, że htaccessy masz ustawione na przyjazne linki? Bo Twoim sposobem, to na chwilą obecną wskazujesz do (zapewne) nieistniejącego katalogu.
artur219
koledze chodziło bardziej o to że zmienna GET zwraca mu imię i nazwisko bez polskich znaków czego rezultatem jest brak identycznego rekordu ( w tabeli ma "Robert Żukowicz" a zmienna zwraca "Robert Zukowicz" ), według mnie prostym wyjściem było by utworzenie dodatkowego pola w tabeli z nazwą bez pl znaków i po niej robić zapytanie smile.gif
konole
Ops, my bad.

W takim razie polecam ci tworzyć linki w postaci:
{id}/{name}, np.:
http://localhost/1/Robert-Zukowicz

To jest chyba najlepsze rozwiązanie, user-friendly i pozbywasz się problemów związanych z polskimi znakami diakrytycznymi.
artur219
też dobry pomysł i może identyfikować bezpośrednio po ID
arek33
Cytat(konole @ 25.04.2011, 19:33:12 ) *
Kod
$q = mysql_query("SELECT * FROM dane WHERE nazwa='$in[b]'[/b]");
Zabrakło Ci średnika.

Tak czy siak, na Twoim miejscu skorzystałbym z PDO. W szybki sposób pozbędziesz się możliwości SQL injection, na co Twój kod jest podatny.

PS Aha i rozumiem, że htaccessy masz ustawione na przyjazne linki? Bo Twoim sposobem, to na chwilą obecną wskazujesz do (zapewne) nieistniejącego katalogu.

Poniekąd się zgadza - brak cudzysłowu zamykającego ciąg (w tym wypadku zmienną), a nie średnika smile.gif

htaccess ma już wpisane odpowiednie reguły i wszystko śmiga jak należy, dlatego tego tematu tutaj nie poruszałem, bo uważam, że jest zbędny. Moim linkiem jest adres podany w pierwszym poście.

Cytat(artur219 @ 25.04.2011, 19:44:51 ) *
koledze chodziło bardziej o to że zmienna GET zwraca mu imię i nazwisko bez polskich znaków czego rezultatem jest brak identycznego rekordu ( w tabeli ma "Robert Żukowicz" a zmienna zwraca "Robert Zukowicz" ), według mnie prostym wyjściem było by utworzenie dodatkowego pola w tabeli z nazwą bez pl znaków i po niej robić zapytanie smile.gif

Artur, nie obraź się, ale moim zdaniem to trochę skrajne rozwiązanie... smile.gif

Cytat(konole @ 25.04.2011, 19:56:02 ) *
Ops, my bad.

W takim razie polecam ci tworzyć linki w postaci:
{id}/{name}, np.:
http://localhost/1/Robert-Zukowicz

To jest chyba najlepsze rozwiązanie, user-friendly i pozbywasz się problemów związanych z polskimi znakami diakrytycznymi.

Problem w tym, że nie chcę wprowadzać ID do linku. Chciałbym pobierać $_GET['nazwa'] po nazwie, o ile to możliwe, a wierzę, że w PHP możliwe smile.gif))
artur219
no to według mnie pozostaje moja opcja, lub podmieniać pl znaki na np ż = 1z czy coś podobnego by później mieć jakąś możliwość na przywrócenie tych znaków, możesz jeszcze w bazie podawać nazwę bez pl znaków ale to nie najlepsze wyjście.

a takie pytanko dlaczego nie chciał byś w linku podawać ID ? zawsze można to zrobić w innym układzie np. /{id}-{nazwa}
arek33
Cytat(artur219 @ 25.04.2011, 21:22:41 ) *
a takie pytanko dlaczego nie chciał byś w linku podawać ID ? zawsze można to zrobić w innym układzie np. /{id}-{nazwa}

Takie zrobiłem sobie założenie i chcę się tego trzymać. Zauważyłem np., że w wordpressie tagi działają na tej zasadzie, np. http://www.mojwordpressowyblog.pl/tag/Palac-Prezydencki/ (Pałac Prezydencki). Jakieś inne pomysły?
olechafm
nie zapominaj tylko, jeśli oczywiście założeniem są imiona i nazwiska, że gdy pominiesz polskie znaki diakrytyczne, link do pana http://localhost/1/Robert-Zukowicz będzie właściwy zarówno dla osoby nazywającej się Żukowicz i Zukowicz, nie jesteś w stanie zapobiec takim zbiegom okoliczności, a ID masz unikalne
artur219
Cytat(olechafm @ 27.04.2011, 09:42:33 ) *
nie zapominaj tylko, jeśli oczywiście założeniem są imiona i nazwiska, że gdy pominiesz polskie znaki diakrytyczne, link do pana http://localhost/1/Robert-Zukowicz będzie właściwy zarówno dla osoby nazywającej się Żukowicz i Zukowicz, nie jesteś w stanie zapobiec takim zbiegom okoliczności, a ID masz unikalne


Racja, arek33 niestety muszę Cie zasmucić bo wp ma to zrobione tak że mają dwa pola jedno na nazwę pełną np "Jan Żukowicz" a druga oczyszczona z niedozwolonych znaków "jan-zukowicz" przykład z bazy danych jednej strony

pole nr. 1 - WOŚP Kraków 2011
pole nr. 2 - wosp-krakow-2011
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.