Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] Tabelki, sesje i wszystkoe zaincudowane do jednego dokumentu.
Forum PHP.pl > Forum > Przedszkole
tescior
Powiedzcie mi czy używanie jednego pliku index.php z includowanymi (w razie potrzeb) modułami w php to złe podejście do sprawy? Czy powinienem używać wielu plików (/ramek?).

Mam stronkę, która ma spełniać bardzo proste funckje:
- Strona oparta jest o prostą tabelę (wiersz i dwie kolumny)
- Po otwarciu pokazuje newsa (includowany - lewa kolumna), formularz rejestracji (includowany - prawa kolumna) i logowania (includowany - prawa kolumna)
- Zalogowanie i zarejestrowanie użytkownika działa tak samo
- - Ukrywa formularz rejestracji i logowania oraz pokazuje formularz zgłoszenia (includowany)

Problem mam z sesją, strona wygląda tak (to w środku to moja tabelka;] ):

sesji nie ma
-------
+ | + jest
-------
nie ma

(Kodu jest sporo, więc ciężko coś wkleić, jak będziecie mieli pomysł co zamieścić to będę wklejał kawałki.)
tehaha
sesję startuje na samej górze głównego pliku index lub header (jeżeli wyodrębniłeś część nagłówkową strony), a nie w plikach inkludowanych

co do pytania czy to dobry pomysł z tym inkludowaniem to zależy od sytuacji: jeżeli masz prostą stronkę to może być, ale przy większym projekcie takie posiekanie strony to już za bardzo zagmatwa wszystko
tescior
Sam start sesji to (session_start()) jest w głównym pliku.
W rejestracji i logowaniu jest wypełniana zmienna $_SESSION['auth'] w zależności od której później pokazuję albo ukrywam poszczególne dołączane formularze (te includowane).

Strona jest i ma być (nie będzie się rozwijała funkcjonalnie) mega prosta.

Tak wygląda główny plik, includowane pliczki zostały podzielone na _form - te które zawierają formularze do logowania/rejestracji/zgłoszenia oraz te które zawierają kod (dlatego są 'podwójnie' np. login_form.php i login - formularz i zaraz po nim skrypt)

  1. <?php
  2.  
  3. // Start sesji
  4. // Główny plik konfiguracyjny
  5. include 'incl/incl.php';
  6.  
  7. "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN'>
  8. <STYLE TYPE='text/css'>
  9. .mini { font-SIZE: 7px; color=#990000; }
  10. </STYLE>
  11. <HTML>
  12. <HEAD>
  13. <META HTTP-EQUIV='Content-Type' CONTENT='text/html; CHARSET=iso-8859-2'>
  14. <META NAME='Description' CONTENT='Stronka do zarządzania wypadami PaintBallowymi.'>
  15. <META NAME='Keywords' CONTENT='PaintBall, Malowanie'>
  16. <META HTTP-EQUIV='Content-Language' CONTENT='pl'>
  17. <META NAME='Author' CONTENT='Robert Miernik'>
  18. <META HTTP-EQUIV='Reply-To' CONTENT='r@un.pl'>
  19. <META NAME='Robots' CONTENT='index, nofollow'>
  20. <TITLE>PaintBall</TITLE>
  21. </HEAD>
  22. <BODY TEXT='#ABCDEF' BGCOLOR='#012345' LINK='#BCDEFF' VLINK='#CDEFFF' ALINK='#DEFFFF' MARGINWIDTH='20' LEFTMARGIN='20' RIGHTMARGIN='20' MARGINHEIGHT='30' TOPMARGIN='30' BOTTOMMARGIN='30'>";
  23. /* Panel logowania */
  24. include 'incl/login_form.php';
  25. include 'incl/login.php';
  26. echo "<BR> int ".(int)$_SESSION['auth']." zwykla ".$_SESSION['auth']."<BR>";
  27. "<P ALIGN='center'><FONT SIZE='+2'>
  28. Strona powstała w celu usprawnienia organizacji naszych malowanek.<BR>
  29. Mam nadzieję, że uda się opanować trochę zamieszania i może częściej się gdzieś wybierać."
  30. ."<BR></FONT></P>
  31. <TABLE BORDER='1' CELLSPACING='1' CELLPADDING='6' WIDTH='80%' ALIGN='center'>
  32. <TR><TH WIDTH='60%' VALIGN='top' ALIGN='center'>
  33. <P>Zbliżające się malowanka</P>
  34. </TH><TH WIDTH='35%' VALIGN='top' ALIGN='center'>
  35. <P>Rejestracja i zgłoszenia</P>
  36. </TH><TD WIDTH=205 ROWSPAN='3' VALIGN='top' ALIGN='left'><P>&nbsp;</P></TD></TR>
  37. <TR><TD WIDTH='35%' VALIGN='top'>";
  38. /* Lewa kolumna */
  39. include 'incl/malowanka.php';
  40. echo "<BR> int ".(int)$_SESSION['auth']." zwykla ".$_SESSION['auth']."<BR>";
  41. "</TD><TD WIDTH='60%' VALIGN='top' ALIGN='right'>";
  42. /* Prawa kolumna */
  43. include 'incl/rejestracja_form.php';
  44. include 'incl/rejestracja.php';
  45. include 'incl/zgloszenie_form.php';
  46. include 'incl/zgloszenie.php';
  47. echo "<BR> int ".(int)$_SESSION['auth']." zwykla ".$_SESSION['auth']."<BR>";
  48. "</TD></TR><TR><TD WIDTH=409 COLSPAN='2' VALIGN='top' ALIGN='left'>";
  49. /* Stopka */
  50. "<A HREF='count/counter_admin.php'><FONT SIZE='-2'></FONT>.</A>
  51. </TD>
  52. </TR>
  53. </TABLE>
  54. </BODY>
  55. </HTML>";
  56. ?>
tehaha
no dobra ale w czym właściwie jest problem? tak na marginesie lepiej jest oprzeć strukturę strony na <div> a nie na tabelkach
tescior
Chodzi o to, że zaincludowany formularz odwołuje się do strony głównej (w zasadzie sam do siebie, bo jest dołączony bezpośrednio do strony) a mimo to nie w przestrzeni strony jest dostępna zmienna sesji

zmienna sesji - nie ustawiona
-------
+ | + ustawiona
-------
znów nie ustawiona

Przez to nie działa poprawnie ukrywanie/pokazywanie pozostałych podmodułów, sesja zamiast sobie żyć - w jakimś 'bliżej nie określonym' momencie umiera...

Pytanie - dlaczego...
tehaha
czyli, że w inkludowanym pliku nie masz dostępu do zmiennych z sesji tak? a daj print_r($_SESSION); przed include() i wewnątrz pliku, który jest inkludowany
tescior
  1. $zgl_kontrola = mysql_fetch_assoc(mysql_query("select pb_id from paintball_zgloszenia where pb_userid=".(int)$_SESSION['auth']." and pb_data > (select pb_timestmp from paintball_news order by pb_data desc limit 1)"))


Jeśli dobrze rozumiem manual, to powinno zwrócić empty jeśli wynik zapytania będzie pusty albo !empty jeśli mysql coś wypluje...

Natomiast u mnie wywala się błędem a mysql_error() nic nie zwraca...

P.S. Poprzedni problem znalazłem - dupa ze mnie wołowa, formularze się nie wykonywały po ustaleniu sesji a kod za nie odpowiedzialny tak, dlatego sam sobie sesje psułem ustawiając ją drugi raz na podstawie zmiennych z formularza, którego już nie było, więc pustych...
tehaha
to
powinno być do funkcji mysql_query(), a nie mysql_fetch_assoc() bo tak to przerywa działanie jeżeli mysql_fetch_assoc() nic nie zwróci, a to nie musi oznaczać błędu w zapytaniu, może lepiej rozbij to na kilka linijek, bo nie wiem czemu tak na siłę upychasz wszystko:
  1. $result = mysql_query("select pb_id from paintball_zgloszenia where pb_userid=".(int)$_SESSION['auth']." and pb_data > (select pb_timestmp from paintball_news order by pb_data desc limit 1)") or die(mysql_error());
  2. if(mysql_num_rows($result) > 0)
  3. {
  4. $row = mysql_fetch_array($result);
  5. }
tescior
Upycham bo to zapytanie służy mi tylko do jednego - sprawdzenie czy user się już zgłosił czy jeszcze nie, ma zwrócić T/N i koniec, nigdzie dane z tego zapytania nie będą używane.

Wiem już skąd ten problem:

Zmienne sesji są wypełniane dopiero w pliku login.php i mimo, że formularz login_form.php odwołuje się do dokumentu głównego (po zalogowaniu strona się odświeża więc sesja imho powinna być w całym ciele dokumentu) a mimo to, zmienne są dostępne dopiero od linijki, w której dołączam login.php, dlaczego?

  1. <?php
  2. /* Start sesji */
  3.  
  4. /* BlaBlaBla jakiś kod */
  5.  
  6. /* Główny plik konfiguracyjny */
  7. include 'incl/incl.php';
  8.  
  9. /* BlaBlaBla jakiś kod */
  10.  
  11. include 'incl/login_form.php';
  12. include 'incl/login.php';
  13.  
  14. /* BlaBlaBla jakiś kod */
  15.  
  16. /* Lewa kolumna */
  17. include 'incl/malowanka.php';
  18.  
  19. /* BlaBlaBla jakiś kod */
  20.  
  21. /* Prawa kolumna */
  22. include 'incl/rejestracja_form.php';
  23. include 'incl/rejestracja.php';
  24. include 'incl/zgloszenie_form.php';
  25. include 'incl/zgloszenie.php';
  26. ?>
tehaha
napisałem CI już wcześniej, żebyś sprawdził czy na pewno tak jest daj print_r($_SESSION) przed include() i wewnątrz include() bo to raczej nie możliwe, żeby w includowanym pliku nie były dostępne dane sesji problem musi leżeć gdzie indziej, pewnie próbujesz je odczytać zanim są ustawione
tescior
Dokładnie w ten sposób to sprawdzałem.

początek strony : 0
incl.php : 0

poniżej jest już ok.
tehaha
trudno jest cokolwiek powiedzieć bez zobaczenia kodu w includowanych plikach w każdym razie, musisz sprawdzić gdzie ustawiasz zmienne a gdzie je odczytujesz, bo mam wrażenie, że najpierw chcesz się do nich dobrać a dopiero potem je ustawiasz
tescior
tehaha gdyby nie twoje rady w życiu bym tego nie uruchomił winksmiley.jpg (ergo byłbym w rzyci ...)

Wielkie dzięki i pomagacz dla Ciebie.

[Do zamknięcia]
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.