Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] index.php?a=show?id=2 co uzywac?
Forum PHP.pl > Forum > Przedszkole
memphis8332
witam, czego najlepiej uzywac do tworzenia linkow typu index.php?a=show?id=2 i do tego funkcje add, edit itp

switch i case? ma ktos jakies przykladowe i najlepiej polecane rozwiazania? smile.gif
nekomata
Nie
Kod
index.php?a=show?id=2
Tylko
Kod
index.php?a=show&id=2
GET'y "zaczynasz" ? ale jak jest więcej niż 1 GET używasz znaku .Przykładowe rozwiązanie mhmm $_GET poprostu używasz jak zwykłych zmiennych , najlepiej wstawić kilka do linku potem je sobie "wyprintować" używając print_r , reszta to już tylko operacje na zmiennych jak każde inne.
barcisz
Najprościej:

http_build_query
Magic WWW
Najprostszym rozwiązaniem jestem instrukcja switch-case. Poniżej dwa przykłady jak można to zrobić.

Link: index.php?action=add&id=2

Przykład 1
  1. switch($_GET['action'])
  2. {
  3. case 'edit':
  4. //Kod
  5. break;
  6. case 'add':
  7. //Kod
  8. break;
  9. default:
  10. // Kod
  11. }


Przykład 2
  1. if($_GET['action'] == 'edit)
  2. {
  3. // Kod
  4. }
  5. elseif($_GET['action'] == 'add')
  6. {
  7. // Kod
  8. }
  9. else
  10. {
  11. // Kod
  12. }
memphis8332
Cytat(nekomata @ 9.04.2011, 02:36:52 ) *
Nie
Kod
index.php?a=show?id=2
Tylko
Kod
index.php?a=show&id=2
GET'y "zaczynasz" ? ale jak jest więcej niż 1 GET używasz znaku .Przykładowe rozwiązanie mhmm $_GET poprostu używasz jak zwykłych zmiennych , najlepiej wstawić kilka do linku potem je sobie "wyprintować" używając print_r , reszta to już tylko operacje na zmiennych jak każde inne.

w takim razie jak sie potem do tego odwolac w instrukcji switch?
Magic WWW
Podałem Ci wyżej przykład, zrobię to inaczej:
Kod
index.php?nazwa_zmiennej=1

$_GET[nazwa_zmiennej]
memphis8332
no tak, ale mi chodzi o np wyswietlenie konkretnego artykulu. artykuly mam w show.php i chce wyswietlic ten o id 1, wiec procz pobrania show, musze jeszcze pobrac id od show

chce taki link
index.php?a=show&id=2
a nie
index.php?a=show
Magic WWW
No to co za problem?

  1. $_GET['a]
  2. $_GET['id']


Wszystkie podane argumenty zapisują się w zmiennej $_GET jako tablica.
memphis8332
ale jakby to konkretnie mialo wygladac na tych przykladach co mi wczesniej podales? jak tam mam includowanie pliku show.php z parametrami zrobic?

  1. switch($_GET['action'])
  2. {
  3. case 'edit':
  4. //Kod
  5. break;
  6. case 'show':
  7. // i tutaj mam kolejnego switcha robic?
  8. break;
  9. default:
  10. // Kod
  11. }
Magic WWW
  1. switch($_GET['a'])
  2. {
  3. case 'show':
  4. // Tutaj robisz wyświetlanie, skoro masz ID to po co Ci kolejny switch, robisz zapytaie do bazy danych z warunkiem "WHERE `id`='{$_GET['id']}'".
  5. break;
  6. default:
  7. // Kod
  8. }


Pamiętaj jednak o zabezpieczeniach, prze zapytaniem najlepiej dać warunek
  1. if(!is_numeric($_GET['id'])
  2. {
  3. exit('Podany identyfikator ogloszenia jest nieprawidlowy.');
  4. }


Powyższe zabezpieczenie wyeliminuje ataki SQL Injection na przeglądaniu ogłoszeń smile.gif
gorden
rób co chcesz, zależy gdzie to trzymasz i do czego są te id.. w bazie możesz zrobić zapytanie z pobraniem $_GET[id] , a tak to np. include($_GET[id].'.php') czy coś takiego
nekomata
Cytat(gorden @ 9.04.2011, 11:36:17 ) *
rób co chcesz, zależy gdzie to trzymasz i do czego są te id.. w bazie możesz zrobić zapytanie z pobraniem $_GET[id] , a tak to np. include($_GET[id].'.php') czy coś takiego

To nie jest zbyt inteligentne rozwiązanie..
Właściwie to podałeś "przykład" niezbyt mądrego rozwiązania z topicu Temat: Bezpieczenstwo skryptow PHP
modern-web
Możesz korzystać z $_GET ale przede wszystkim filtruj wszystkie dane. Pamiętaj, że w pasku adresu każdy może sobie wpisać co chce a skrypt zinterpretuje to za każdym razem tak samo jeśli nie `nauczysz` go odróżniania wprowadzanych danych. Traktuj każdego odwiedzającego jak nieprzyjaciela; musisz rozpatrzyć wszystkie przypadki (a w każdym razie większość) tak by zapobiec ominięciu Twoich zabezpieczeń.
Z bazą danych używaj mysql_real_escape_string, sprawdzaj długość zmiennej używając np. strlen i ucinaj w razie potrzeby -> substr, no i ograniczaj typ wprowadzanych danych. Jak mają być to tylko cyfry to stosuj is_numeric... a przy includowaniu plików na początku sprawdzaj, czy właściwie istnieje.

Tak na boku wspomnę, że zawsze lepiej zamieniać taki adres:
index.php?a=show&id=2
na np. taki:
/show/2
Efekt otrzymasz korzystając z .htaccess -> mod_rewrite wink.gif

Oczywiście takim linkiem możesz dowolnie manipulować. Możesz zrobić z niego nawet taki:

/project/show/template/latest/friday/.../2/1/71e

Pod tym linkiem możesz ukryć taki jaki chcesz otrzymać (wcześniej wspomniany). Jest to w pewnym sensie zabezpieczenie smile.gif ale nie można na nim w 100% polegać.
nekomata
Co do konkretnego przypadku GET i include połączonych razem ja polecam takie rozwiązanie :
  1. if(isset($_GET['strona'])){
  2. $check = array('główna','news','artykuly'); // ITD ITD...
  3. if(in_array($_GET['strona'],$check)){
  4. include($_GET['strona'].'.php');
  5. }
  6. else{
  7. header('Location: 404');
  8. }
  9. }
u mnie sprawdza się świetnie. biggrin.gif
memphis8332
dzieki panowie.

a co jak mam zrobione ladne urle i wyswietlanie z bazy po skroconym tytule, np localhost.pl/to-jest-pierwszy-news ? nie da sie tego tak zabezpieczyc jak po id.

@nekomata, a co w przypadku jakbym chcial wyswietlic strone localhost/show.php?id=to-jest-pierwszy-news ? gdzie najlepiej upchac id, skoro przy np glowna tego nie bedzie?
LewyM1
Takie rzeczy zapisuj w postaci liczbowej.
memphis8332
ale chcialbym miec zrobione ladne urle, wiec jak to rozwiazac w takim przypadku? nie moge pobierac po czyms innym, tylko musi byc po id?
modern-web
ID masz unikatowe - pewność, że za 5 lat nie pojawi się drugi taki sam a co za tym idzie program nie wywali błędu.
Inaczej jest w przypadku tytułów... może się on kiedyś powtórzyć - bez Twojej wiedzy, bo w końcu kto dobiera nagłówki zgodnie z archiwum sprzed 5 lat..?
Jeśli nie odpowiada Tobie identyfikator w postaci 1 -> xxxxxxx przydzielany automatycznie w bazie danych, możesz nadawać własne id za pomocą funkcji str_shuffle mieszając dany ciąg, następnie sprawdzając czy nie istnieje już w bazie, jeśli tak to losuje inny i znowu sprawdza do skutku... jeśli nie to dodaje do bazy smile.gif

Ogólnie to najlepsze rozwiązanie na pierwszy rzut oka. Wiadomo, że wszystko ma plusy i minusy ale na Twoim miejscu zdecydowanie wybrałbym identyfikatory. Temat newsa nie musi być w adresie, więc po co sobie utrudniać? smile.gif

Pozdrawiam!

Edit:
Zawsze możesz połączyć ładne z użytecznym poprzez tworzenie linków typu:

localhost/23456/temat-newsa-numer-jeden

gdzie localhost to domena, 23456 to identyfikator (który zapewni, że będzie to unikat) oraz temat-newsa-numer-jeden jako temat (nagłówek)... smile.gif
Wpadłem na to przeglądając wiadomości na pewnym portalu zaraz po napisaniu posta hah biggrin.gif
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.