Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]przekazanie wyniku zapytania do innej strony
Forum PHP.pl > Forum > Przedszkole
misty
hej!
mam pytanie-jak przekazac wynik zapytan do drugiej strony?
tzn. mam plik1.php ktory pobiera mi jakies dane z bazy, np
  1. SELECT imie FROM test;
zwroci mi dane: ania, stefan, jozia.
jesli za pomoca metody POST przekaze wynik zapytania do plik2.php to przesle mi sie tylko ostatni wynik=jozia. jak zrobic by wyswietlic w drugim pliku wszystkie dane zwrocone przez zapytanie(czyli: ania, stefan, jozia)?

pzdr!
vokiel
To zależy czy chcesz, żeby na następną stronę przekazywane były wyniki automatycznie, czy np po kliknięciu w link?
Możesz utworzyć formularz a w nim w polach hidden wartości wynikowe, i go przesłać do następnej strony (wtedy będziesz miał przez $_POST), albo przez $_GET, tworząc adres typu:

$nastepna_strona="?zmienna=ania|stefan|jozia";

czyli poprzez dopisywanie w pętli do zmiennej $nastepna_strona kolejnych wyników z bazy
tyle, że później musisz tą zmienną podzielić na pojedyncze dane...

ale może po prostu będzie prościej includować ten plik "plik1.php" w pliku "plik2.php"
i wyniki działania pierwszego będą automatycznie dostępne w tym drugim...
to zależy co chcesz dokładnie osiągnąć...
uli
Albo tablica, albo sesje.

Wybrałbym to drugie.

Opis algorytmu:

Pobierasz imie -> dla każdego robisz $_SESSION['imie[$i]'] -> następna strona: session_start(); -> odczytujesz dopóki isset($_SESSION['imie[$i]'])

Oczywiście zwiększając $i.

Stosowałem takie rozwiązanie parę razy i uznałem je za optymalne z mojego punktu widzenia (co nie znaczy, że najlepsze - po prostu nie znam lepszego rozwiązania:) )
misty
wiec
po kolei:
1. jesli chodzi o inculdowanie jednego pliku w drugim-to odpada poniewaz plik1.php zawiera w sobie mase rzeczy ktore nie moga sie pojawic w plik2.php. musze przekazac tylko wynik zapytan. jakiekolwiek ramki/divy etc tez odpadaja..

2.$POST... podesle Ci kawalek mojego kodu:

plik1.php
  1. <?php
  2. $polaczenie=..;
  3. $zapytanie="select imie from test;";
  4. $wynik=pg_query($polaczenie, $zapytanie) or die ("error");
  5. while ($row=pg_fetch_row($wynik))
  6. {
  7. foreach ($row as $data)
  8. echo"$data"
  9. }
  10. //tu probuje przekazac wynik zapytania..
  11. echo "<form action=strona2.php method=POST target='_blank'>
  12.  <input type=hidden name=pyt value='$data'>
  13. <br><input type=submit name=search value=pokaz>";
  14. echo "</form>";
  15. ?>


w plik2.php:
  1. <?php
  2. $polaczenie=..
  3. $pyt=$_POST['pyt'];
  4. echo $pyt;
  5. ?>


no i wynikiem dzialania pierwszego skryptu bedzie(przykladowo): ania, stefan, jozia
zas drugiego : jozia...

3. jesli zas chodzi o sesje, chcialabym tego jednak uniknac. baza jest dosc spora, zapytan moze byc cala masa.. nie chce tworzyc dla kazdej mozliwej kolumny $_SESSION['xx[$i]']..
szukam sposobu/funkcji ktora w prosty i przede wszystkim uniwersalny sposob pozwoli mi na przekazywanie wynikow miedzy stronami..

zastanawialam sie nad zrobieniem jakiejs funkcji ktora by wrzucala wynik zapytania do tablicy i pozniej te tablice przekazywac, ale nie za bardzo wiem jak to ugryzc..
vokiel
$_POST... może tak:

plik1.php
  1. <?php
  2. $polaczenie=..;
  3. $zapytanie="select imie from test;";
  4. $wynik=pg_query($polaczenie, $zapytanie) or die ("error");
  5.  
  6. // początek formularza
  7. echo "<form action=strona2.php method=POST target='_blank'>"
  8. $licznik=0;
  9. while ($row=pg_fetch_row($wynik))
  10.  {
  11.  foreach ($row as $data)
  12.  {
  13.  // tutaj wstawiasz dodawanie pól formularza dzięki temu zapamięta każy, a nie tylk
    o ostatni tak jak poprzednio
  14.  echo "<input type=hidden name=pyt['$licznik'] value='$data'><br />";
  15.  //temu tam jest licznik, żeby utworzyć w $_POST tablicę "pyt" i dodawać do niej kolejne elementy
  16.  
  17.  echo "$data"; // do sprawdzenia może się przydać ;) potem, już może nie biggrin.gif
  18.  $licznik++;
  19.  }
  20.  }
  21. // zakończenie formularza
  22. echo "<input type=submit name=search value=pokaz></form>";
  23. ?>


w plik2.php:
  1. <?php
  2. $polaczenie=..
  3. $wyniki = $_POST['pyt'];
  4. for ($i=0; $i=count($wyniki); $i++)
  5.  {
  6.  echo $wyniki[$i]."<br />";
  7. }
  8. ?>


może w ten sposób, ale to trzeba przecież kliknąć w przycisk wyślij, jak to zrobić tak automatycznie to na razie nie mam pomysłu, trzebaby popróbować z javascript...
może jeszcze pomyśle smile.gif

Mam idea!

A jakby zdefiniować tablicę "PYT[]" jako zmienną globalną?
  1. <?php
  2. global $PYT; 
  3. //nie wiem czy nie trzeba przypadkiem zdefiniować od razu, że to tablica... czyli 
    np tak?
  4. global $PYT = new array(); //tutaj mogę się mylić
  5. ?>


Zapisywać do niej, tak:

  1. <?php
  2. $licznik=0;
  3. while ($row=pg_fetch_row($wynik))
  4.  {
  5.  foreach ($row as $data)
  6.  {
  7.  $PYT[$licznik]=$data;
  8.  $licznik++;
  9.  }
  10.  }
  11. ?>


A odczytywać w ten sposób:
  1. <?php
  2. $polaczenie=..
  3. for ($i=0; $i=count($PYT); $i++)
  4.  {
  5.  echo $PYT[$i]."<br />";
  6. }
  7. ?>


może tak?
Neojawor
Cytat
foreach ($row as $data)
echo"$data"

Dziwisz się, że w zmiennej $data masz tylko wartość ostatnią - przeczytaj sobie o foreach w manualu. $data jest zmienną, a nie tablicą, więc nie może zawierać wielu wartości!!!
chcesz mieć wynik selecta w tabeli, to zrób to tak:
  1. <?php
  2. $row=pg_fetch_row($wynik);
  3. ?>

zmienna $row jest tablicą zawierającą wszystkie wyniki zapytania, czyli:
$row[0]=ania
$row[1]=stefan
$row[2]=jozia

chcesz to przesłać, to zrob tak:
  1. <?php
  2. $polaczenie=..;
  3. $zapytanie="select imie from test;";
  4. $wynik=pg_query($polaczenie, $zapytanie) or die ("error");
  5.  
  6. echo "<form action=strona2.php method=POST target='_blank'>";
  7. while ($row=pg_fetch_row($wynik))
  8. {
  9. foreach ($row as $data)
  10. echo "<input type=hidden name=pyt value='$data'>";
  11. }
  12. echo <br><input type=submit name=search value=pokaz>";
  13. echo "</form>";
  14. ?>

dzięki temu masz wszystkie wartości z tabeli w hidden-ie
misty
sposob z licznikiem nie dziala za nic.. a co do 'count' to to chyba zwraca ilosc wynikow (czyli np.3), a nie wartosci wynikow..
co do pomyslu Neojawora zrobilam juz nawet dokladnie jak napisales, nic nie kombinujac, na drugiej stronie odwoluje sie w ten sposob:
  1. <?php
  2. $pyt=$_POST['pyt'];
  3. echo "$pyt";
  4. ?>

jednak nadal wyswietla sie tylko ostatnia wartosc.. :/
Cienki1980
Cytat(misty @ 17.03.2007, 12:40:42 ) *
sposob z licznikiem nie dziala za nic.. a co do 'count' to to chyba zwraca ilosc wynikow (czyli np.3), a nie wartosci wynikow..
co do pomyslu Neojawora zrobilam juz nawet dokladnie jak napisales, nic nie kombinujac, na drugiej stronie odwoluje sie w ten sposob:
  1. <?php
  2. $pyt=$_POST['pyt'];
  3. echo "$pyt";
  4. ?>

jednak nadal wyswietla sie tylko ostatnia wartosc.. :/


No i nic dziwnego bo w tym co napisał Neojawor w POST zostanie przekazana tylko ostatnia wartość. Należałoby to zmienić tak:
  1. <?php
  2. $polaczenie=..;
  3. $zapytanie="select imie from test;";
  4. $wynik=pg_query($polaczenie, $zapytanie) or die ("error");
  5.  
  6. echo "<form action=strona2.php method=POST target='_blank'>";
  7. while ($row=pg_fetch_row($wynik))
  8. {
  9. foreach ($row as $data)
  10. echo "<input type=hidden name=pyt[] value='$data'>";
  11. }
  12. echo "<br><input type=submit name=search value=pokaz>";
  13. echo "</form>";
  14. ?>


W takim przypadku $_POST['pyt'] byłaby tablicą z wszystkimi wynikami.
misty
tym razem na drugiej stronie pokaze sie 'Array'..

heh, juz dziala:)
zrobilam jak pisal Cienki1980, tzn
  1. <?php
  2. name=pyt[]
  3. ?>


a na drugiej stronie po prostu dopisalam 2 linijki:
  1. <?php
  2. $pyt=$_POST['pyt'];
  3. foreach ($pyt as $data)
  4. echo "$data";
  5. ?>


i wsjo:) pokazuje sie wszystko! dzieki wielkie!!:)
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.