Ankündigung

Einklappen
Keine Ankündigung bisher.

Dynamisches Kommentar-Sytem

Einklappen

Neue Werbung 2019

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

  • Dynamisches Kommentar-Sytem

    Grüße,
    Bin gerade dabei ein Kommentar-Sytem ala youtube etc. aufzubauen.

    Ich kann mit dem nachfolgenden Code auf einen Link klicken, wo das Kommentar-Fenster aufgerufen wird und mir ALLE Kommentare für angemeldete User aus der DB ausliest. Ich möchte aber die Kommentare dynamisch auslesen lassen, sprich für jeden Link(Fenster) nur Kommentare ausgeben lassen, die auch in diesem Bereich geschrieben worden sind.

    Hier der Code:

    ach und PS.: Bitte nicht wegen der Formatierung mosern

    PHP-Code:
    <?php
    $session 
    = ($_SESSION["sess_user"]);
    mysql_connect('localhost','root','') or die(mysql_error());
    mysql_select_db('db') or die("Nö");

    if(isset(
    $_SESSION['sess_user']))
    {
        
    $user $_SESSION['sess_user'];
    }
    if(isset(
    $_POST['submit']))
    {
        
    $submit $_POST['submit'];
    }

    if(isset(
    $submit))
    {
    $name $_POST['name'];
    $text $_POST['text'];
    if (
    $name !=""&& $text !="")
    {
    $query mysql_query("INSERT INTO kommentare VALUES('', '$text', '$name')");
    echo 
    " Dein Kommentar wurde gespeichert!<br />";
    }
    else
    {
    echo 
    " Es müssen alle Felder ausgefüllt sein! <br/>";
    }
    }
    echo 
    "<br/><br/><br/><br/>
    <form action='comments.php' method='POST'>
        Name: <input type='text' name='name' value='"
    $user."' readonly> <br/>
        <b>Kommentar verfassen</b> :<br/>
        <textarea name='text' rows= '5' cols='40'></textarea><br/>
        <input type='submit' name='submit' value='Absenden'>
        </form>"
    ;
    echo 
    "<h3> Kommentare </h3>";
    $query mysql_query("SELECT * FROM kommentare ORDER BY int_id DESC");
    $count mysql_num_rows($query);
    if (
    $count!=0)

    {
    while (
    $row=mysql_fetch_assoc($query))
    {
     
    $name $row['str_username'];
     
    $text $row['text_text'];
     echo 
    " Kommentar von: $name<br/>
     
    $text<br/><br/><br/>";
    }
    }

    else 
    {
     echo 
    "Es gibt noch keine Kommentare<br/>";
    }
    ?>

  • #2
    1. Wo ist denn da ein session_start?
    2. Wieso schreibst du $_SESSION['sess_user'] und $_POST['submit'] auf andere Variablen um?
    3. Du benutzt noch die veralteten mysql*-Funktionen, anstatt der mysqli-Funktionen
    4. Du schreibst die Daten ungeprüft in die Datenbank
    5. "Select *" sollte man nicht schreiben
    6. Du überprüfst nicht eine SQL-Anweisung auf Fehler
    7. Das Script hat keine Ahnung davon, welchen Bereich es auslesen soll.
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      zu 1.

      PHP-Code:
      <?php
      session_start
      ();
      if(!isset(
      $_SESSION["sess_user"])){
          
      header("location:index.php");
      } else {
      ?>
      .
      .
      .
      <?php
      }
      ?>
      zu 2.
      weil er mir sonst einen index fehler ausgibt.

      zu 3.
      Ich benutze das alte mysql, weil ich es damals so gelernt habe und noch super funktioniert.

      zu 4.
      ..Vorschlag?

      zu 5.

      Da ich alle Felder in der tabelle brauche, schreibe ich halt "SELECT *", ich wüsste nicht wo der unterschied liegen würde, wenn ich das Kind bei namen nennen sollte...?

      zu 6.

      Vorschlag?

      zu 7.

      Wenn das Script keine AHnung hätte, würde es garnichts auslesen, tut es aber.


      Finde ich Super, dass du so viele "Fehler" erkennst, danke dafür. Das beantwortet meine frage aber leider nicht.

      Kommentar


      • #4
        Zitat von Kronkorkn Beitrag anzeigen
        zu 2.
        weil er mir sonst einen index fehler ausgibt.
        Quatsch! Statt
        PHP-Code:
        if(isset($submit)) 
        kannst du auch gleich
        PHP-Code:
        if(isset($_POST['submit'])) 
        und ersparst dir so dasumschreiben.
        Zitat von Kronkorkn Beitrag anzeigen
        zu 3.
        Ich benutze das alte mysql, weil ich es damals so gelernt habe und noch super funktioniert.
        Nur weil du es so gelernt hast, muss es ja nicht der richtige Weg sein. Man muss sich auch mal auf Erneuerungen umstellen. Siehe http://php.net/manual/en/migration55.deprecated.php
        Zitat von Kronkorkn Beitrag anzeigen
        zu 4.
        ..Vorschlag?
        Doku?! Siehe http://de3.php.net/manual/en/mysqli....ape-string.php
        Zitat von Kronkorkn Beitrag anzeigen
        zu 5.
        Da ich alle Felder in der tabelle brauche, schreibe ich halt "SELECT *", ich wüsste nicht wo der unterschied liegen würde, wenn ich das Kind bei namen nennen sollte...?
        16.14. Warum soll ich nicht SELECT * schreiben?
        http://www.dclp-faq.de/q/q-sql-select.html
        Zitat von Kronkorkn Beitrag anzeigen
        zu 6.
        Vorschlag?
        Doku?! Siehe http://de3.php.net/manual/en/mysqli.error.php
        Zitat von Kronkorkn Beitrag anzeigen
        zu 7.
        Wenn das Script keine AHnung hätte, würde es garnichts auslesen, tut es aber.
        Ich habe gesagt, dass das Script keine Ahnung hat, welchen Bereich es auslesen soll. Bitte Antworten richtig lesen!
        Zitat von Kronkorkn Beitrag anzeigen
        Das beantwortet meine frage aber leider nicht.
        Nicht direkt, aber es sollte dir einen Denkanstoss geben! Irgendwie muss das Script mitbekommen, welche Kommentare angezeigt werden sollen. Da ich aber deine Tabellen nicht kenne, kann ich dir auch nichts dazu sagen. Normalerweise regelt man das über ID's
        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

        Kommentar


        • #5
          Schaue dir das Konzept des Affenformulars an, das sollte dir weiterhelfen, deinen Quellcode und deine Validierung logisch zu strukturieren. Die Atitude "So habe ich es gelernt" ist zu verwerfen, denn die Welt entwickelt sich weiter und es ist nur zu empfehlen sich dieser Entwicklung anzupassen. Es gibt Gründe für die Einstufung der ursprünglichen MySQL API als deprecated. Du solltest dir daher aus diesen Gründen MySQLi und PDO zu Gemüte führen. Das muss nicht jetzt und sofort sein, sollte jedoch auch eine ToDo-Liste gepackt werden.

          Mit der Thematik, wie man Daten validiert, solltest du dich jedoch jetzt und sofort auseinander setzen. Frage dich, nach welchen Kriterien die Daten durch den Filter kommen sollen und validiere dementsprechend mit PHP. Zum Thema 'Validierung' gibt es genügend Beiträge im Netz.

          'SELECT *' ist langsamer und unstrukturierter als das explizite Nennen der benötigten Felder, da MySQL nun erst nich die Felder auslesen muss, bevor es auf diese zugreifen kann.

          Zum eigentlichen Problem: Wie du deine Bereiche strukturierst wissen wir nicht und folglich können wir dir so auch keine Antwort für dein Thema bieten. Fakt ist, du musst deine Kommentare in der Datenbank den Bereichen zuordnen. Da du YouTube angesprochen hast: Hier werden bspw. (womöglich) die Kommentare den IDs der Videos zugeordnet.

          Kommentar


          • #6
            Danke erstmal.

            Zu MySQLi: Ich verweigere mich nicht neue Technologien kennenzulernen. Nur für meine Zwecke, reicht es(vorerst) mit MySQL.

            Zu meiner Kommentar Tabelle:
            Ich habe 3 Spalten: ID(auto_increment), Username, text(der eigentliche kommentar).

            Zu "Select *": Habe mal fix nen Performance test gemacht, Select * gewinnt sogar in diesem Fall.

            http://s7.directupload.net/images/140614/temp/ljhcqh77.jpg

            Aber ich muss dir recht geben. Wenn man mit großen Tabellen, die mehr Spalten haben und Datensätze beinhalten arbeitet, ist ein direkter Auslese-Befehl mit Sicherheit performanter.

            Damit ich des richtig verstanden habe. Man nimmt Beispielsweise Bilder. Jedes dieser Bilder hat eine einmalige ID. Und ich müsste nun anhand der ID der Bilder meine Kommentare zuordnen?

            Kommentar


            • #7
              Zitat von Kronkorkn Beitrag anzeigen
              Damit ich des richtig verstanden habe. Man nimmt Beispielsweise Bilder. Jedes dieser Bilder hat eine einmalige ID. Und ich müsste nun anhand der ID der Bilder meine Kommentare zuordnen?
              Genau!
              Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

              Kommentar


              • #8
                Gut, hättest du einen Ansatz für mich?

                Kommentar


                • #9
                  Du hast ja die ID des Bildes, die hängst du dann an den Link. Somit hast du dann die ID des Bildes beim kommentieren. Jetzt musst du noch die Tabelle mit den Kommentaren um die BildID erweitern. Beim Speichern des Kommentares schreibst du dann die BildID in diese Spalte. Beim Auslesen der Kommentare kanst du dann mit "where `bildid`= übergebeneId" an die richtigen Kommentare kommen.
                  Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                  Kommentar


                  • #10
                    Also man könnte da doch jetzt eine neue tabelle aufmachen mit den Feldern
                    kommentar_id ++ user_id ++ bild_id und kommentar_inhalt

                    Um jetzt zum Beispiel alle Kommentare zu einem bestimmten Bild zu erhalten machst du ein Select mit:
                    PHP-Code:
                    SELECT kommentar_id from neue_tabelle WHERE bild_id="Bild1" 
                    Der Vorteil ist,dass du jetzt auch noch leicht alle kommentare eines user anzeigen kannst und auch zu welchem Bild der kommentar gemacht wurde.

                    Kommentar


                    • #11
                      Zitat von Kronkorkn Beitrag anzeigen
                      Danke erstmal.

                      Zu MySQLi: Ich verweigere mich nicht neue Technologien kennenzulernen. Nur für meine Zwecke, reicht es(vorerst) mit MySQL.

                      Zu "Select *": Habe mal fix nen Performance test gemacht, Select * gewinnt sogar in diesem Fall.
                      Tut es nicht, das was du da siehst ist Service-Lag. Bei deiner Größendimension der Tabelle ( Spaltenzahl und Datensätzanzahl ) ist beides gleich schnell. Der select-all-placeholder allerdings ein Schuss ins blaue und späterer Array-Access absolutes Key-Bingo.

                      Ein Hinweis: Dein Script wird mit PHP 5.5.0 oder höher DEPRECATED-Notices ausspucken wenn du mysql_* methoden benutzt. Das solltest du nicht einfach wegignorieren.
                      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                      Kommentar


                      • #12
                        Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
                        Choosing an API
                        Warum man mysql* generell nicht (mehr) nutzen sollte.
                        Wie man von mysql* auf PDO umsteigt
                        Wissenswertes zum Thema SQL-Injection

                        Kommentar

                        Lädt...
                        X