Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]$_GET różne zastosowanie?
SkeraPL
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.10.2012

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


Witam to jest mój pierwszy post (IMG:style_emoticons/default/biggrin.gif) Dział chyba dobry, ale tradycyjnie, jak zły to proszę o przeniesienie (IMG:style_emoticons/default/biggrin.gif)

Mam problem. Robię taki w miarę amatorski bo sam jestem amatorem; sklep do mojej serwerowni (IMG:style_emoticons/default/biggrin.gif) Opieram go o html/css/php. Pisze do niego własne skrypty (czasami wykorzystuję to co w necie, ale rzadko bo sam wymyślam) i teraz piszę system NEWS i tu mam problem ale nie z samym systemem news. Problem jest ponieważ chcę napisać archiwum.php, w którym będzie lista wszystkich newsów i do niego dałem taką zmienną dotyczącą kategorii newsa $_GET 'kat' o wartościach 'promocja', 'nowosc', zmiana'; oraz chcę podzielić to archiwum na strony po 10 wpisów więc dałem również $_GET: 's' (strona) o wartości równej stronie. no i mam taki problem, bo podzielenie na kategorie to MOŻLIWOŚĆ nie wymagana więc chcę aby jeżeli dzielenie nie będzie wybierane to strony można było zmieniać normalnie np. archiwum.pgp?s=1, a kiedy będzie z kategorią to żeby rozróżniało i pisało np. archiwum.php?kat=nowosc&s=2. Mam nadzieję, że to moje rozpisanie pozwoli Wam jakoś zrozumieć mój problem i mi pomoże.

Pozdrawiam.
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
b4rt3kk
post
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Sprawa jest prosta, wystarczy sprawdzić czy zmienna $_GET['kat'] istnieje (opcjonalnie czy przechowuje poprawną wartość) i w zależności od tego generować link.

  1. if (isset($_GET['kat'])) $link = 'archiwum.php?kat=' . $_GET['kat'] . '&strona=' . $strona; else $link = 'archiwum.php?strona=' . $strona;


EDIT: o jeden nawias za mało.

Ten post edytował b4rt3kk 2.10.2012, 20:11:46
Go to the top of the page
+Quote Post
SkeraPL
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.10.2012

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


Dobra, przyznam się bez bicia (IMG:style_emoticons/default/smile.gif) Że na takie rozwiązanie z użyciem if nie wpadłem, może dlatego, że ślęczę nad tą stroną (całościowo nie tylko nad news) dosyć długo (IMG:style_emoticons/default/biggrin.gif) Ale wielkie dzięki za to (IMG:style_emoticons/default/smile.gif)

No to fajnie, ale teraz mam nowy problem (IMG:style_emoticons/default/biggrin.gif) Chcę zrobić stronę wielojęzyczną więc myślę sobie zrobię tak: domena.pl/index.php?lang=en&innazmienna=wartosc[...]. No tak niby wszystko ładnie ale mam problem (IMG:style_emoticons/default/biggrin.gif) No bo domyślnym językiem będzie Polski i chcę aby strona wykrywała czy jest już własnie np. ta zmienna ?lang. W sensie jeżeli będzie JAKAKOLWIEK zmienna już w nagłówku (domena.pl/index.php?zmienna=wartosc) aby następna zmienna była dopisana już z znacznikiem "&", a jeżeli nie będzie żadnej zmiennej w nagłówku to żeby zmienna dopisała się z znacznikiem "?". I aby przechodzą na następną stronę jakimś guzikiem w menu jeżeli są zmienne w nagłówku one też przechodziły na następną stronę.

Pomocy.

Ten post edytował SkeraPL 2.10.2012, 20:15:33
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


No to znajdź w adresie & albo ? i w zależności od tego co występuje generuj odpowiedni link. Albo sprawdzaj czy _GET jest jakąś tablicą niepustą.
Go to the top of the page
+Quote Post
SkeraPL
post
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.10.2012

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


Sprawdzanie czy $_GET jest pusta będzie tak wyglądać?
  1. if($_GET != ''){
  2. //Kod
  3. }

A w takim wypadku jak dodać do adresu linijkę i jak pobrać całą tablicę $_GET aby dodać ją do menu?
Go to the top of the page
+Quote Post
!*!
post
Post #6





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat(SkeraPL @ 14.10.2012, 15:22:52 ) *
Sprawdzanie czy $_GET jest pusta będzie tak wyglądać?
  1. if($_GET != ''){
  2. //Kod
  3. }

A w takim wypadku jak dodać do adresu linijkę i jak pobrać całą tablicę $_GET aby dodać ją do menu?

Nie. isset() empty()

Nie bardzo rozumiem po co chcesz operować & i ? w URI.
Go to the top of the page
+Quote Post
SkeraPL
post
Post #7





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.10.2012

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


Potrzebna jest wiadomość czy np. jest w tablicy $_GET zmienna "lang" i jeżeli jest to do menu dopisać aby po kliknięciu w dany link po za domena.pl/podstrona.php bylo jeszcze tez dopisane ?lang=en, chyba, że da się to łatwiej zrobić.

I żeby jeżeli jest np. dana strona podzielona na dodatkowe podstrony w sensie domena.pl/podstrona.php?s=2, i jeżeli będę na tej stronie (domena.pl/podstrona.php) w wersji Angielskiej (?lang=en) po czym kliknę na przejście dalej ($s=2) to żeby nie wymazywało zmiennej lang tylko dodało zmienną s albo jeżeli nie ma zmiennej lang napisało tylko ?s, oczywiście zamiast lang może być każda inna zmienna, więc żeby wykrywało to.

Ten post edytował SkeraPL 14.10.2012, 14:38:06
Go to the top of the page
+Quote Post
!*!
post
Post #8





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Napisz funkcje która będzie to robić.

  1. function link($link)
  2. {
  3. if(isset($_GET['lang']))
  4. {
  5. $new_link .= '?lang='.$_GET['lang'];
  6. }
  7. }
  8.  
  9. <a href=link('link')> // efekt ?lang=pl&link

Oczywiście w dużym uproszczeniu, pokombinuj z tym.

Ten post edytował !*! 14.10.2012, 14:42:19
Go to the top of the page
+Quote Post
SkeraPL
post
Post #9





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.10.2012

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


A może zadziała coś takiego?

  1. <?
  2. if(isset($_GET)){
  3.  
  4. $get = $_GET;
  5. $get .= '&s=' .$strona;
  6.  
  7. } esle {
  8.  
  9. $get = '?s=' .$strona;
  10.  
  11. }
  12. ?>
  13. <a href="domena.php<? echo $get; ?>">2</a>


Ten post edytował SkeraPL 14.10.2012, 14:58:11
Go to the top of the page
+Quote Post
fate
post
Post #10





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

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


witam co by nie tworzyc nowego zapytam tu,

do wyswietlania podstron uzywam takiej knstrukcji:

  1. <?php
  2. // zmienna $show przekazana metoda GET
  3. $show = $_GET['show'];
  4. // sprawdzamy czy zmienna $id nie jest pusta
  5. if(!empty($show))
  6. {
  7. // sprawdzamy czy plik o danej nazwie (php) znaki cyfry - istnieje
  8. if( (file_exists("$show.php")) && (preg_match('|^[[:alnum:]-]+$|', $show)) ) include "$show.php";
  9. // jezeli plik nie istnieje wyswietla się komunikat
  10. else include '404.php';
  11. }
  12. // jezeli zmienna $id jest pusta wyswietla się strona glowna
  13. else include 'news.php';
  14. ?>


Linki wygladaja tak:

CODE
a href="index.php?show=


Dlaczego nie działa linkowanie w przypadku wpisania:

CODE
a href="index.php?show=XXX/YYY


czyli plik zaglebiony w folderze (IMG:style_emoticons/default/co_jest.gif)
Uwazalem iz ten fragment jest winny:
CODE
&& (preg_match('|^[[:alnum:]-]+$|', $show))

ale po usunieciu tej czesci zamiast wczytywac mi 404.php po prostu nie wyswietlalo nic nawet błędu..

Czego ja nie wiem a wiedzieć powinienem (IMG:style_emoticons/default/graduated.gif) z góry dziex!


Go to the top of the page
+Quote Post
!*!
post
Post #11





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


@up
  1. var_dump(preg_match('|^[[:alnum:]-]+$|', $show))
Wyrażenie jest złe, podobnie jak cały skrypt, wpisując link mogę skakać po plikach i katalogach? (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
SkeraPL
post
Post #12





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.10.2012

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


Mój skrypt nawet działa
  1. if(!empty($_GET)){
  2.  
  3. $get = $_GET;
  4. $get .= '&s=' .$strona;
  5.  
  6. } else {
  7.  
  8. $get = '?s=' .$strona;
  9.  
  10. }

ale nie ma opcji przypisania $get = $_GET; więc może mi ktoś podać jak przypisać do zmiennej wszystkie informacje z $_GET?

Problem załatałem w taki sposób:
  1. <?
  2. $strona = 2;
  3.  
  4. if(isset($_GET)){
  5.  
  6. $get = $_SERVER['QUERY_STRING'];
  7. $get .= '&s=' .$strona;
  8. } else {
  9.  
  10. $get = 's=' .$strona;
  11.  
  12. }
  13.  
  14. ?>
  15. <a href="index.php?<? echo $get; ?>">2</a>

Tylko w tym wypadku za każdym razem dopisuje się $s=2, jak można sprawić aby jeżeli wykryje, że już istnieje dana zmienna to ją podmieniło, a nie dodawało ponownie?
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #13





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Nieco inna metoda przepisania zmiennych GET:

  1. $link = '?';
  2. foreach($GET as $key => $value) {
  3. if ($key == 's') $link .= $key = 'jakas_wartosc'; else $link .= $key . '=' . $value; // możesz wstawić dowolny warunek, zarówno dla tej jak i innych zmiennych GET
  4. if ($key < sizeof($_GET) $link .= '&';
  5. }
Go to the top of the page
+Quote Post
fate
post
Post #14





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

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


!*!
Profesjonalista nie jestem... to co ratuje ten skrypt sesji musze sie uczyc zeby temu zapobiec czy jakos da sie naprawic inaczej i czemu nie da sie pliku z folderu zincludowac?
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #15





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(fate @ 14.10.2012, 20:04:23 ) *
!*!
Profesjonalista nie jestem... to co ratuje ten skrypt sesji musze sie uczyc zeby temu zapobiec czy jakos da sie naprawic inaczej i czemu nie da sie pliku z folderu zincludowac?


Każdy wpisując tylko i wyłącznie nazwę pliku w pasku adresu może sobie zaincludować dowolny plik, choćby taki do którego nie powinien mieć dostępu. Dlatego jest to zły pomysł.
Go to the top of the page
+Quote Post
fate
post
Post #16





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

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


to zrozumialem, ale pytalem jak temu zapobiec, edycja obecnego kodu czy od nowa i jak w sensie o czym poczytac (IMG:style_emoticons/default/Lkingsmiley.png)
pzdr
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #17





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Ja osobiście uważam że includowanie podstron to generalnie zły pomysł. Jeśli już musisz tak robić to sprawdź czy wartość GET jest zgodna z oczekiwaniami.

  1. $allowed = array('index.php', 'strona.php', 'inna_strona.php'); // itd. ogólnie tablica stron które mogą występować w GET i do których użytkownik może mieć dostęp
  2.  
  3. if (in_array($_GET['strona'], $allowed)) {
  4.  
  5. if ($_SERVER['HTTP_REFERER'] == 'poprzednia_strona') { // możesz też sprawdzić czy adres został wpisany ręcznie
  6. // zaincludowanie pliku
  7. } else echo 'przekierownie np. na index';
  8.  
  9. } else echo 'przekierownie np. na index';
Go to the top of the page
+Quote Post
fate
post
Post #18





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

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


dzieki za sugestie, przemysle jak to zrobic.. i przeinacze zeby naprawic
a potrafi ktos wytlumaczyc dlaczego moge includowac tylko z biezacego folderu a jak dam sciezke/plik jako zmienna w GET to nie trybi i wyswietla mi 404.php? (IMG:style_emoticons/default/oneeyedsmiley02.png)
Go to the top of the page
+Quote Post
bostaf
post
Post #19





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


Cytat(fate @ 16.10.2012, 22:40:02 ) *
dzieki za sugestie, przemysle jak to zrobic.. i przeinacze zeby naprawic
a potrafi ktos wytlumaczyc dlaczego moge includowac tylko z biezacego folderu a jak dam sciezke/plik jako zmienna w GET to nie trybi i wyswietla mi 404.php? (IMG:style_emoticons/default/oneeyedsmiley02.png)

Bo preg_match w linii 8 zwraca FALSE no i cały warunek kończy się elsem w linii 10: "else include '404.php';'.
Go to the top of the page
+Quote Post
!*!
post
Post #20





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat(b4rt3kk @ 16.10.2012, 19:12:48 ) *
  1. $allowed = array('index.php', 'strona.php', 'inna_strona.php'); // itd. ogólnie tablica stron które mogą występować w GET i do których użytkownik może mieć dostęp
  2.  
  3. if (in_array($_GET['strona'], $allowed)) {
  4.  
  5. if ($_SERVER['HTTP_REFERER'] == 'poprzednia_strona') { // możesz też sprawdzić czy adres został wpisany ręcznie
  6. // zaincludowanie pliku
  7. } else echo 'przekierownie np. na index';
  8.  
  9. } else echo 'przekierownie np. na index';


Ewentualnie tak:

  1. if(isset($_GET['page']))
  2. {
  3. switch ($_GET['page'])
  4. {
  5. case 'index':
  6. include_once 'index.php';
  7. break;
  8. case 'forum':
  9. include_once 'forum/forum.php';
  10. break;
  11. case 'sendmail':
  12. include_once 'mail.php';
  13. break;
  14. default:
  15. include_once 'index.php';
  16. }
  17. }

Tym sposobem oddzielasz wartość GET od pliku.

Ten post edytował !*! 17.10.2012, 08:36:52
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.12.2025 - 06:42