Gå til innhold

Siste innlegg av forumet mitt!


Anbefalte innlegg

Skrevet

Hei.

Driver å forbedrer kunnskapen min i PHP ved å lage et forum. Jeg skal hente ut alle fra en kategori. Men jeg henter dem ut, men jeg vil ha den tråden øverste som det ble skrevet siste på. Ikke den nyeste tråden! Hvis noen forstår?

 

Tabellen er sånn:

 

posts

  • id
  • date
  • text
  • user
  • ip

topics

  • id
  • title
  • date
  • text
  • user
  • ip

Og her er koden:

 

<?php

require_once('./inc/top.inc.php');

$catid = intval($_GET['catid']);

$query = mysql_query("SELECT * FROM `categories` WHERE id=$catid");
$check = mysql_num_rows($query);

$name = mysql_fetch_assoc($query);

$title = $name['title'];

echo '<h2>'.$title.'</h2>'."\n\n";



if ($check == 0) {
 echo '<p>Det er ingen tråder i denne kategorien.</p>';
}

else {

 echo '<table class="mainTable">'."\n\n";

 echo "\t".'<tr>'."\n\n";
 
 echo "\t\t".'<th>Tittel</th>'."\n";
 echo "\t\t".'<th>Svar</th>'."\n";
 echo "\t\t".'<th>Siste innlegg</th>'."\n\n";

 echo "\t".'</tr>'."\n\n";

 $query = mysql_query("SELECT * FROM `topics` WHERE `cat_id`=$catid ORDER BY id DESC");

 while ($get = mysql_fetch_assoc($query)) {

   $farge = (!isset($farge) || $farge != '1') ? '1' : '0';

   $id  	=    $get['id'];
   $title  	=  	$get['title'];
   $user  	=  	$get['user'];
 
   $count = mysql_fetch_assoc(mysql_query("SELECT COUNT(`id`) AS `count` FROM `posts` WHERE `t_id`=$id"));
 
   echo "\t".'<tr>'."\n\n";
 
   echo "\t\t".'<td class="catTitle'.$farge.'" valign="middle"><h3 class="catTitle"><a href="showtopic.php?catid='.$catid.'&topicid='.$id.'">'.$title.'</a></h3><p class="catDescription">Skrevet av <strong>'.$user.'</strong></p></td>'."\n";
   echo "\t\t".'<td class="catTopics'.$farge.'" valign="middle" align="center">'.$count['count'].'</td>'."\n";
echo "\t\t".'<td class="catLast'.$farge.'" valign="middle" align="center"><a href="#">Hvem er smartest her?!</a> skrevet av <a href="#">balle</a> den <strong>21.03.05 - 15:35:55</strong></td>'."\n\n";

   echo "\n\t".'</tr>'."\n\n";

 }

 echo '</table>'."\n\n";
 echo '<p><a href="addtopic.php?catid='.$catid.'">Ny tråd</a></p>';

}

require_once('./inc/bottom.inc.php');

?>

 

Noen som kan hjelpe meg hadde jeg blitt glad :w00t:!

Videoannonse
Annonse
Skrevet

Så ikke noe på php koden din men ett lite tips for å få vise de nyeste feltene først er: ORDER BY date DESC

Skrevet (endret)

Ikke aner jeg hvordan forumet ditt skal fungere (ser ingen id eller noe som knytter topics mot poster); slik er iallefall grunnstrukturen på forumene jeg lager:

 

* TOPICS

id

uid (user-id)

title

subtitle

date

 

* POSTS

id

uid (user-id)

tid (topic-id)

text

date

 

Edit: Spiller ingen rolle om tiden er lagret som INT(10) med time() fra PHP i seg, men jeg vil likevel anbefale på det sterkeste å bruke felter som er beregnet på tidspunkter i MySQL, f.eks. TIMESTAMP eller DATETIME. Da kan du også konvertere til/fra UNIX_TIMESTAMP og mye annet morsomt.

 

Edit 2:

Hentet direkte fra kildekoden til unrealized.org v2 (ikke oppe ennå), modifiser og bruk tilsvarende, det skal funke:

SELECT *, t.`id` AS `t_id`, MAX(p.`time`) AS `lastpost`, COUNT(t.`id`) AS `tcount` FROM `fthreads` t, `fposts` p WHERE t.`id` = p.`threadid` AND t.`cat` = '$cat' GROUP BY p.`threadid` ORDER BY `lastpost` DESC

 

Blir vel noe sånt:

SELECT t.*, MAX(p.`date`) AS `lastpost` FROM `topics` t, `posts` p WHERE t.`id` = p.`tid` GROUP BY p.`tid` ORDER BY `lastpost` DESC

Endret av Lokaltog
Skrevet

Så lenge du bruker ett datoformat på feltet date i databasen, f.eks type datetime så skal det fungere fint å bruke order by på den måten. Hvis feltet date ikke er av type datetime eller lignende ville jeg anbefale deg å bytte til det. Du kan forresten f.eks benytte deg av sql kommandoen NOW() på datofelt i databasen hvis du kjører mysql.

Skrevet

Glemte å forklare koden. Det er koden for å vise fram tråden i en kategori. Som hvis dere går på PHP, dere får opp alle trådene i PHP :).

 

Vel, så jeg burde ikke bruker time()? Men hvilken er den beste å anbefale? Og noen som kan vise meg hvordan jeg kan bruke den for å hvise datoen på en forstålig måte?

 

Takk for hjelpen hittil :).

Skrevet

Hvis du f.eks benytter deg av type datetime i databasen så kan du bruke dette for å vise det på det formatet du vil ha:

SELECT DATE_FORMAT(date, '%d.%m.%Y') FROM tabellnavn ORDER BY date DESC

 

Se mer her:

dato funksjoner

Skrevet (endret)
Vel, så jeg burde ikke bruker time()? Men hvilken er den beste å anbefale? Og noen som kan vise meg hvordan jeg kan bruke den for å hvise datoen på en forstålig måte?

Du lager et felt i tabellen med typen TIMESTAMP, DATE, TIME, DATETIME etc., avhengig av behov. Jeg bruker oftest DATETIME. Du kan legge inn verdier i tabellen med f.eks. en av disse spørringene:

- INSERT INTO `tabell` SET `tid` = NOW()

- INSERT INTO `tabell` SET `tid` = FROM_UNIXTIME('. time() .')

- INSERT INTO `tabell` SET `tid` = '05.04.13 13:45:23'

 

Og du kan hente ut UNIX-timestamp'et fra tabellen slik:

- SELECT *, UNIX_TIMESTAMP(`tid`) AS `tid`

 

Edit: eller med DATE_FORMAT, slik som vist ovenfor.

Endret av Lokaltog
Skrevet

Ok, har prøvd litt nå. Kjørte denne queryen på postene:

$query = mysql_query("SELECT user, text, DATE_FORMAT(date, '%d.%m.%Y') FROM `posts` WHERE t_id=$topicid");

Men det kommer ikke opp noe. Også når jeg får opp noe så er det bare en hel nuller. Prøvde datetime... jeg har satt det opp phpmyadmin. Jeg skriver ikke noe dato i spørringen som kjøres når jeg lagrer et innlegg.... vel noen som kan hjelpe?

Skrevet

Når jeg henter ut verdier vha. f.eks. DATE_FORMAT, pleier jeg å gi verdiene aliaser som kan brukes litt enklere i PHP. Med spørringen

SELECT user, text, DATE_FORMAT(date, '%d.%m.%Y') FROM `posts` WHERE t_id=$topicid

må du bruke mysql_fetch_array og referere til datoformatet som $array['DATE_FORMAT(date,'%d.%m.%Y')'] - hvis jeg ikke tar helt feil. Prøv å gi datoen et alias slik:

SELECT user, text, DATE_FORMAT(date, '%d.%m.%Y') AS `date` FROM `posts` WHERE t_id='$topicid'

... og husk apostrofer rundt $topicid. :)

Skrevet

Det funka dessverre ikke... fikk bare:

 

00.00.0000

 

Kan det ikke ha noe med hvordan jeg lagrer det? Fordi jeg skriver ikke noe til date...? Skal det skrives av seg selv?

Skrevet

Et par kommentarer fra sidelinja:

 

*) når du ønsker å sette inn datoen i tabellen, bruk Now() som de andre sier, eks: insert into tabelanem set ...., datokolonne=Now(), .....

 

*) det er uheldig å bruke navnet "date" på en kolonne, da dette er et "reserved keyword" i mysql (kan likevel bruke `date`) men det er uheldig som sagt, og bør unngås.

Skrevet

Fikk det til nå! Takk skal dere ha :).

Men... jeg har enda ikke helt fått svaret på spørsmålet mitt som står øverst, eller så er det jeg som er ute å røyker her...?

Skrevet

for å spare serverload, kan du jukse, og legge til en kolonne i topic-tabellen som heter "lastposted datetime", og som du oppdaterer hver gang noen skriver en post

Skrevet

Ok, det ser ut som det er trøbbel med de dato greiene. Jeg lagrer last_post med NOW() i datetime. Den som det ble sist posta på kommer den, men de under blir ikke riktig. Har ikke det med datoen å gjøre? Hvordan skal jeg fikse på det da? =S

Takk for hjelpen hittill!

Skrevet

hvis du oppdaterer kolonnen last_post i topics tabellen for riktig topic hver gang noen poster, så bør det gå på skinner...

 

eks:

select * from topics order by last_post desc limit 10

 

du brukte datetime på last_post ja?

Skrevet

Sånn her gjør jeg det når jeg lagrer en post:

 

$a = "INSERT INTO `posts` (`user`, `t_id`, `ip`, `text`, `date`)  VALUES ('$username', '".$topicid."', '".$ip."', '".$message."', NOW())";
mysql_query($a);
$b = "UPDATE topics SET last_date_posted=NOW()";
mysql_query($b);

 

Og når jeg skriver ut alle trådene i en kategori:

 

SELECT * FROM `topics` WHERE `cat_id`=$catid ORDER BY last_date_posted DESC

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...