Seite 1 von 1

ersten eintrag herrausfiltern

Verfasst: 17.12.2006 00:07
von kolja
nabend forum

ich habe ein kleines script, welches mir die vier ersten topics eines forums anzeigt
zu sehen hier: http://mona-davinci.de/phpbb/radio.php

klappt doch ganz gut, oder ??

doof ist nur, das man beim ersten betreten kein inhalt zu sehen bekommt
(klar fehlt ja auch die ?id=xxx)

nun habe ich erstmal versucht das ganze auf ein topic festzusetzen,
eigentlich soll es natürlich immer das erste (jüngste) sein welches erscheinen soll wenn man oben in der navigation auf radio klickt

so und hier mein kauderwelsch:

Code: Alles auswählen

if(isset($_POST['submit']) or isset($_GET['id']))
{
   $topic_id = ( !empty($HTTP_GET_VARS['id']) ) ? intval($HTTP_GET_VARS['id']) : intval($HTTP_POST_VARS['id']);
   $sql = "SELECT t.*, u.*, p.*, pt.* FROM `".TOPICS_TABLE."` t, `".USERS_TABLE."` u, `".POSTS_TABLE."` p, `".POSTS_TEXT_TABLE."` pt
           WHERE p.poster_id = u.user_id
         AND t.topic_poster = u.user_id
         AND t.topic_poster = p.poster_id
         AND p.topic_id = t.topic_id
         AND pt.post_id = p.post_id
         AND t.topic_id = $topic_id
         ORDER BY p.post_id ASC LIMIT 0 , 1";   
   if( !( $result = $db->sql_query($sql) ) )
   {
      message_die(CRITICAL_ERROR, 'Kann Themen Informationen nicht laden!', '', __LINE__, __FILE__, $sql);
   }      
   while($row = $db->sql_fetchrow($result))
   {
      $topic = $row['topic_title'];
	  $user = $row['username'];
      $message = bbencode_second_pass($row['post_text'], $row['bbcode_uid']);
      $message = nl2br($message); 
	    $template->assign_block_vars('posts', array(
	    'TOPIC' => $topic,
		'USER' => $user,
		'MESSAGE' => $message,
		'TOP_ID' => $row['topic_id'],
		));
   }
}         
else
{
   $topic_id = '1369';
}    

wie gesagt die $topic_id in der else bedingung soll immer die des ersten topics sein

über ne hilfe würde ich mich freuen
kolja

Verfasst: 17.12.2006 17:21
von Xwitz
Welches meinst Du mit "ersten" das zuletzt eröffnete, das mit dem letzten Beitrag oder was?

Was Dir noch fehlt, ist die Auswahl der vier topic_id richtig?

EDIT: Hilft Dir das, für die vier Topics mit dem neusten Beiträgen des Forums ***?

Code: Alles auswählen

$sql = "SELECT topic_id FROM phpbb_topics WHERE forum_id = *** ORDER BY topic_last_post_id LIMIT 4";
Aus der KB:
Feld: topic_last_post_id
Funktion/Inhalt: id des letzten Beitrages im jeweiligen Thema
Werte: wird +1 gezählt (= forum_last_post_id in Tabelle "forums")

Verfasst: 17.12.2006 19:53
von kolja
danke für die antwort, aber ich glaube wir reden (schreiben / denken) aneinander vorbei...

also wenn ich auf den reiter "radio" klicke lande ich auf der seite radio mit den vier letzten topics.
wenn ich dann auf eins der vier topics klicke bekomme ich den tesxt des jeweiligen topics angezeigt
(weil der text immer erscheint, sobald eine gültige id über die url mitgegeben wurde)

jetzt solte beim klick auf "radio" direckt das erste topic mit text angezeigt werden

dafür brauche ich (nach meiner theorie) einfach die id der ersten (dem zuletzt geschiebenen) topics und verwende diese wenn über die url keine id mitgegeben wurde

oder gibt es da was logischeres ??

kolja

Verfasst: 17.12.2006 20:58
von Miriam
Also Dein Script ist irgendwie unlogisch aufgebaut: Du machst die SQL Abfrage, wenn die ID gesetzt ist und wenn keine gesetzt ist, rätst du die ID des Topics.
In Deinem Posting hast Du die Vorgehensweise aber richtig geschrieben.
Hier ist also der Plan:

1. Führe die SQL Abfrage aus und übergebe (speichere) die ID des neuesten Topics in ein Variable.
2. Wenn die ID über die URL kommt: Verwende diese ansonsten die Gespeicherte.

Verfasst: 17.12.2006 22:01
von kolja
:oops: :oops: :oops: war wohl schon etwas spät gestern abend...

und so ganz logisch scheint mir die sache auch nicht...

nichtdestotrotz habe ich vergessen zu sagen, dass die id´s die übergeben werden aus dieser abfrage kommen:

Code: Alles auswählen

// NAVIGATION
$sql = "SELECT * FROM " . TOPICS_TABLE . " WHERE forum_id = 30 ORDER BY topic_id DESC LIMIT 0 , 4";
if( !($result = $db->sql_query($sql)) )
{
   message_die(GENERAL_ERROR, 'Could not query users', '', __LINE__, __FILE__, $sql);
}
   $i = 0;
   do
   {
      $topic_id = $row['topic_id'];
      $for_id = $row['forum_id'];
	  $topic_title = $row['topic_title'];
  	  $first_post_id = $row['topic_first_post_id'];


      $template->assign_block_vars('memberrow', array(
         'TOPIC_ID' => $topic_id,
		 'FOR_ID' => $for_id,
         'TOPIC_TITLE' => $topic_title,
		 'FIRST_POST_ID' => $first_post_id,)
      );
		
      $i++;
   }
   while ( $row = $db->sql_fetchrow($result) );
   $db->sql_freeresult($result);
// NAVIGATION
und davon brauche ich doch den wert (id) für die variable, oder ??

kolja

Verfasst: 17.12.2006 22:53
von kolja
ok es läuft :D :D

http://mona-davinci.de/phpbb/radio.php

hier mal das was passiert wenn keine topic_id über die url geliefert wird:

Code: Alles auswählen

else
{
// erstes topic
$sql = "SELECT topic_id FROM " . TOPICS_TABLE . " WHERE forum_id = 30 ORDER BY topic_id DESC LIMIT 0 , 1";
if( !($result = $db->sql_query($sql)) )
{
   message_die(GENERAL_ERROR, 'Could not query users', '', __LINE__, __FILE__, $sql);
}
  
   do
   {
      $topic1_id = $row['topic_id'];

     
   }
   while ( $row = $db->sql_fetchrow($result) );
   $db->sql_freeresult($result);
// erstes topic

   $sql = "SELECT t.*, u.*, p.*, pt.* FROM `".TOPICS_TABLE."` t, `".USERS_TABLE."` u, `".POSTS_TABLE."` p, `".POSTS_TEXT_TABLE."` pt
           WHERE p.poster_id = u.user_id
         AND t.topic_poster = u.user_id
         AND t.topic_poster = p.poster_id
         AND p.topic_id = t.topic_id
         AND pt.post_id = p.post_id
         AND t.topic_id = $topic1_id
         ORDER BY p.post_id ASC LIMIT 0 , 1";   
   if( !( $result = $db->sql_query($sql) ) )
   {
      message_die(CRITICAL_ERROR, 'Kann Themen Informationen nicht laden!', '', __LINE__, __FILE__, $sql);
   }      
   while($row = $db->sql_fetchrow($result))
   {
      $topic = $row['topic_title'];
	  $user = $row['username'];
      $message = bbencode_second_pass($row['post_text'], $row['bbcode_uid']);
      $message = nl2br($message); 
	    $template->assign_block_vars('posts', array(
	    'TOPIC' => $topic,
		'USER' => $user,
		'MESSAGE' => $message,
		'TOP_ID' => $row['topic_id'],
		));
   }}    
ich hoffe das ist jetzt logischer ;-)

kolja

Verfasst: 17.12.2006 23:05
von Miriam
Wow, da ist noch 'ne Menge Optimierungspotential drin..... 8)

Verfasst: 18.12.2006 01:28
von kolja
:oops:
schlimme dinge also sicherheitsbedenklich,
oder nur nicht so elegant ;-)

kolja

Verfasst: 18.12.2006 09:39
von Miriam
Rein von der Art die Problematik scripttechnisch umzusetzen. Sicherheitssachen sehe ich erst mal nicht. :D

Verfasst: 18.12.2006 20:53
von kolja
naja das script wurde auch nun wirklich nicht für das problem geschrieben

der hauptteil ist aus dem intro+portal mod für die fetchposts :oops:

aber zum kompletten selberschreiben reicht es noch nicht...

kolja