Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] $_GET - kilka pytań
Forum PHP.pl > Forum > Przedszkole
d.stp
Mam kilka pytań odnośnie tablicy $_GET

1. Czy takie coś jest bezpieczne:
  1. switch($_GET['page']) {
  2. case 'rejestracja':
  3. include('./includes/register.php');
  4. break;
  5. default:
  6. include('./includes/default.php');
  7. break;
  8. }

2. Robię mini cmsa i mam w pliku index.php takie coś jak wyżej i w miejscu gdzie mam content ładuje pliki z $_GET - to dobre rozwiązanie?

3. Mam na stronie podstronę artykuły i każdy artykuł ma swoje id i po wejściu np. w index.php?page=articles&id=2 ładuję artykuł z bazy danych mysql, a zabezpieczam tak:

  1. if ($_GET['page'] == 'articles' and is_numeric($_GET['id'])) // wyswietl artykul

jeszcze sprawdzam w bazie czy artykuł o takim ID istnieje:
  1. if (mysql_num_rows($id) == 0) // nie istnieje

takie coś wystarczy?

Przed sql_injection jestem zabezpieczony, korzystam z pdo. Te kody wyżej to tylko przykłady
wNogachSpisz
Obczaj to:
http://pear.php.net/manual/en/package.netw...er.features.php
d.stp
nie ogarniam tego ;/
markonix
1. Tak. Zwykły switch..
2. Istnieją lepsze.
3. Rzutuj na INT id i po sprawie.
4. $id - dziwna nazwa dla zmiennej przechowującej tablice/obiekt artykułu.
Evinek
1 - jest okej, ale oczywiście można zrobić to lepiej. Ogólnie do miniCMS będzie raczej okej.
2 - Źle. Oddziel logikę od prezentacji. Poczytaj o klasach szablonów. http://forum.php.pl/index.php?showtopic=201664 - tu możesz przejrzeć trochę mojego kodu, może zrozumiesz.
3 - $id = (int)$_GET['id'] - chyba lepiej będzie. Ogólnie idziesz w dobrą stronę z zabezpieczeniami.
4 - Dobre sprawdzanie.

@DOWN:
Teraz widzę jak mało wiem. ;p
redeemer
Cytat(Evinek @ 31.07.2012, 13:02:25 ) *
3 - $id = (int)$_GET['id'] - chyba lepiej będzie.
Lepiej i szybciej. Rzutowanie jest szybsze niż funkcja is_numeric wink.gif
Niktoś
Cytat
Mam na stronie podstronę artykuły i każdy artykuł ma swoje id i po wejściu np. w index.php?page=articles&id=2 ładuję artykuł z bazy danych mysql, a zabezpieczam tak

Cytat
Przed sql_injection jestem zabezpieczony, korzystam z pdo.

To używasz mysql czy pdo?

Warto by było rozważyć bloki try-catch.Skorzystać z opcji bindowania parametrów:
Cytat
sth->bindParam(':value', $opinion, PDO::PARAM_INT);

Jeśli parametr nie będzie typu int kwerenda w bloku try sie nie wykona,spowoduje błąd i nastąpi przejście do bloku catch,gdzie będziesz mógł przekierować na inną stronę lub wyświetlić wiadomość o błędzie.
d.stp
Evinek, korzystam z systemu szablonów Smarty

markonix, dlaczego $id to dziwna nazwa?
Evinek
Powinno być coś takiego:
  1. $result = mysql_query($query) or die(mysql_error());
  2. if(mysql_num_rows($result) > 0){
  3. $row = mysql_fetch_assoc($result);
  4. }


Chodzi o nazewnictwo zmiennych. Musi być wiadomo o co chodzi.
ID to może być do strony, użytkownika itp.
d.stp
a ok, tak jak pisałem to tylko przykład, u siebie mam inne nazwy, a to było pisane na szybko.

Żeby nie zakładać nowego tematu zapytam tutaj - jak pisałem korzystam z systemu szablonów i chciałbym się dowiedzieć czy dobrze robię rozbijając kod html na kilka plików, np. coś takiego:

{include file="header.tpl")
{include file="menu.tpl")
{include file="$content.tpl")
{include file="stats.php")
{include file="footer.tpl")

czy dobrze jak tak robię? czy może lepiej dać wszystko do pliku index.tpl, a tylko content zmieniać?
Evinek
Przeczytaj ten temat: http://forum.php.pl/index.php?showtopic=201664
Miałem ten sam problem. Lepiej zrobić "bloki" które po prostu będziesz podmieniał w głównym szablonie. Czyli można powiedzieć, że sposób drugi.

U mnie ja mam takie coś:
Ładuje(wyświetlam) w danym pliku dany szablon ($template->display('news')wink.gif, w newsie(template) mam tak zwane bloki. Gdy załaduje się news(blocki do zmiennych) to automatycznie dodaje się główny layout i dam wyświetla bloki. Jak przeczytasz mój temat to chyba zrozumiesz.
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.