Gå til innhold

Siste innlegg av forumet mitt!


Anbefalte innlegg

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:!

Lenke til kommentar
Videoannonse
Annonse

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
Lenke til kommentar

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.

Lenke til kommentar

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 :).

Lenke til kommentar
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
Lenke til kommentar

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?

Lenke til kommentar

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. :)

Lenke til kommentar

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.

Lenke til kommentar

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!

Lenke til kommentar

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

Lenke til kommentar

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å
×
×
  • Opprett ny...