Skocz do zawartości


Zdjęcie

[PHP] Przesylanie zmiennych z jednego bloku do drugiego


  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1 kurio

kurio

    Pan

  • 282 postów

Napisano 02 09 2008 - 23:43

Wiec zbudowalem sobie stronke na blokach, wyglada to mniej wiecej tak:
Dołączona grafika
Jesli chodzi o layout to juz tam sobie wszystko dopasuje w miare potrzeb. Chodzi mi o sam silnik PHP :))


Na chlopski rozum to mozna wstawic caaaaaaaly index w instrukcje warunkowa (albo nie caly index a caly blok ten w ktorym ma mi wypisac plik dodaj.php) w instrukcje i po prostu porownywac:
$dzial= $_GET['id'];
function porownaj($dzial){
 if ($dzial == dodaj.php) {
 echo ('calutki pliczek dodaj.php');
		}
 elseif ($dzial == pornoski.php) {
 echo('czalutki pliczek pornoski.php');
		}
 else {
 echo('Przykro mi, nie ma takiej strony<br>');
		}
}
porownaj($dzial);

Bedzie dzialac??
Czy moze jest jakis bardziej optymalny sposob?
Mam nadzieje, ze mi pomozecie ^^

  • 0

#2 Kai

Kai

    Stały użytkownik

  • 237 postów

Napisano 03 09 2008 - 01:03

Minus tego typu rozwiązania polega na tym, że przy każdej nowej podstronie musisz dodać nowy warunek ręcznie. Inny, bardziej automatyczny sposób to ładowanie podanego w argumencie pliku. I tu rodzą się dwa sposoby, poprzez ID co wiąże się z korzystaniem np. z bazy, ale jest łatwiejsze w filtrowaniu, albo po nazwie pliku, co wiąże się z bardziej skrupulatną filtracją. Dla przykładu, bez dokładnej filtracji.
$_id = $_GET['id'];
if ( is_int($_id) )
{
   $query = mysql_fetch_array(mysql_query('select plik from tabela where id = ' . $_id . ' limit 1'));
   if ( $query !== false )
   {
	  include '/' . $query['plik'] . '.php'; // albo echo/print w zależności co wrzucasz
   }
}

// linki w postaci index.php?id=liczba - liczba to id pliku w bazie, niestety ten sposób wymaga generowania i zapisywania nazw plików z id do bazy co zresztą trudne nie jest w minimalistycznej wersji
$_name = $_GET['name'];
if ( $_name != '' )
{
   include '/' . $query['name'] . '.php';
}

// linki w postaci index.php?name=nazwa_pliku
Tak jak pierwszy przykład zachowuje kompletne minimum bezpieczeństwa (przez wykorzystanie funkcji is_int będącej aliasem do is_integer i sprawdzającej czy podany parametr jest liczbą całkowitą), tak drugi jest otwarty na atak. Należałoby jakoś filtrować dane. Proponuję poczytać o funkcjach i metodach zabezpieczeń skryptów PHP (szykuję coś takiego na swoim blogu, w szerszym spojrzeniu ale pojawi się to dopiero za jakiś czas, na razie podstawy z podstaw masz tutaj). Podam Ci kompletnie podstawowe przykłady zabezpieczeń.

W pierwszym przypadku parametr który przekazujemy z reguły musi być liczbą. Wystarczy więc zrzutować go na takowy typ, bądź odpowiednio na taki typ przefiltrować.
$_id = ( isset($_GET['id']) ? intval($_GET['id']) : 0 ); // lub (int)$_GET['id'] - sprawdzamy, czy został ustawiony element id, jeśli tak to filtrujemy go (w wypadku innego typu niż int zostanie przydzielone 0), jeśli nie to nadajemy 0
if ( $_id ) // sprawdzamy czy wartość jest inna niż 0
W drugim wypadku należałoby pobawić się przede wszystkim z usunięciem ciągów znaków jak ../ (pozwalających na przejście do katalogu powyżej), czy takich pozwalających na zastosowanie ataku XSS (np. script, alert, document, itp.). Dobrze zastosować do określenia dozwolonej ścieżki do plików wyrażenia regularne (np. via preg_match), a do prostego wykluczania ciągów znaków str_replace. Po za tym niezbędnym elementem w takich filtrowaniach są funkcje htmlspecialchars (lub alternatywnie htmlentities), strip_tags i mysql_real_escape_string (w zależności od kodowania w przypadku łączenia z bazą danych może być niekiedy też addslashes). Użycie powyższych funkcji jest adekwatne do użycia intval.

Ten krótki wykład porusza jeszcze raz powtórzę zupełnie podstawowe aspekty bezpieczeństwa i włączania innych plików w strukturę podstawowego. I oczywiście można to wszystko zrobić na wiele innych sposobów (często lepszych, ale to zależy od potrzeby). Nie bić ;)

PS: nie ten dział chyba :rolleyes:

Użytkownik Kai edytował ten post 03 09 2008 - 01:03

  • 0

#3 kurio

kurio

    Pan

  • 282 postów

Napisano 06 09 2008 - 20:24

Juz sobie poradzilem ze switchem.
Zaraz wlepie kod.
U mnie wyglada to tak:
switch($_GET['id'])
{
case 'dodaj':
include('dodaj.php');
break;
case 'link':
include('link.php');
break;
case 'edycja':
include('edycja.php');
break;
case 'stronywww':
include('www.php');
break;

default:
echo 'Niestety nie ma takiego adresu;(';
break;
}


  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych