Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Przekazanie zmiennej typu Array.
Forum PHP.pl > Forum > Przedszkole
leniu
Hej,

Przeszukałem forum i niestety nie znalazłem odpowiedzi na dręczące mnie pytanie, które brzmi identycznie jak w temacie.

Pozwolę sobie jednak sprawę rozwinąć i przedstawić po raz wtóry:

Wynikiem pewnego zapytania zrealizowanego na bazie MySQL jest $tablica (naturalnie Array). Jest u mnie koniecznie konieczne, aby w jakiś sposób przekazać ową zmienną do drugiego okna przeglądarki, czyli:

na stronie A mam hiperłącze o nazwie KLIKU-KLIKU -> klikam -> otwiera się strona B jako pop-up i co więcej kod już ma zainicjiwaną zmienną typu Array o nazwie $tablica

Na pierwszy rzut oka GET raczej odpada, COOKIE z serialize ma problemy z długimi zserializowanymi tablicami (a moje mogą być bardzo bardzo długie).

Czy istnieje jakiś pewny sposób na rozwiązanie tego problemu? Jest może zaimplementowany standardowy mechanizm przekazywania między dokumentami PHP zmiennych typu Array? Proszę o odpowiedź.

Pozdrawiam.
Mlodycompany
albo sesje albo w pop-upie zrobic to samo zapytanie
Piotrwusek
jak te tablice maja być bardzo długi to po prostu w tym drugim pliku też zrób zapytanie do MYSQL tylko może przekazuj zwykła zmienną id rekordu czy co tam chcesz
leniu
Dokładnie Panowie!

Wróciłem właśnie z papieroska z tarasu i wpadłem na to samo - przecież mogę GET'em przekazać zapytanie, a wykonać je w oknie POP-UP!!! biggrin.gif A idę spać, bo dzisiaj juz nie myślę...

A co do SESSION, nie pomyślałem o tym, ale pomyśle jutro. Zastanowię się, co mi bardziej się przyda i zobaczymy.

Dobrej nocy wszystkim i dzięki za pomoc!
km66
Te funkcje napisalem juz pare lat temu (rekurencyjnie wola sama siebie w taki sposob, ze poradzi sobie z dowolnie zagniezdzona tablica), od tego czasu pewnie zmienil sie php i takie rzeczy mozna pewnie osiagac prosciej, ale moze komus sie przyda.
Nie bardzo juz pamietam jak ja wywolywalem, ale zdaje sie, ze pod jakims przyciskiem, ktory najpierw ja wolal a potem przenosil na docelowa strone. Albo cos smile.gif
A funkcja wyglada tak (pierwsza zmienna, to oczywiscie array do przekazania a druga to nazwa, pod jaka cala jego struktura oddtwarza sie na docelowej stronie):

f
  1. unction export($tablica, $nazwa_wynikowa)
  2. {
  3. global $dalej;
  4.  
  5. while ($v = each($tablica))
  6. {
  7. $klucz=$v['key'];
  8. $wartosc=$v['value'];
  9. if (is_array($v['value']))
  10. {
  11. $cofnij=$dalej;
  12. $dalej.="[$klucz]";
  13. export($v['value'],$nazwa_wynikowa);
  14. $dalej=$cofnij;
  15. }
  16. else {
  17. $name="$nazwa_wynikowa".$dalej."[$klucz]";
  18. echo "<INPUT TYPE=\"hidden\" NAME= \"$name\" VALUE=\"$wartosc\">";
  19. }
  20. }
  21. }

Dajcie znac czy sie przydaje.
mrooczilla
jak zapytanie będzie w zmiennej przechodzącej przez ręce usera to wydaje mi się że nie będzie to bezpieczne,
ja bym zrobił tak, (nie wiem skąd pochodzi owa tablica, ale załóżmy że po prostu ją zkeszujemy)

1. pobieram tablicę do przekazania i serializuję ją
2. robię $hash=md5(rand(0,1000)); i zapisuję do tabelki (lub do pliku) jako id uzywająć $hash
3. wywołuję stronę docelową i przekazuję jej $hash (w $_GET lub $_SESSION)
4. strona docelowa odczytuje z tabelki (lub z pliku) rekord gdzie id=$hash
5. i to tyle, w zasadzie można by po prostu użyć sesji, ale one 1.wygasaj kiedyś, a 2. mają ograniczoną wielkość
Fifi209
Najlepiej moim zdaniem używać sesji, do tego zostały stworzone.

@up
Cytat
1.wygasaj kiedyś, a 2. mają ograniczoną wielkość

Masło maślane.
mrooczilla
w sumie racja, ale co jeżeli tablica po serialize bedzie miala 10M? do sesji?
Fifi209
Cytat(mrooczilla @ 25.10.2009, 14:53:04 ) *
w sumie racja, ale co jeżeli tablica po serialize bedzie miala 10M? do sesji?


Żeby otrzymać 10MB to na prawdę trzeba się postarać i wyciągnąć chyba całą bazę. Jeżeli w wyniku masz 10MB danych oznacza to, że jest coś nie tak - pomyśl jak długo użyszkodnik odbierałby to. To co wysyłasz do użyszkodnika musi być jak najmniejsze.
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.