Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][html] przekazywanie wynikow z bazy przez php do html
Forum PHP.pl > Forum > Przedszkole
misty
witam
problem mam pewnie dosc banalny, przejrzalam forum w poszukiwaniu podobnych watkow ale nadal nie do konca wiem jak to ugryzc.
problem wyglada tak: mam prosta stronke na ktorej uzytkownik moze sobie przegladac rozne rzeczy z bazy danych. z baza lacze sie i wyswietlam dane przy pomocy php. dane ukazuja sie w tablicach i uzytkownik powinien miec mozliwosc ich wydruku. po kliknieciu na 'drukuj' otwiera sie nowe okno w ktorym powinny ukazac sie tabele z danymi, bez tych wszystkich reklam itd, czyli gotowe do druku. pytanie moje jak zrobic by w tym formularzu (xhtml) pokazywaly sie dane ktore wczesniej pobieralam przy pomocy php? tzn bez zbednego wklejania select z php do tego mojego formularza gotowego do wydruku?
czyli jak przekazac dane pobrane z bazy przez plik test.php do test.html?

pzdr!
misiek172
a nie prościej użyc do tego CSSa? i sobie wygenerować plik do druku tylko żeby był niewidoczny?

@screen {
.elementy{display: none}
}

@print {
.elementy{display: block}
}

rzecyz print są widziane tylko przez drukarke
misty
ale wlasnie plik ma byc widoczny. uzytkownik ma sobie zobaczyc jeszcze przed wydrukiem co drukuje..
krzysiekk
czesc
pobirajac 'cos' z bazy danych dolacz to do $_SESSION['cos'] i przy kazdym wywolaniu drukuj na nowej stronie odwolaj sie do tablicy sesji pobierz czyste dane wrzuc je w formularz i drukuj
misty
poczytalam co nieco na ten temat, probowalam wykorzystac zarowno session_register() jak i $_SESSION[] tylko nadal jest nie tak. tzn, na przykladzie:

pierwszy plik:
  1. <?php
  2.  
  3. $_SESSION['data']=aa;
  4.  
  5. ?>


2gi plik, w ktorym jest odwolanie do 1szego:
  1. <?php
  2. include ("plik1.php");
  3.  
  4. echo 'bb'.$_SESSION['data'].'bb';
  5. ?>


wynikiem dzialania 2giego pliku bedzie wyswietlenie na ekranie: bbaabb, czyli dziala poprawnie.

zalozmy teraz, ze w moim $_SESSION['data'] bede przechowywac dane pobrane z bazy, tzn:

pierwszy plik:
  1. <?php
  2.  
  3. //tu odpowiedni kod php laczacy sie z baza i pobierajacy dane ktore podstawi do zm
    iennej $aa
  4.  
  5. $_SESSION['data']=$aa; //gdzie aa jest dana pobrana z bazy danych
  6.  
  7. ?>



w 2gim pliku nic nie zmieniam:
2gi plik, w ktorym jest odwolanie do 1szego:
  1. <?php
  2. include ("plik1.php");
  3.  
  4. echo 'bb'.$_SESSION['data'].'bb';
  5. ?>


to w tym przypadku wynikiem dzialania drugiego pliku bedzie wyswietlenie na ekranie: bbbb.. czemu? jak to zrobic zeby przekazac dane z bazy do tego drugiego pliku?

i druga sprawa, jak sie pozbyc tego ze w plik2.php pojawia sie
Kod
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/htdocs/druk.php:5) in /var/www/htdocs/druk.php on line 30


przejrzalam watki na ten temat na forum ale nie bardzo znalazlam rozwiazanie..
chlebik
Cytat(misty @ 21.02.2007, 22:51:55 ) *
zalozmy teraz, ze w moim $_SESSION['data'] bede przechowywac dane pobrane z bazy, tzn:

pierwszy plik:
  1. <?php
  2.  
  3. //tu odpowiedni kod php laczacy sie z baza i pobierajacy dane ktore podstawi do zm
    iennej $aa
  4.  
  5. $_SESSION['data']=$aa; //gdzie aa jest dana pobrana z bazy danych
  6.  
  7. ?>



2 porady:

- zobacz w 1pliku czy do zmiennej w ogole jest cos przypisywane
- najlepiej w linijce z przypisywaniem do $_SESSION przypisz zapytanie bezposrednio do bazy, czyli $_SESSION['data'] = mysql_query(zmienna, link).
misty
pierwsze co zrobilam to sprawdzilam czy w plik1.php jest cos przypisywane do zmiennej i tak, wsjo jest jak nalezy.

co do drugiej czesci Twojego posta, zrobilam jak poradziles, czyli w plik1.php wyglada to mniej wiecej tak:
  1. <?php
  2. $polaczenie=pg_connect... 
  3.  $zapytanie="select cos from cos;"; 
  4.  
  5.  $_SESSION['data']=pg_query($polaczenie, $zapytanie); 
  6.  while ($row=pg_fetch_row($_SESSION['data'])) 
  7.  { 
  8.  foreach ($row as $data) 
  9.  echo "$data" 
  10.  }
  11. ?>


no i plik1.php wyswietla jak powinien, czyli wynikiem bedzie to co siedzi w $data-czyli 'cos' pobrane z 'cos' tak jak w zapytaniu.
a gdy w plik2.php odwolam sie do plik1.php i probuje wyswietlic $_SESSION['data'] (lub tez probowalam $data) to otrzymuje takie cos:

Warning: pg_query() [function.pg-query]: Query failed: in /var/www/htdocs/plik1.php on line 52

Warning: pg_fetch_row() expects parameter 1 to be resource, boolean given in /var/www/htdocs/plik1.php on line 55 " title="Zobacz w manualu PHP" target="_manual


i nie wiem czemu..:/

mam jeszcze takie jedno male pytanie, mianowicie czemu include przekazuje mi cala strone?
tzn. mamy plik1.php i plik2.php. i jak w plik2.php dam inculde("plik1.php") to on mi przepisuje cala strone plik1.php..wszystkie dane, tla etc.. a ja bym chciala np tylko z niektorych zmiennych z plik1.php korzystac..
chlebik
Cytat(misty @ 22.02.2007, 21:07:32 ) *
mam jeszcze takie jedno male pytanie, mianowicie czemu include przekazuje mi cala strone?
tzn. mamy plik1.php i plik2.php. i jak w plik2.php dam inculde("plik1.php") to on mi przepisuje cala strone plik1.php..wszystkie dane, tla etc.. a ja bym chciala np tylko z niektorych zmiennych z plik1.php korzystac..



Zaczne moze od tego - require oraz include sluza wlasnie do przekazywania calego pliku. Koniec, kropka. Natomiast do przerzucania miedzy stronami wartosci zmiennych sluzy metoda GET (w przypadku mieszania HTMLa z PHP), albo obsluga sesji (tak jak u Ciebie).


Cytat
pierwsze co zrobilam to sprawdzilam czy w plik1.php jest cos przypisywane do zmiennej i tak, wsjo jest jak nalezy.



No i dobrze.



Cytat
a gdy w plik2.php odwolam sie do plik1.php i probuje wyswietlic $_SESSION['data'] (lub tez probowalam $data)


w $_SESSION['data'] to 'data' to identyfikator, a nie zmienna.




Przeczytaj to, co Ci napisalem wczesniej i juz powinnas zrozumiec. Do przekazywania danych miedzy plikami stosuje sie metode POST/GET (najczesciej jesli skrypt z jakiegos powodu odrzucil cookie) lub obsluge sesji. Ty wybralas sesje i uzywanie superglobalnej tablicy $_SESSION. W zwiazku z czym nie musisz dolaczac pliku do drugiego pliku - wszak przekazywana informacja znajduje sie juz w superglobalnej tablicy. Usun po prostu "include" z 2go pliku i powinno byc gites. Pamietaj rowniez, ze do supertablicy $_SESSION musi byc przypisana zmienna, a nie wskaznik do niej czy cokolwiek innego.

Jesli nie to bedziem myslec dalej, bo wtedy oznacza to, ze cos szwankuje z przekazywaniem do $_SESSION (z bazy danych of corze). Miej rowniez pewnosc, ze masz wlaczone cookies.
misty
no miales racje, poszlo:)
takie jeszcze pytanie mam:
bo w plik1.php do $_SESSION['data'] przesylam dane z bazy danych. i one mi sie wyswietlaja w tablece, mam petle wiec wszystko jak nalezy sie podstawia, mniej wiecej tak to wyglada:

  1. <?php
  2. $wynik=pg_query($polaczenie, $zapytanie);
  3. while ($row=pg_fetch_row($wynik))
  4. {
  5. foreach ($row as $data)
  6. $_SESSION['data']=$data;
  7. echo ''.$_SESSION['data'].''; //i tu mi sie pojawi caly ciag wynikow
  8. }
  9. ?>


plik2.php

  1. <?php
  2. $data=$_SESSION['data'];
  3. print ("$data");
  4. ?>


w plik2.php pojawi mi sie tylko ostatnia zmienna z $_SESSION['data']. tzn jesli w plik1.php zapytanie zwroci i przypisze do $_SESSION['data'] ciag zmiennych: a, b, c, d.. to plik1.php pokaze wszystkie, a plik2.php pokaze tylko ostatni, czyli tu 'd'. wiec moje pytanie jest takie czy mozna cale tablice przekazac? czy musze zrobic jakas petle zeby sczytal 1 wartosc, przekazal do plik2.php, potem ja wywalil i sczytal nastepna i przekazal do plik2.php, itd?

a druga sprawa to jak pozbyc sie tego komunikatu:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/htdocs/plik2.php:9) in /var/www/htdocs/plik2.php on line 11" title="Zobacz w manualu PHP" target="_manual

poczytalam na forum co nieco, dodalam ob_start() i ob_end_flush() w obu plikach ale ten warning pojawia sie nadal. tzn pojawia sie tylko w plik2.php..
chlebik
Cytat(misty @ 25.02.2007, 12:20:54 ) *
no miales racje, poszlo:)


Grazie.


Cytat
takie jeszcze pytanie mam:
bo w plik1.php do $_SESSION['data'] przesylam dane z bazy danych. i one mi sie wyswietlaja w tablece, mam petle wiec wszystko jak nalezy sie podstawia, mniej wiecej tak to wyglada:

  1. <?php
  2. $wynik=pg_query($polaczenie, $zapytanie);
  3. while ($row=pg_fetch_row($wynik))
  4. {
  5. foreach ($row as $data)
  6. $_SESSION['data']=$data;
  7. echo ''.$_SESSION['data'].''; //i tu mi sie pojawi caly ciag wynikow
  8. }
  9. ?>


Znowu wrocimy do korzeni i przeanalizujemy ten kod linijka po linijce. Na poczatku do zmiennej $wynik przypisujesz wynik dzialania funkcji pg_query (domyslam sie, ze to od PostgreSQL). Co robi ta funkcja pg_query ? Otoz pobiera ona dane z bazy, ale nie przekazuje ich bezposrednio do PHP. W tym czasie dane znajduja sie w buforze i nie sa dostepne.

Trzeba te dane pobrac i stad nastepna komenda czyli funkcja pg_fetch_row. Co konkretnie robi ta funkcja? Ano pobiera te dane z bufora i przerabia je na TABLICE INDEKSOWANA LICZBAMI. Nie wiem jak wyglada tabela, z ktorej pobierasz dane, ale prawda jest taka, ze kazda kolejna komorka tej tablicy zawiera dana z kolejnego "rzedu" pobranych danych i mozna sie do niej odnosic za pomoca indeksu liczbowego. U mnie (lista filmow, ktore sa pobierane z bazy danych) ten fragment kodu (wyswietlanie danych pobranych z tabeli) wyglada tak:

  1. <?php
  2. while($row = mysql_fetch_row($query2)) 
  3.  
  4.  {
  5.  
  6. print("<TR><TD>Tytul to: $row[0]</TD></TR>");
  7. print("<TR><TD>Liczba plyt to: $row[1]</TD></TR>");
  8. print("<TR><TD>Zestaw plyt to: $row[2]</TD></TR>");
  9. print("<TR><TD>Dlugosc filmu to: $row[3]</TD></TR>");
  10.  
  11. }
  12. ?>



Dlaczego to pisze? Po to, aby pokazac, ze nie ma sensu przkeazywac za kazdym przejsciem petli przypisania danej pobranej z bufora do supertablicy tylko po to, aby ja wypisac na ekranie. Do tego spokojnie mozesz uzyc echo "$data".



Cytat
w plik2.php pojawi mi sie tylko ostatnia zmienna z $_SESSION['data']. tzn jesli w plik1.php zapytanie zwroci i przypisze do $_SESSION['data'] ciag zmiennych: a, b, c, d.. to plik1.php pokaze wszystkie, a plik2.php pokaze tylko ostatni, czyli tu 'd'. wiec moje pytanie jest takie czy mozna cale tablice przekazac? czy musze zrobic jakas petle zeby sczytal 1 wartosc, przekazal do plik2.php, potem ja wywalil i sczytal nastepna i przekazal do plik2.php, itd?



No nie bardzo jest jak zrobic to, co tutaj napisalas. Generalnie najlepiej zrobic to w ten sposob, ze w pliku1 stworzysz sobie tablice (albo zagniezdzona, albo zwykla) do ktorej kolejnych komorek bedziesz wsadzala kolejne wartosci zczytane z bufora (czyli musisz to przypisanie umiescic w petli

while ($row=pg_fetch_row($wynik)) {.......}


A juz po wyjsciu z tej petli nalezy przekazac do $_SESSION['przekazywana_tablica'] cala tablice i na nowej stronie po prostu przejsc przez nia wypisujac na ekranie kolejne komorki. Nie dziw sie, ze nie podaje kodu - jak sama dojdziesz do rozwiazania poslugujac sie wskazowkami to wiecej sie nauczysz. Wiem z autopsji smile.gif



Cytat
a druga sprawa to jak pozbyc sie tego komunikatu:
<span style="font-weight: bold;"><a href="http://pl.php.net/
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/htdocs/plik2.php:9) in /var/www/htdocs/plik2.php on line 11" title="Zobacz w manualu PHP" target="_manual">
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/htdocs/plik2.php:9) in /var/www/htdocs/plik2.php on line 11</a></span>
poczytalam na forum co nieco, dodalam ob_start() i ob_end_flush() w obu plikach ale ten warning pojawia sie nadal. tzn pojawia sie tylko w plik2.php..


Wszystko przecie po angielskiemu napisane smile.gif Po prostu kod z pliku2.php (a dokladniej session_start()) wystepuje po wyslaniu do przegladarki jakiegos znacznika HTML. Miej pewnosc, ze kod php w tym pliku wystepuje przed wszelakim kodem w HTMLu. Jesli nie masz w tym pliku kodu HTML to czesto problemem jest tez kodowanie (przegladarka cos tam przesyla). No i na koniec poczytaj tutaj:

http://pl2.php.net/session_start

The truth is out there.
misty
spox, dam juz rade:) dzieki za porady i cierpliwosc!! mozna tu jakiegos plusika postawic? bo bym Ci dodala:)

pzdr!
chlebik
Instytucji SOG'a tutaj nie ma, ale dzieki za mile slowa. Ja tez sie ucze to i milo komus pomoc.
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.