Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sprawdzanie $_GET z linku
Forum PHP.pl > Forum > Przedszkole
Arhimenrius
Więc. Mam takowy problem, że mam zadeklarowany kontroler, że jeżeli jakiś $_GET jest, to coś ma robić.
No ale jak sprawić, by coś robił, gdy nie ma jakiegokolwiek $_GET?, tzn. jest czyste nazwastrony.pl a nie nazwastrony.pl/?zapytanie=wartosc.
kda
Nie wiem czy dobrze rozumiem, chcesz sprawdzić czy ktoś kto wszedł na stronę www.aaa.pl np. edytował jakiś wiersz czy dowolnie inną wartość. W tedy adres strony będzie np. www.aaa.pl?edytuj=tak
Ja bym to zrobił tak. Przy wejściu na stronę zarejestruj w sesji adres strony zmienna $url_strony

  1. $url_strony = $_SERVER['SCRIPT_NAME'].$_SERVER['QUERY_STRING'];
  2. session_register("sesja_odwiedzonyurl");
  3. $sesja_odwiedzonyurl=$url_strony;

Następnie porównaj sobie sesję z bierzącą zmienną $url_strony i będziesz wiedział czy coś ktoś klikał na stronie i czy zmienił się adres.
Arhimenrius
chodzi o to, że jak nie ma żadnego zapytania GET, to ma wyświetlić zawartość jednego pliku, aczkolwiek jeżeli już jest $_GET['page'], to wyświetla inne pliki.
kda
pokaż kawałek kodu co masz zrobione, będzie łatwiej
Arhimenrius
  1. <!-- box na tekst po prawej -->
  2. <div class="menu_rigth_box">
  3. <!-- Wyświetlanie całych kategorii -->
  4. <? if($_GET['cat'] || $_SERVER['REQUEST_METHOD'] !='GET')
  5. {
  6. echo '<h2>'.$category_title.'</h2>';
  7. //artykuł
  8. for($i=0;$i<count($article);$i++)
  9. {
  10. ?>
  11. <div class="menu_right_name">
  12. <div id="name">
  13. <span class="title"><a href="#"><? echo $article[$i]['article_title']; ?></a></span><span class="category"><a href="#"><? echo $article[$i]['article_category']; ?></a></span><span class="date"><? echo $article[$i]['article_date']; ?></span>
  14. </div>
  15. </div>
  16. <div class="menu_right_center">
  17. <div id="page">
  18. <?
  19. if($error != '')
  20. echo '<h3>'.$error.'</h3>';
  21. else
  22. echo $article[$i]['article_article'];
  23. ?>
  24. </div>
  25. </div>
  26. <div class="menu_right_bottom">
  27. </div>
  28. <?
  29. }
  30. }
  31. //Wyświetlanie pojedyńczych stron
  32. elseif($_GET['pag'])
  33. {
  34. ?>
  35. <div class="menu_right_name">
  36. <div id="name">
  37. <span class="title"><a href="#"><? echo $page_title; ?></a></span></span>
  38. </div>
  39. </div>
  40. <div class="menu_right_center">
  41. <div id="page">
  42. <?
  43. if($error != '')
  44. echo '<h3>'.$error.'</h3>';
  45. else
  46. echo $page_text; ?>
  47. </div>
  48. </div>
  49. <div class="menu_right_bottom">
  50. </div>
  51. <?
  52. }
  53.  
  54. ?>
  55. <!-- koniec artykułu -->
  56.  
  57. </div>
  58. <br class="clear">
  59.  
  60. </div>
  61. </div>


i potem controller_page.php
  1. if($_GET['pag'])
  2. {
  3. if(@!include_once 'cache/pag'.$_GET['pag'].'.php')
  4. {
  5. $error = '404 - Nie ma takiej strony';
  6. }
  7. }
  8. elseif($_GET['cat'])
  9. {
  10. if(@!include_once 'cache/cat'.$_GET['cat'].'.php')
  11. {
  12. $error = '404 - Nie ma takiej strony';
  13. }
  14. }
  15. elseif( $_SERVER['REQUEST_METHOD'] !='GET')
  16. {
  17. @include_once 'cache/articles.php';
  18. }

Pliki z zapytania cat i z articles.php mają podobną budowę, więc działają tak samo.
markonix
Sprawdzić czy ten $_GET jest utworzony.
Arhimenrius
próbowałem isset... aczkolwiek wtedy dawało true nawet jak było utworzone, ale nei 'cat' i nie 'pag'
markonix
Isset daje true jeśli utworzone więc to prawidłowe zachowanie.
Arhimenrius
Fu. miało być jak jest nieutworzone. Tj. Poprawienie było jak był tylko nazwastrony.pl, aczkolwiek jak było nazwastrony.pl/?frxrf=frxfxxr to też było true. aczkolwiek jak już było nazwastrony.pl/cat(pag)=wartosc to zwracało false
markonix
Pomyśl troszkę, to podstawowa funkcja, którą używa miliony osób, ale Ty akurat uważasz, że ona nie działa..

Isset sprawdza czy zmienna jest utworzona - nie sprawdza czy jest pusta.
Błąd leży w powyższym (tworzysz zmienną np. na podstawie $_GET).
I nie mówiłem o sprawdzaniu samego $_GET tylko konkretnego elementu tej tablicy czyli np. $_GET['pag'].
Arhimenrius
Dobra. Wyjaśnię o co mi chodzi w krokach.
-Na chwilę obecną mam 2 elementy $_GET,
cat, odpowiadające za wyświetlanie plików z artykułami z całej kategorii
pag, odpowiadające za wyświetlanie "stron" (ogółem całość wzorowana na WP).

- mam plik articles.php, który ma być wczytywany jeżeli żaden, jakikolwiek $_GET nie jest podany

- jest to spowodowane tym, że będzie się wszystko rozwijało, więc mogą nagle dojść kolejne elementy, a chciałbym uniknąć po prostu dodawania coraz większej ilości ich do warunku.
markonix
  1. if (isset($_GET['cat']) && !empty($_GET['cat'])) {
  2. // strona kategorii
  3. } else if (isset($_GET['pag']) && !empty($_GET['pag'])) {
  4. // konkretna podstrona
  5. } else {
  6. // strona domyślna
  7. }


Poza tym nie wygłuszaj błędów tylko sprawdzaj czy plik istnieje i jeśli nie to wyświetlaj błąd 404.
Arhimenrius
if($_GET['cat'] || !$_GET)

Tak ostatecznie miało to wyglądać. A co do 404, specjalnie wyłączyłem obsługę błędów, i tyle sprawdzam, że jeżeli nie może otworzyć pliku, to da 404. Chyba że jakoś inaczej to można zrobić? Bo jak dotąd zawsze robiłem to w ten sposób.
!*!
Jeśli wzorowałeś się na WP, to już oznacza że zrobiłeś to źle. Chcesz stworzyć coś na wzór routera i na postawie GET, uruchamiać kontrolery? Solidna dziura bezpieczeństwa. Tym bardziej że GET jest nazwą pliku której nie zabezpieczasz, więc mogę wczytać każdy plik, jaki mi się tylko podoba. I nie sprawdzasz w ogóle czy te pliki istnieją.

  1. if($_GET['cat'] || !$_GET)


Sprawdzsz czy GET['cat'] istnieje, oraz gdy nie ma GET? Bez sensu.

1. pierw sprawdź czy GET istnieje
2. później sprawdz czy istnieje w ogóle jakakolwiek wartość ['cat'] oraz czy nie jest pusta
3. sprawdź czy plik który chcesz wczytać istnieje, oraz to co chcesz wczytać na pewno jest plikiem. is_exists, is_file, isset, is_emtpy is_string basename
CuteOne
http://forum.php.pl/index.php?showtopic=21...p;#entry1016184 przerób tak aby pasowało do twojego problemu
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.