Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] $_GET i polskie znaki
arek33
post 25.04.2011, 18:27:02
Post #1





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 24.02.2009

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
konole
post 25.04.2011, 18:33:12
Post #2





Grupa: Zarejestrowani
Postów: 275
Pomógł: 32
Dołączył: 21.03.2006
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


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.

Ten post edytował konole 25.04.2011, 18:34:29
Go to the top of the page
+Quote Post
artur219
post 25.04.2011, 18:44:51
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 12.08.2008

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


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
Go to the top of the page
+Quote Post
konole
post 25.04.2011, 18:56:02
Post #4





Grupa: Zarejestrowani
Postów: 275
Pomógł: 32
Dołączył: 21.03.2006
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


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.
Go to the top of the page
+Quote Post
artur219
post 25.04.2011, 19:05:37
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 12.08.2008

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


też dobry pomysł i może identyfikować bezpośrednio po ID
Go to the top of the page
+Quote Post
arek33
post 25.04.2011, 20:09:41
Post #6





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 24.02.2009

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


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))
Go to the top of the page
+Quote Post
artur219
post 25.04.2011, 20:22:41
Post #7





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 12.08.2008

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


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}

Ten post edytował artur219 25.04.2011, 20:23:53
Go to the top of the page
+Quote Post
arek33
post 26.04.2011, 10:14:58
Post #8





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 24.02.2009

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


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?
Go to the top of the page
+Quote Post
olechafm
post 27.04.2011, 08:42:33
Post #9





Grupa: Zarejestrowani
Postów: 125
Pomógł: 2
Dołączył: 8.10.2010
Skąd: Poniemieckie miasto przesiedleńców

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


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
Go to the top of the page
+Quote Post
artur219
post 27.04.2011, 13:52:28
Post #10





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 12.08.2008

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


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
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: 24.07.2025 - 14:23