tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
381
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von BadKiss
    BadKiss BadKiss ist offline Mitglied Silber
    Registriert seit
    Sep 2007
    Ort
    Hamburg
    Beiträge
    53
    Hallo zusammen,

    ich habe (leider) mal wieder ein kleines Problem

    Ich habe mir jetzt ein eigenes Forum gecodet, welches soweit auch alles super klappt, außer die "neue Beiträge" Anzeige.
    Es klappt soweit auch alles, wenn ein neuer Beitrag zu einem bereits bestehenden Thread erscheint.
    Eröffnet man jetzt allerdings einen neuen Thread, so wird das nicht angezeigt sondern lediglich der neue Beitrag in dem bereits vorhandenen Thread.

    Hier einmal kurz meine Abfragen, damit man es genauer versteht, was ich meine bzw wie ich es bisher umgesetzt habe:

    $row_u['board_utopics_id'] ist die ID der Topics/der Kategorie (zb Main >> Allgemein).

    PHP-Code:
    // neuer Thread
    $sql_c "SELECT *
              FROM board_utopics, board_thread, member
              WHERE board_thread_topic_id = board_utopics_id
              AND board_utopics_id = "
    .$row_u['board_utopics_id']."
              AND board_thread_creator = member_id
              GROUP BY board_thread_id
              ORDER BY board_thread_last_post DESC
              LIMIT 1"
    ;
    $result_c mysql_query($sql_c) OR die(mysql_error());
    $anz_c mysql_num_rows($result_c);
    $row_c mysql_fetch_assoc($result_c); 
    PHP-Code:
    // neuer Beitrag zu bestehendem Thread
    $sql_d "SELECT *
              FROM board_utopics, board_thread, member, board_answer
              WHERE board_thread_topic_id = board_utopics_id
              AND board_utopics_id = "
    .$row_u['board_utopics_id']."
              AND board_answer_creator = member_id
              AND board_answer_thread_id = board_thread_id
              GROUP BY board_thread_id, board_answer_id
              ORDER BY board_answer_date DESC
              LIMIT 1"
    ;
    $result_d mysql_query($sql_d) OR die(mysql_error());
    $anz_d mysql_num_rows($result_d);
    $row_d mysql_fetch_assoc($result_d); 
    PHP-Code:
    // Prüfen, ob Member neuen Beitrag/Thread schon gelesen hat
    if($anz_d || $anz_c) {
        if(
    $anz_d) {
            
    // neuer Beitrag zu bestehendem Thread
            
    $sql_y "SELECT *
                      FROM member_thread_read, board_thread, board_utopics
                      WHERE board_utopics_id = "
    .$row_u['board_utopics_id']."
                      AND board_utopics_id = board_thread_topic_id
                      AND board_thread_id = "
    .$row_d['board_thread_id']."
                      AND member_thread_read_member_id = "
    .$_SESSION['member_id']."
                      AND member_thread_read_thread_id = board_thread_id
                      AND member_thread_read_last_read > board_thread_last_post"
    ;
        } elseif(
    $anz_c) {
            
    // neuer Thread
            
    $sql_y "SELECT *
                      FROM member_thread_read, board_thread, board_utopics
                      WHERE board_utopics_id = "
    .$row_u['board_utopics_id']."
                      AND board_utopics_id = board_thread_topic_id
                      AND board_thread_id = "
    .$row_c['board_thread_id']."
                      AND member_thread_read_member_id = "
    .$_SESSION['member_id']."
                      AND member_thread_read_thread_id = board_thread_id
                      AND member_thread_read_last_read > board_thread_last_post"
    ;
        }
        
    $result_y mysql_query($sql_y) OR die(mysql_error());
        
    $anz_y mysql_num_rows($result_y);
        if(
    $anz_y) {
            
    $threadreadyet '<img src="/image/old_posts.png" alt="Old Posts" />';
        } else {
            
    $threadreadyet '<img src="/image/new_posts.png" alt="New Posts" />';
        }
    } else {
      
    $threadreadyet '<img src="/image/old_posts.png" alt="Old Posts" />';

    Ich hoffe, ihr versteht den Code ^ ^'
    Sollte das evtl. einfacher gehn, so freu ich mich auf Vorschläge
    Und ich hoffe, jmd kann mir helfen, ich komm einfach nicht weiter im Moment
    Geändert von BadKiss (28.01.10 um 13:20 Uhr)
     

  2. #2
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    685
    Wenn du machst

    Code :
    1
    2
    3
    4
    5
    6
    
    if($anz_d || $anz_c) { 
        if($anz_d) { 
            // neuer Beitrag zu bestehendem Thread 
        } elseif($anz_c) { 
            // neuer Thread 
        }

    dann liest er dank else if() neue Threads nur dann, wenn es keine neuen Beiträge in bestehenden Threads gibt.

    Nachdem du auch noch für beide Abfragen sql_y, anz_y und result_y verwendest, würde er selbst wenn er beides lesen würde die erste Abfrage mit der zweiten Abfrage überschreiben.

    In kurz: Wenn du beide Abfragen auf einmal brauchst, kannst du sie nicht beide auf einmal checken, bzw. musst verschiedene Variablen verwenden.
     

  3. #3
    Avatar von BadKiss
    BadKiss BadKiss ist offline Mitglied Silber
    Registriert seit
    Sep 2007
    Ort
    Hamburg
    Beiträge
    53
    Hmm, dachte ich mir schon fast..

    Wie würdest du's denn lösen?
     

  4. #4
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    685
    Ohne else halt und mit verschiedenen Variablen

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    if($anz_d)
      {
         $sql_y = .....
         $result_y = ...
         $anz_y = ...
      }
    if($anz_c)
      {
         $sql_z = .....
         $result_z = ...
         $anz_z = ...
      }
     

  5. #5
    Avatar von BadKiss
    BadKiss BadKiss ist offline Mitglied Silber
    Registriert seit
    Sep 2007
    Ort
    Hamburg
    Beiträge
    53
    Das hilft mir leider auch nicht weiter, er zeigt immer noch das falsche Symbol an..

    Ebenso hab ich das Problem bei der Ausgabe des letzten Posts, ohne der If-Anweisung dort gibt er mir für beides das aktuellste aus..

    PHP-Code:
    // Neuer Post zu bestehendem Thread
    if($anz_d) {
      
    $sql_z "SELECT *
                FROM board_answer
                WHERE board_answer_id = "
    .$row_d['board_answer_id']."";
        
    $result_z mysql_query($sql_z) OR die(mysql_error());
        
    $anz_z mysql_num_rows($result_z);
        
    $row_z mysql_fetch_assoc($result_z);
        
    $ansid $row_z['board_answer_answer_id'];
        
    $i ceil($ansid 10);
      echo 
    'von <a href="index.php?site=member&amp;id='.$row_d['member_id'].'">'.$row_d['member_nick'].'</a>
                    <a href="index.php?site='
    .$_GET['site'].'&amp;topic='.$row_d['board_utopics_id'].'&amp;thread='.$row_d['board_thread_id'].'&amp;page='.$i.'#post='.$row_d['board_answer_id'].'">&raquo;</a><br />
        '
    .date('d.m.y, H:i',$row_d['board_answer_date']);
        echo 
    '<br />';
    }
    // neuer Thread
    if($anz_c) {
        echo 
    'von <a href="index.php?site=member&amp;id='.$row_c['member_id'].'">'.$row_c['member_nick'].'</a>
                    <a href="index.php?site='
    .$_GET['site'].'&amp;topic='.$row_c['board_utopics_id'].'&amp;thread='.$row_c['board_thread_id'].'&amp;page=1">&raquo;</a><br />
        '
    .date('d.m.y, H:i',$row_c['board_thread_date']);

    Die weitere Abfrage in $anz_d soll mir lediglich die richtige Seitenzahl ausgeben.

    Und wie gesagt, er zeigt mir trotzdem weiterhin das falsche Symbol an.
    Lediglich wenn der 1. Thread in der Liste ungelesen ist, zeigt er das "neue Beiträge" Symbol an, anders das "keine neuen Beiträge" Symbol
     

  6. #6
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    685
    Um das richtige Symbol zu bekommen musst du natürlich auch beide Ergebnisse prüfen.

    Code :
    1
    2
    3
    4
    5
    
    if($anz_y || $anz_z) { 
            $threadreadyet = '<img src="/image/old_posts.png" alt="Old Posts" />'; 
        } else { 
            $threadreadyet = '<img src="/image/new_posts.png" alt="New Posts" />'; 
        }

    Wenn in deiner SELECT Abfrage am Ende LIMIT 1 steht, dann wird mysql_num_rows() da auch nur 1 Datensatz finden.
    Wenn du wissen willst wieviele Datensätze es dazu gibt, musst du die Abfrage ohne LIMIT neu definieren, mal abgesegen davon, dass ODER BY, GROUP BY und DESC für mysql_mun_rows unnötig sind.
     

  7. #7
    Avatar von BadKiss
    BadKiss BadKiss ist offline Mitglied Silber
    Registriert seit
    Sep 2007
    Ort
    Hamburg
    Beiträge
    53
    So hatte ich es schon probiert, allerdings hatte das nichts bewirkt.
    Ich versuch aber noch etwas anderes, wenn noch ein Vorschlag kommt, bitte posten.
     

  8. #8
    Avatar von BadKiss
    BadKiss BadKiss ist offline Mitglied Silber
    Registriert seit
    Sep 2007
    Ort
    Hamburg
    Beiträge
    53
    Mein Problem besteht leider weiterhin
     

Ähnliche Themen

  1. Beiträge im Forum als ungelesen anzeigen
    Von Schlickser im Forum PHP
    Antworten: 3
    Letzter Beitrag: 18.02.07, 01:26
  2. Antworten: 25
    Letzter Beitrag: 21.03.06, 22:17
  3. Forum Neue Beiträge?
    Von eternitysoft im Forum PHP
    Antworten: 14
    Letzter Beitrag: 11.09.05, 12:31
  4. Antworten: 2
    Letzter Beitrag: 14.12.04, 16:48
  5. Neue Beiträge farblich markieren in meinem Forum
    Von zweitausendvier im Forum PHP
    Antworten: 3
    Letzter Beitrag: 20.07.04, 10:38

Stichworte