Jump to content
php.lv forumi

Forums


eT`
 Share

Recommended Posts

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

Link to comment
Share on other sites

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.

Edited by eT`
Link to comment
Share on other sites

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ā

Edited by 2easy
Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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ā?

Edited by 2easy
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

}

Edited by eT`
Link to comment
Share on other sites

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 ;)

Edited by 2easy
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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)");

Edited by eT`
Link to comment
Share on other sites

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/

Edited by eT`
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...