Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pobranie danych z bazy i zapisanie ich w sesji
Forum PHP.pl > Forum > PHP
damianooo
Witam,

Mam tak działającą aplikację:

strona1.php

  1. $zapytanie = "SELECT id,nazwa FROM Paczki";
  2. $wynik = mssql_query($zapytanie);
  3.  
  4. while ($wiersz_ = mssql_fetch_array($wynik))
  5. {
  6. $id = $wiersz['id'];
  7. $nazwa = $wiersz['nazwa'];
  8.  
  9. echo "<a href='strona2.php?a=$id'>id paczki: ".$id." nazwa paczki: ".$nazwa."</a>";
  10. echo "<br />";
  11. }



strona2.php

  1. $idpaczki = $_GET['a'];
  2.  
  3. $zapytanie = "SELECT id,nazwa FROM towar WHERE id_paczki = $idpaczki ";
  4. $wynik = mssql_query($zapytanie);
  5.  
  6. while ($wiersz_ = mssql_fetch_array($wynik))
  7. {
  8. $id = $wiersz['id'];
  9. $nazwa = $wiersz['nazwa'];
  10.  
  11. .... itd.
  12. }



a więc jak widać w pliku strona1.php pobierane są wszystkie rekordy z bazy danych i w linkach przypisywane są do adresu metodą GET numery id poszczególnych paczek. Następnie w pliku strona2.php pobierana jest informacja z GETa żeby wiedzieć jaki towar z jakiej paczki wyświetlić.

Moje pytanie jest takie:

Czy można to zrobić lepiej ? To znaczy w taki sposób aby nie umieszczać tych numerów ID , które jakby nie patrzeć w niektórych przypadkach są bardzo ważne i na przykład podczas robienia zakupów w koszyku żeby nie było możliwości manipulacji tymi numerami i przez to podmiany przez kogoś w pasku adresu danej ID na inny.

Na przykład czy zamiast zapisywać w GET możnaby zapisywać w sesji ... jeśli w sesji to jak to zrobić ... jeśli inaczej to się robi to proszę o wskazówki ...

dzięki



szmerak
Po pierwsze to zabezpieczaj zmienne tego typu $_GET['a']; przed sql injection... bo ktoś ci się włamie na strone

a po drugie nie rozumiem o co ci chodzi questionmark.gif ?jak można manipulowąć numerami w koszyku?... Wytłumacz dokładniej...
damianooo
manipulować mam na myśli że jeśli w adresie (w przeglądarce, w pasu adresu) będzie:

strona2.php?a=23 to ktoś może wpisać (w przeglądarce, w pasu adresu) np.:

strona2.php?a=24 i wówczas na stronie pojawią się towary z paczki 24 zamiast 23 (każdy user ma mieć inne paczki widoczne)
askone
Jeśli dane sensytywne zamierzałeś - bo z kontekstu wnioskuję iż szukasz lepszego rozwiązania - przesyłać poprzez GET to gratuluję. Już lepszym rozwiązaniem byłoby przekazać je poprzez POST. Oczywiście nadal można byłoby je zmodyfikować więc kierunek "sesja" jest właściwy. W linku poniżej masz pełną informację odnośnie sesji w PHP, przeczytaj i zastosuj.

link do manuala

Pozdrawiam
Uriziel01
Zapewne w sesji trzymasz jakikolwiek unikalny identyfikator uzytkownika (tzw. ID), po prostu tworzysz w tabeli z paczkami nowa kolumne 'owner_id' i trzymasz w niej identyfikator jej 'właściciela', podczas robienie SELECTa z bazy w celu pobrania danej paczki sprawdzasz czy numer ID z aktualnej sesji uzytkownika jest równy z tym z przypisanym do danej paczki. Lub tez nie trzymasz tego identyfikatora w sesji a jedynie w bazie, tutaj analogicznie, przy każdym SELECT w celu pobrania paczka sprawdzasz właściciela w bazie i sprawdzasz czy aktualnie zalogowany uzytkownik ma takie ID jak ten właściciel.
szmerak
/\ - Uriziel01
To jest najlepsze rozwiązanie twojego problemu! poprostu używasz session_id() smile.gif
damianooo
tak, ale chodzi mi o inne dane niż id_usera ... id_paczki, id_towaru i inne tego typu ...

czy da się to przypisać w następujący sposób:


$zapytanie = "SELECT id,nazwa FROM Paczki";
$wynik = mssql_query($zapytanie);

while ($wiersz_ = mssql_fetch_array($wynik))
{
$_SESSION['id_paczki'] = $wiersz['id'];
$nazwa = $wiersz['nazwa'];

echo "<br />";
}


jest mi to potrzebne do przechodzenia między stronami .. np.: do przejścia ze strony z listą paczek na stronę z listą towarów tej paczki ... muszę mieć gdzieś zapamiętane id wybranej (klikniętej przeze mnie wcześniej paczki)
askone
Identyfikator użytkownika załatwi Twój problem, bo skoro każdy z użytkowników ma widzieć tylko swoje paczki to w bazie jest zapewne kolumna określająca kto jest właścicielem paczki. Wtedy po zalogowaniu się użytkownika odczytany z bazy jego identyfikator zapisujesz w sesji, a w każdym pliku (na każdej stronie) pobierasz go z sesji i na jego podstawie odczytujesz dane z bazy.

edit:
Nie doczytałem końcówki Twego posta. W przypadku który opisujesz numer paczki możesz przekazać poprzez GET. Na stronie docelowej - z detalami paczki - sprawdzasz czy użytkownik o id zapisanym w sesji jest właścicielem paczki o numerze przekazanym poprzez GET.

  1. SELECT
  2. id,
  3. nazwa
  4. FROM Paczki
  5. WHERE id = NumerPaczki AND owner_id = IdUzytkownika


Jeśli zapytanie zwróci pusty rezultat to znaczy, że dany użytkownik nie jest właścicielem paczki i nie może sprawdzić jej szczegółów. Wtedy możesz wyświetlić stosowny komunikat i przekierować go na stronę z listą paczek.

Proste i funkcjonalne...
damianooo
tak spoko ale ... dopisałem przed chwilą taką rzecz :


jest mi to potrzebne do przechodzenia między stronami .. np.: do przejścia ze strony z listą paczek na stronę z listą towarów tej paczki ... muszę mieć gdzieś zapamiętane id wybranej (klikniętej przeze mnie wcześniej paczki)


takiej funkcjonalności potrzebuję

ok ... w sumie tak robiłem ale się nie zastanowiłem że jest ok i całkowicie to wystarczy ... a więc morał taki, że jednak mogę używać bez problemu GETa .. oczywiście w przypadku jak już mam rozpoznanego użytkownika ... i nawet jakby taki user chciał kombinować to nie powinno mu się nic wyświetlić poza tym co powinien widzieć ...




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.