php.lv forumi: Forums - php.lv forumi

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

Forums

#1 User is offline   eT` 

  • Daudzsološais profiņš
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 257
  • Joined: 2008.01.08

Posted 2010.02.06 09:45

Tāmmm,
sāku ar roku kodēt forumu.
Pagaidām esmu ticis tik tālu, ka attēlo kategorijas un forumus, un uzspiežot uz foruma attēlo topikus, no tā foruma, un uzspiežot uz topika visus postus utt. :)

bet viena problēma, pārlādējot foruma lapu lietotājs tiek izlogots ( kkā ne tā skan :D )
mana forum.php uzbūve:
if(empty($_GET["fid"]) && empty($_GET["tid"]))
{
// visas kategorijas un to forumi
}
if(!empty($_GET["fid"]) && empty($_GET["tid"]))
{
// tiek atverts noteikts forums un tā topiki
}
if(!empty($_GET["fid"]) && !empty($_GET["tid"]))
{
// noteikts topiks un tā posti un iespēja iepostot
}


zinu, ka uzbūve savāda, un, iespējams, tā ir pie vainas, bet pamēģināju sadalīju šo pa 3 failiem: forum, viewforum un viewtopic - efekts tāds pats
tā man headerī explode tagad ir šāds:
$a = explode('/', $_GET['lapa']);
$sLapa = isset($a[0]) ? $a[0] : null;
$sId1 = isset($a[1]) ? $a[1] : null;
$sId2 = isset($a[2]) ? $a[2] : null;

$_GET['lapa'] = $sLapa;
if ($sLapa == 'viewtv') $_GET['id'] = $sId1;
if ($sLapa == 'user') $_GET['id'] = $sId1;
if ($sLapa == 'episode') {
        $_GET['tvid'] = $sId1;
        $_GET['id'] = $sId2;
if ($sLapa == 'forum') {
        $_GET['fid'] = $sId1;
        $_GET['tid'] = $sId2;
}

pievienoju tos foruma GETus, lai varētu mod_rewrite lietot

un indexa switchā iekļāvu case 'forum' include forum.php ( tāpat kā daru ar visām pārējām lapām )
Linki ir šādi: /forum/ , /forum/$forums un /forum/$forums/$teema

Ja vajag kāda no tiem ifiem kodu sakiet iepostošu, jo savādāk kods baigi garš.

#2 User is offline   2easy 

  • Koda dievs
  • PipPipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 2,006
  • Joined: 2009.10.02

Posted 2010.02.06 10:19

kāds ir nosacījums/pārbaude, pēc kā tu atšķir ielogotu useri no anonīma apmeklētāja?

#3 User is offline   eT` 

  • Daudzsološais profiņš
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 257
  • Joined: 2008.01.08

Posted 2010.02.06 10:23

if(isset($_SESSION["id"]))
{

}

bet tai lapai nav uzlikts, ka neielogotiem nerāda ( pagaidām )

#4 User is offline   2easy 

  • Koda dievs
  • PipPipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 2,006
  • Joined: 2009.10.02

Posted 2010.02.06 10:31

varbūt session_start() kkur aizmirsās. bez tā $_SESSION vsp nav :D

#5 User is offline   eT` 

  • Daudzsološais profiņš
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 257
  • Joined: 2008.01.08

Posted 2010.02.06 10:36

session_start() ir tikai headerī bet index inklūdo headeri un pārējos failus, tā ka viņi ir savā starpā saistīti.
ar citām lapām tādu problēmu nav.
varbūt vari pamest ideju optimālākam risinājumam nekā if(tukšs), if(nav tukšs), bet nezinu kapēc gribas visu vienā failā :D
tad man kaut ka ērtāk visu pārskatīt.
switchs laikam atkrīt.

EDIT: ahh hostam kkas nav, tapēc nevaru neko rediģēt :/ garms man kkā nepatīk, bet nezinu nevienu US hostu, kuru varētu ņetm, tapēc laikam jāpaliek pie garma, kamēr nebūs 1U + collocation.

This post has been edited by eT`: 2010.02.06 10:37


#6 User is offline   2easy 

  • Koda dievs
  • PipPipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 2,006
  • Joined: 2009.10.02

Posted 2010.02.06 10:45

tie ifi taču attiecas uz foruma sadaļām, nevis login/logoff stāvokli
debugo ar print_r($_SESSION); mēģini atrast, kurā brīdi pazūd $_SESSION['id'] un useris vairs nav logged in
atslēdz nost visas fīčas. mod_rewrite pieliksi, kad pamatfunkcionalitāte būs kārtībā

This post has been edited by 2easy: 2010.02.06 10:53


#7 User is offline   eT` 

  • Daudzsološais profiņš
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 257
  • Joined: 2008.01.08

Posted 2010.02.07 00:57

tamm ar to print_r iznāca
Array ( [admins] => 5 [user] => doublet ) Array ( [admins] => 5 [user] => )
un pārladējot lapu paliek:
Array ( [admins] => 5 [user] => ) Array ( [admins] => 5 [user] => )

mani šaubas māc par vienu kvēriju, lai gan nezinu, kāds tam sakars ar sesiju
$sql3 = mysql_query("SELECT p.date, p.user, t.title FROM forums_posts p INNER JOIN forums_topics t ON p.tid = t.id ORDER BY p.date DESC");
$row3 = mysql_fetch_array($sql3);
$laiks = $row3["date"];
$name_ori = $row3["title"];
$name = seo_string($name_ori);
$user = $row3["user"];

ar šo izvadu pēdējo ierakstu no konkrēta topika.

tā noņēmu to kvēriju un viss notiek.
hmm, kā lai es to kvēriju uzrakstu?

#8 User is offline   2easy 

  • Koda dievs
  • PipPipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 2,006
  • Joined: 2009.10.02

Posted 2010.02.07 01:02

varbūt kkur ifā ir piešķiršana, nevis salīdzināšana? :D
if ($_SESSION['id'] = '') {
    nav ielogojies
}
else {
    ir ielogojies
}

dažreiz tāds prikols gadās. vajag ==, nevis =

ar kveriju nekāda sakara. vienīgi, ja vajag tikai vienu rindu, tad sql beigās piemet LIMIT 1 (performancei)

EDIT: pag varbūt tas $user mainīgais kko sabojā?

This post has been edited by 2easy: 2010.02.07 01:08


#9 User is offline   eT` 

  • Daudzsološais profiņš
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 257
  • Joined: 2008.01.08

Posted 2010.02.07 01:07

Jā LIMIT 1 man bija, nez kapēc biju noņēmis :)
BET, kad aizkomentēju to kvēriju, un tā mainīgos man viss notiek
print_r = Array ( [admins] => 5 [user] => doublet ) Array ( [admins] => 5 [user] => doublet )

un par to = nevis == nav, jo if(sesija) tiek minēts katrā failā kur to vajag un ne indexā ne headerī viņš nav.

#10 User is offline   eT` 

  • Daudzsološais profiņš
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 257
  • Joined: 2008.01.08

Posted 2010.02.07 01:21

tamm atkomentēju visu izņemot user un viss notiek, bet viņš rāda userneimu arī :D ja es to izselektēju, bet nepiešķiru mainīgajam kā tā var :D

EDIT: man kautkā jāizdomā kā lai pārbauda, gan jaunākos postus, gan topikus :/
ar UNION nevis JOIN?

EDIT2: bet ja jaunākais ir posts, tad pārbauda, kurā topikā viņš ir.
to laikam nevarēs ar vienu kvēriju.

man laikam vajadzēs tā:
SELECT ... UNION ORDER BY date DESC LIMIT 1;
if(empty(title))
{
SELECT title FROM topiki WHERE id=$id
}

This post has been edited by eT`: 2010.02.07 01:27


#11 User is offline   2easy 

  • Koda dievs
  • PipPipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 2,006
  • Joined: 2009.10.02

Posted 2010.02.07 01:24

pamēģini gan tā, gan tā. un izdari priekš sevis vērtīgus secinājumus ^^

bet par to $user, tad vnk izmanto citu nosaukumu, ja tas rada tādus gļukus. gadījumā nav kkāds echo ini_get('register_globals'); palicis? varbūt tam $user vēl ir kkāda mistiska sasaiste ar $_SESSION['user'] (by reference)? sazin, kā tā var ;)

This post has been edited by 2easy: 2010.02.07 01:26


#12 User is offline   eT` 

  • Daudzsološais profiņš
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 257
  • Joined: 2008.01.08

Posted 2010.02.07 01:40

jā par $user tev bija taisnība, nezinu, kur un kā, bet kaut kur viņš maisījās :D
nu man pašlaik ir:
$sql3 = mysql_query("SELECT * FROM forums_posts UNION SELECT * FROM forums_topics ORDER BY date DESC LIMIT 1");
$row3 = mysql_fetch_array($sql3);
if(empty($row3["title"]))
{
$topid = $row3["tid"];
$sql8 = mysql_query("SELECT title FROM forums_topics WHERE id='$topid'");
$row8 = mysql_fetch_array($sql8);
$name_ori = $row8["title"];
$laiks = $row3["date"];
$name = seo_string($name_ori);
$useris = $row3["user"];
}
else
{
$laiks = $row3["date"];
$name_ori = $row3["title"];
$name = seo_string($name_ori);
$useris = $row3["user"];
}


un it kā domāju, ka šādi izvilks pēdējo ierakstu ( vienalga vai tas ir topiks vai posts ), bet kaut kas nesanāk. a man katrs SELECT nav jāliek () ?
Jo man liekas, ka tas ORDER BY un LIMIT piesaistīts tikai otrajam UNION selectam.

#13 User is offline   2easy 

  • Koda dievs
  • PipPipPipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 2,006
  • Joined: 2009.10.02

Posted 2010.02.07 02:02

aha

UNION ir vnk tāds kā "un"

This post has been edited by 2easy: 2010.02.07 02:02


#14 User is offline   eT` 

  • Daudzsološais profiņš
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 257
  • Joined: 2008.01.08

Posted 2010.02.07 02:44

emm kā tad lai izvelk pēdējo datumu no abām tabulām?
nekas cits kā JOIN man nenāk prātā, bet tur kaut kas nestrādā.
a kādu JOIN veidu izmantot?
INNER it kā atgriež abu pušu vērtības, un to man arī vajag
mby izselektēt abu pušu visus laukus un pielikt ORDER BY date LIMIT 1?

EDIT: vai MAX strādā uz datetime?
ja strādā varbūt varu atrisināt šādi?

mysql_query("SELECT MAX(date) FROM (SELECT date FROM forums_topics UNION SELECT date FROM forums_posts)");

This post has been edited by eT`: 2010.02.07 06:50


#15 User is offline   eT` 

  • Daudzsološais profiņš
  • PipPipPip
  • Group: Reģistrētie lietotāji
  • Posts: 257
  • Joined: 2008.01.08

Posted 2010.02.08 06:16

BUMP!
atrisināju, bet visai garā modē :D

$sql3 = mysql_query("SELECT * FROM forums_posts ORDER BY date DESC LIMIT 1");
			$sql3a = mysql_query("SELECT * FROM forums_topics ORDER BY date DESC LIMIT 1");
			$row3 = mysql_fetch_array($sql3);
			$row3a = mysql_fetch_array($sql3a);
			if($row3a["date"] > $row3["date"])
			{
			$laiks = $row3a["date"];
			$name_ori = $row3a["title"];
			$name = seo_string($row3a["title"]);
			$useris = $row3a["user"];
			}
			else
			{
			$laiks = $row3a["date"];
			$tid3 = $row3["tid"];
			$sql3b = mysql_query("SELECT title FROM forums_topics WHERE id='$tid3'");
			$row3b = mysql_fetch_array($sql3b);
			$name_ori = $row3b["title"];
			$name = seo_string($row3b["title"]);
			$useris = $row3a["user"];
			}



EDIT: beidzot esmu kaut cik pabeidzis :D
tagad atlicis tikai admincp pievienot foruma editēšanu, un forumā aktivizēt moderatoriem, dzēst un labot :D

EDIT2: vēl neuzliku, ka apskatīt var tikai reģistrētie, bet ja gribat varat iečekot - http://filmam.lv/forum/

This post has been edited by eT`: 2010.02.08 09:19


Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic