Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Foren ausgeben -> Letzter Beitrag

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Foren ausgeben -> Letzter Beitrag

    Hallo,
    bin zurzeit an meinem eigenen Forum dran. Nun hab ich aber ein kleines Problem. Ich gebe auf der Starseite meine Foren aus. Dies hat auch funktioniert. Nun habe ich aber noch eine Funktion hinzugefügt das der letzte Beitrag die Themen ID in die Tabbele "forumm" gespeichert und will anhand der id dann das Thema auf der starseite ausgeben mit dem letzen Beitrag. Nun hab ich aber ein Problem das wenn keine id vom letzen beitrag gespeichert ist in der tabbele forumm , wird nichts ausgeben. Was kann das sein


    PHP-Code:
    <?php mysql_connect("localhost""root","") or die
        (
    "Keine Verbindung moeglich");
      
    mysql_select_db("forumsoft") or die
        (
    "Die Datenbank existiert nicht.");

    echo 
    '<table border="0" width="90%" ><tr><td align="center">Forenuebersicht</td></tr></table><table border="1" width="90%" >
        '
    ;
    $sql2 "SELECT Kat_id, Kat_name FROM kathe ";
        
    $ergebnis6 mysql_query($sql2);
        while(
    $row2 mysql_fetch_object($ergebnis6))
        {
        

    echo 
    "<tr><td>$row2->Kat_name  </td></tr>"// Kategorie auslesen + ausgeben
    $sql "SELECT id, forumname, kathf_id, last_b, last_v FROM forumm WHERE kathf_id = '".$row2->Kat_id."' ";
        
    $ergebnis2 mysql_query($sql);
        while(
    $KT mysql_fetch_object($ergebnis2))   // Foren ausgeben
        
    {
        echo 
    "<tr><td><a href='thread.php?id="; echo "$KT->id&aktion=look'>"; echo "$KT->forumname</a></td> "// Ausgeben der Foren + verweis in die Themenübersicht


        
    $sql "SELECT id, thema_name FROM thread WHERE id = '".$KT->last_b."' "// Auslesen des letzen Beitrags anhand der ID die in Tabelle forumm gespeichert sind
        
    $ergebnis4 mysql_query($sql);
        while(
    $th mysql_fetch_object($ergebnis4))
        {
        
        
    $sql "SELECT id, forumname, kathf_id, last_b, last_v FROM forumm WHERE kathf_id = '".$row2->Kat_id."' ";
        
    $ergebnis2 mysql_query($sql);
        while(
    $KT2 mysql_fetch_object($ergebnis2))
        {

        echo 
    "  <td> <a href='beitrag.php?id=$th->id&aktion=look'><font size='2'>$th->thema_name</font></a><font size='2'><br /> $KT2->last_v</font></td></tr>"// Letzter Beitrag ausgeben
        
    }

    }

    }
    }
    echo 
    "</table>";

  • #2
    Dieser Quellcode ist sehr schwer zu lesen. (Achte auf deine Variablen-Namen)
    So richtig Sinn macht der Code auch nicht. In $KT und $KT2 steht doch das selbe. Und ich sehe auch nirgends das du auf eine Tabelle zugreifst die Beträge beinhalten könnte.

    Bitte schick mal einen Abzug von dem Teil der Datenbank. (Tablename und Columnnames sollten reichen)

    Kommentar


    • #3
      In der Tabelle 'forumm' habe ich vollgende Spalten:

      id; forumname; Rang; nachricht; kathf_id; last_b; last_v

      In der Tabelle 'thread' :

      id; thema_name; von ;am ; forum_od ; thema_frage; session_id, gesperrt ; wichtig

      In der Tabelle ' kathe':
      Kat_name ; id ; Kat_id


      Ich hab dir hier nochmal den Code anbei gelegt ein bischen übersichtlicher gestalltet.

      PHP-Code:
         <?php
      require("style/header.php");
      ?>

      <div  style="font-family:Comic Sans MS">
      <?php
      mysql_connect
      ("localhost""root","") or die
          (
      "Keine Verbindung moeglich");
        
      mysql_select_db("forumsoft") or die
          (
      "Die Datenbank existiert nicht.");

      echo 
      '<table border="0" width="90%" ><tr><td align="center">Forenuebersicht</td></tr></table><table border="1" width="90%" >
          '
      ;
      $sql2 "SELECT Kat_id, Kat_name FROM kathe ";
          
      $ergebnis6 mysql_query($sql2);
          while(
      $row2 mysql_fetch_object($ergebnis6))
          {
          

      echo 
      "<tr><td>$row2->Kat_name  </td></tr>"// Kategorie auslesen + ausgeben
      $sql "SELECT id, forumname, kathf_id, last_b, last_v FROM forumm WHERE kathf_id = '".$row2->Kat_id."' ";   // last_b ist = Letztes Thema // Darin speicher ich die Themen ID
          
      $ergebnis2 mysql_query($sql);
          while(
      $KT mysql_fetch_object($ergebnis2))   // Foren ausgeben
          
      {
          echo 
      "<tr><td><a href='thread.php?id="; echo "$KT->id&aktion=look'>"; echo "$KT->forumname</a></td> "// Ausgeben der Foren + verweis in die Themenübersicht
          


          
      $sql "SELECT id, thema_name FROM thread WHERE id = '".$KT->last_b."' "// Auslesen des letzen Beitrags anhand der ID die in Tabelle forumm gespeichert sind
          
      $ergebnis4 mysql_query($sql);
          while(
      $th mysql_fetch_object($ergebnis4))
          {

          echo 
      "  <td> <a href='beitrag.php?id=$th->id&aktion=look'><font size='2'>$th->thema_name</font></a><font size='2'><br /> $KT->last_v</font></td></tr>"// Letztes Thema ausgeben
          
      }

      }
      }
      }
      }
      echo 
      "</table>";

      require(
      "style/footer.php");
         
      ?>

      Kommentar


      • #4
        Probier mal das folgende:
        PHP-Code:
            mysql_connect("localhost""root","") or die ("Keine Verbindung moeglich");
                
            
        mysql_select_db("forumsoft") or die    ("Die Datenbank existiert nicht.");

            echo 
        '<table border="0" width="90%" >
                        <tr>
                            <td align="center">Forenuebersicht</td>
                        </tr>
                    </table>
                    <table border="1" width="90%" >'
        ;

            
        // Kategorien auslesen
            
        $ketegorien mysql_query("SELECT Kat_id, Kat_name FROM kathe;");
            
            
        // Kategorien iterieren
            
        while( $ketegorie mysql_fetch_object$ketegorien ) )
            {  
                
        // Kategorie ausgeben
                
        echo '<tr>
                            <td colspan="2">' 
        $ketegorie->Kat_name '</td>
                        </tr>'
        ;
                
                
        // Foren auslesen (nach Kategorie)
                
        $foren mysql_query('SELECT id, forumname, last_b FROM forumm WHERE kathf_id = ' $ketegorie->Kat_id ';');
                
                
        // Foren iterieren
                
        while( $forum mysql_fetch_object$foren ) ) 
                {
                    
        // Foren ausgeben
                    
        echo '<tr>
                                <td>
                                    <a href="thread.php?id=' 
        $forum->id '&aktion=look">' $forum->forumname '</a>
                                </td>'
        ;
                    
                    
        // Themen auslesen (nach last_b vom Forum)
                    
        $themen mysql_query('SELECT id, thema_name FROM thread WHERE id = ' $forum->last_b ';');
                    
                    
        // Themen iterieren
                    
        while($thema mysql_fetch_object$themen ) )
                    { 
                        
        // Thema ausgeben
                        
        echo '
                            <td>
                                <a href="beitrag.php?id=' 
        $thema->id '&aktion=look">' $thema->thema_name '</a>
                            </td>
                        </tr>'
        ;
                    }

                }
            }
            
            echo 
        '</table>'
        Natürlich kann ich nicht kontrolieren ob die SQL-Abfragen richtig sind. Es ist auch sehr schwer bei deinem Datenbank-Design durchzuschauen. Ich empfehle dir den Bezeichnungen alle sprechende Namen zu geben. Eleganter wäre es auch wenn man das alles mit nur einer SQL-Abfrage löst.

        Kommentar


        • #5
          Hallo,
          danke für die schnelle Hilfe! Funktioniert soweit , bloß wenn kein Letzes Thema eingetragen ist also last_b leer ist bekomm ich eine Fehlermeldung:
          Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp5\htdocs\Forum\index.php on line 45
          Mit freundlichen Grüßen

          Kommentar


          • #6
            PHP-Code:
                mysql_connect("localhost""root","") or die ("Keine Verbindung moeglich");
                    
                
            mysql_select_db("forumsoft") or die    ("Die Datenbank existiert nicht.");

                echo 
            '<table border="0" width="90%" >
                            <tr>
                                <td align="center">Forenuebersicht</td>
                            </tr>
                        </table>
                        <table border="1" width="90%" >'
            ;

                
            // Kategorien auslesen
                
            $ketegorien mysql_query("SELECT Kat_id, Kat_name FROM kathe;");
                
                
            // Kategorien iterieren
                
            while( $ketegorie mysql_fetch_object$ketegorien ) )
                {  
                    
            // Kategorie ausgeben
                    
            echo '<tr>
                                <td colspan="2">' 
            $ketegorie->Kat_name '</td>
                            </tr>'
            ;
                    
                    
            // Foren auslesen (nach Kategorie)
                    
            $foren mysql_query('SELECT id, forumname, last_b FROM forumm WHERE kathf_id = ' $ketegorie->Kat_id ';');
                    
                    
            // Foren iterieren
                    
            while( $forum mysql_fetch_object$foren ) ) 
                    {
                        
            // Foren ausgeben
                        
            echo '<tr>
                                    <td>
                                        <a href="thread.php?id=' 
            $forum->id '&aktion=look">' $forum->forumname '</a>
                                    </td>'
            ;
                        
                        if ( 
            $forum->last_b ) {            
                            
            // Themen auslesen (nach last_b vom Forum)
                            
            $themen mysql_query('SELECT id, thema_name FROM thread WHERE id = ' $forum->last_b ';');
                            
                            
            // Themen iterieren
                            
            while($thema mysql_fetch_object$themen ) )
                            { 
                                
            // Thema ausgeben
                                
            echo '
                                    <td>
                                        <a href="beitrag.php?id=' 
            $thema->id '&aktion=look">' $thema->thema_name '</a>
                                    </td>'
            ;
                            }                
                        } else {
                                
            // kein letztes Thema 
                                
            echo '<td>kein letztes Thema</td>';
                        }
                        
                        echo 
            '</tr>';

                    }
                }
                
                echo 
            '</table>'

            Kommentar


            • #7
              Super! Dankkeeeeee!!!!

              Funktioniert!

              Mit freundlichen Grüßen

              Kommentar


              • #8
                Probier mal bitte in deiner DB ob folgende SQL-Abfrage ein sinnvollen Result zurück gibt:
                PHP-Code:
                    SELECT
                        category
                .Kat_id as category_id,
                        
                category.Kat_name as category_name,
                        
                forum.id as forum_id,
                        
                forum.forumname as forum_name,
                        
                forum.last_b as forum_lastThread,
                        
                thread.id as thread_id,
                        
                thread.thema_name as thread_name
                    FROM
                        kathe 
                as category,
                        
                JOIN forumm forum ON forum.kathf_id category.Kat_id,
                        
                JOIN thread thread ON thread.id forum.last_b

                Kommentar


                • #9
                  Zitat von Kinger Beitrag anzeigen
                  Probier mal bitte in deiner DB ob folgende SQL-Abfrage ein sinnvollen Result zurück gibt:
                  PHP-Code:
                      SELECT
                          category
                  .Kat_id as category_id,
                          
                  category.Kat_name as category_name,
                          
                  forum.id as forum_id,
                          
                  forum.forumname as forum_name,
                          
                  forum.last_b as forum_lastThread,
                          
                  thread.id as thread_id,
                          
                  thread.thema_name as thread_name
                      FROM
                          kathe 
                  as category,
                          
                  JOIN forumm forum ON forum.kathf_id category.Kat_id,
                          
                  JOIN thread thread ON thread.id forum.last_b
                  Was soll das bringen?

                  Kommentar


                  • #10
                    Damit brauchst du nur eine Abfrage, was wiederum schneller sein dürfte.

                    Folgend mal der komplette Code:
                    PHP-Code:
                        $mysqli = new mysqli('localhost''root''''forumsoft');
                        
                        if (
                    $mysqli->connect_errno) {
                            
                    printf('Connect failed: %s\n'$mysqli->connect_error);
                            exit();
                        }
                        
                        
                    $sql '    
                            SELECT
                                category.Kat_id as category_id,
                                category.Kat_name as category_name,
                                forum.id as forum_id,
                                forum.forumname as forum_name,
                                forum.last_b as forum_lastThread,
                                thread.id as thread_id,
                                thread.thema_name as thread_name
                            FROM
                                kathe AS category
                                JOIN forumm AS forum ON forum.kathf_id = category.Kat_id
                                LEFT JOIN thread AS thread ON thread.id = forum.last_b
                            '
                    ;
                        
                        if( !
                    $result $mysqli->query$sql ) ) {
                            
                    printf('There was an error running the query: %s\n'$mysqli->error);
                            exit();
                        }
                        
                        while ( 
                    $row $result->fetch_object() ) {
                            
                    $result_array[$row->category_id][$row->forum_id] = array(
                                    
                    'category_id'             => $row->category_id,
                                    
                    'category_name'     => $row->category_name,
                                    
                    'forum_id'                 => $row->forum_id,
                                    
                    'forum_name'         => $row->forum_name,
                                    
                    'thread_id'                 => $row->thread_id,
                                    
                    'thread_name'        => $row->thread_name
                                
                    );
                        }
                        
                        
                    $result->free();
                        
                    $mysqli->close();
                            
                        
                    $html '';    
                        foreach ( 
                    $result_array as $category ) {
                            
                    $row_span 0;
                            
                    $forum_html '';
                            
                    $category_name '';
                            foreach ( 
                    $category as $forum ) {
                                
                    $row_span++;            
                                
                    $category_name = ($category_name) ? $category_name $forum['category_name'];
                                
                    $thread_html = ( $forum['thread_id'] ) ? '<td><a href="beitrag.php?id=' $forum['thread_id'] . '&aktion=look">' $forum['thread_name'] . '</a></td>' '<td>Kein Thema</td>';
                                
                    $forum_html .= '<tr><td><a href="thread.php?id=' $forum['forum_id'] . '&aktion=look">' $forum['forum_name'] . '</a></td>' $thread_html '</tr>';
                            }
                            
                    $html .= '<tr><th colspan="2"><strong>' $category_name '</strong></td></th>' $forum_html;
                        }
                        
                        
                    $html $html <> '' '<h1>Forenübersicht</h1><table>' $html '</table>' '';
                        
                        
                    print_r$html ); 

                    Kommentar


                    • #11
                      Noch ein paar Anmerkungen: ich würde nicht nur Comic Sans MS als Font angeben. Was wenn jmd mit einem PC auf deine Anwendung zugreift und auf diesem nicht Comic Sans MS installiert ist?

                      Außerderm solltest du aufhören mysql_* zu nutzen. Die wurde jetzt in PHP 5.5 als Deprecated markiert und wird in der nächsten Version rausfliegen.
                      Als supportete Alternative gibts http://php.net/manual/de/book.mysqli.php (mysqli) und http://php.net/manual/de/book.pdo.php (PDO)

                      LG
                      https://github.com/Ma27
                      Javascript Logic is funny:
                      [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

                      Kommentar


                      • #12
                        Ma27 hat recht ... sollte man noch umbauen!

                        Kommentar


                        • #13
                          Vielen Dank für die tolle Hilfe!
                          Aber der neue Code sieht noch ziemlich kompliziert aus

                          Kommentar


                          • #14
                            Aber der neue Code sieht noch ziemlich kompliziert aus
                            Solange er lesbar ist und eine gescheite Dokumentation hat...
                            https://github.com/Ma27
                            Javascript Logic is funny:
                            [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

                            Kommentar


                            • #15
                              Hab den Code nochmal geändert und auf mysqli umgebaut. (Möchte nicht, dass hier falsche Lösungen stehen )

                              Am besten du kommentierst den Code für dich. Wenn du dann eine Funktion nicht kennst, kannst du sie auf php.net nachlesen.

                              Kommentar

                              Lädt...
                              X