tescior
24.06.2010, 17:51:30
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
24.06.2010, 19:16:09
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
24.06.2010, 19:48:39
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)
<?php
// Start sesji
// Główny plik konfiguracyjny
include 'incl/incl.php';
"<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN'>
<STYLE TYPE='text/css'>
.mini { font-SIZE: 7px; color=#990000; }
</STYLE>
<HTML>
<HEAD>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; CHARSET=iso-8859-2'>
<META NAME='Description' CONTENT='Stronka do zarządzania wypadami PaintBallowymi.'>
<META NAME='Keywords' CONTENT='PaintBall, Malowanie'>
<META HTTP-EQUIV='Content-Language' CONTENT='pl'>
<META NAME='Author' CONTENT='Robert Miernik'>
<META HTTP-EQUIV='Reply-To' CONTENT='r@un.pl'>
<META NAME='Robots' CONTENT='index, nofollow'>
<TITLE>PaintBall</TITLE>
</HEAD>
<BODY TEXT='#ABCDEF' BGCOLOR='#012345' LINK='#BCDEFF' VLINK='#CDEFFF' ALINK='#DEFFFF' MARGINWIDTH='20' LEFTMARGIN='20' RIGHTMARGIN='20' MARGINHEIGHT='30' TOPMARGIN='30' BOTTOMMARGIN='30'>";
/* Panel logowania */
include 'incl/login_form.php';
include 'incl/login.php';
echo "<BR> int ".(int
)$_SESSION['auth']." zwykla ".$_SESSION['auth']."<BR>"; "<P ALIGN='center'><FONT SIZE='+2'>
Strona powstała w celu usprawnienia organizacji naszych malowanek.<BR>
Mam nadzieję, że uda się opanować trochę zamieszania i może częściej się gdzieś wybierać."
."<BR></FONT></P>
<TABLE BORDER='1' CELLSPACING='1' CELLPADDING='6' WIDTH='80%' ALIGN='center'>
<TR><TH WIDTH='60%' VALIGN='top' ALIGN='center'>
<P>Zbliżające się malowanka</P>
</TH><TH WIDTH='35%' VALIGN='top' ALIGN='center'>
<P>Rejestracja i zgłoszenia</P>
</TH><TD WIDTH=205 ROWSPAN='3' VALIGN='top' ALIGN='left'><P> </P></TD></TR>
<TR><TD WIDTH='35%' VALIGN='top'>";
/* Lewa kolumna */
include 'incl/malowanka.php';
echo "<BR> int ".(int
)$_SESSION['auth']." zwykla ".$_SESSION['auth']."<BR>"; "</TD><TD WIDTH='60%' VALIGN='top' ALIGN='right'>";
/* Prawa kolumna */
include 'incl/rejestracja_form.php';
include 'incl/rejestracja.php';
include 'incl/zgloszenie_form.php';
include 'incl/zgloszenie.php';
echo "<BR> int ".(int
)$_SESSION['auth']." zwykla ".$_SESSION['auth']."<BR>"; "</TD></TR><TR><TD WIDTH=409 COLSPAN='2' VALIGN='top' ALIGN='left'>";
/* Stopka */
"<A HREF='count/counter_admin.php'><FONT SIZE='-2'></FONT>.</A>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>";
?>
tehaha
24.06.2010, 20:43:09
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
24.06.2010, 21:37:23
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
24.06.2010, 21:55:37
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
25.06.2010, 10:57:17
$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
25.06.2010, 11:10:34
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:
$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()); {
}
tescior
25.06.2010, 11:54:15
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?
<?php
/* Start sesji */
/* BlaBlaBla jakiś kod */
/* Główny plik konfiguracyjny */
include 'incl/incl.php';
/* BlaBlaBla jakiś kod */
include 'incl/login_form.php';
include 'incl/login.php';
/* BlaBlaBla jakiś kod */
/* Lewa kolumna */
include 'incl/malowanka.php';
/* BlaBlaBla jakiś kod */
/* Prawa kolumna */
include 'incl/rejestracja_form.php';
include 'incl/rejestracja.php';
include 'incl/zgloszenie_form.php';
include 'incl/zgloszenie.php';
?>
tehaha
25.06.2010, 12:03:49
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
25.06.2010, 12:09:35
Dokładnie w ten sposób to sprawdzałem.
początek strony : 0
incl.php : 0
poniżej jest już ok.
tehaha
25.06.2010, 12:36:00
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
29.06.2010, 07:35:16
tehaha gdyby nie twoje rady w życiu bym tego nie uruchomił

(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.