Rolf B: Deine Datenbank-Tabelle ist wahrscheinlich (noch) falsch.

Beitrag lesen

Hallo Joseba,

aber ich weiß nicht wie auf meine Code implementiert kann

das ist auch gut so, denn bei taniarascia ist ein entscheidender Fehler. Man nimmt keine Links, um Funktionen für eine Zeile anzubieten, sondern Buttons. Das hat zwei Gründe:

  • Ein Link erzeugt einen GET Request, und GET Requests sollen idempotent sein (das bedeutet: ich kann einen GET Request immer wieder aufrufen und bekomme immer das gleiche Ergebnis). Idempotent bedeutet, dass die gespeicherten Daten nicht verändert werden. Deswegen muss es ein POST Request sein, und POST bekommst Du mit Form und Submit-Button

  • Wenn Du es mit Links machst, kann ich Dir eine Mail mit einem Bild darin schicken. Und als src des <img> Elements setze ich http://example.org/joseba/deleteposting.php?id=4711. Du öffnest Dir Mail, erlaubst dem Mailprogramm das Anzeigen von Bildern, und WUMM ist ein Eintrag auf der Kommentarseite weg.

Also: Es muss ein Button sein.

Was Du auch noch brauchst, ist eine ID. Die gibt es in deiner Datenbank bisher nicht. Füge in deiner Tabelle eine neue Spalte ID ein, mit Typ INT, und mache daraus eine AUTO_INCREMENT Spalte (das ist bei mir eine Checkbox mit A_I als Überschrift). Beim INSERT erzeugt MYSQL jedesmal einen neuen INT Wert. Die ID Spalte kannst Du in getMessages einfach ins SQL einbauen:

$sql = "SELECT id, name, email, message, datetime FROM mela ORDER BY datetime DESC";

Füge den Button beim Anzeigen der Kommentare hinzu:

<article>
   <h2>Message from <?=htmlspecialchars( $message['name'] ) ?> &lt;<?= htmlspecialchars( $message['email'] ); ?>&gt;</h2>
   <p>Created <?=htmlspecialchars( $message['datetime'] ); ?></p>
   <p><?=htmlspecialchars( $message['message'] ); ?></p>
   <button type="submit" name="delete" value="<?= $message['id'] ?>">Delete</button>
</article>

Der Button hat den Namen 'delete' und die ID des Kommentars als Value. D.h. wenn man ihn klickt, wird das Form, in dem er steht, mit POST gesendet und in $_POST['delete'] findet man die ID des Kommentars, der gelöscht werden soll.

Wie es nun weitergeht, weiß ich nicht so genau. Ursus hat mit Dir ein paar Sachen an deinem Code geändert. Die Idee ist, dass Du in PostOkT unterscheidest, ob ein Button mit name="post" oder name="delete" gedrückt wurde.

Zum Beispiel so. Ich habe PostOkT in einen Verteiler geändert, es wird nur geprüft, welche Funktion ausgewählt wurde. Die Arbeit findet in neuen Methoden statt. In PostNewComment passiert das, was vorher in PostOkT stand. Ich habe sie noch etwas mehr aufgeteilt: es gibt eine neue Methode displayMessages(), die sich um das Laden und Anzeigen der Kommentare kümmert. Das habe ich gemacht, damit ich die Anzeige auch nach dem Löschen aufrufen kann. Neu ist in displayMessages ein <form>, das die Kommentare einschließt. Das braucht man, damit der Button etwas submitten kann.

Die Methode DeleteComment ist ganz neu. Sie ist erst einmal ein Stub (das ist eine Methode, die noch nichts macht) und zeigt die ID, die gelöscht werden soll, nur an. Danach werden alle Messages ausgegeben, sonst würdest Du nach Klick auf einen Delete Button nichts mehr sehen.


    function PostOkT() 
    {
        if (isset($_POST['post'])
        {
            $this -> PostNewComment();
        }     
        else if (isset($_POST['delete'])
        {
            $this -> DeleteComment($_POST['delete']);
        }
    }

    function PostNewComment()
    {
        if (! $this -> PostOK)
        {
            echo "<br><b><h3>*** Please enter all required fields ***</h3></b>";  
        } 
        $this->writeCommentToDatabase(); 
        $this->displayMessages();        
    }

    function displayMessages()
    {
        $messages = $this->getMessages();
?>
   <form method="POST">        
<?php
        foreach ($messages as $message):
?>
     <article>
       <h2>Message from <?= htmlspecialchars($message['name']) ?> (<?= htmlspecialchars($message['email'])?>)</h2>
       <p>Created <?= $message['datetime'] ?></p>
       <p><?= $message['message'] ?></p>
       <button action="submit" name="delete" value="<?= $message['id'] ?>">Delete</button>
     </article>
<?php
        endforeach;                 
?>
   </form>
<?php
    }

    function DeleteComment($id)
    {
        echo "<br>Lösche jetzt Kommentar $id<br>";
        $this->displayMessages();
    }

Bringe das erstmal zum Laufen. Es muss ja auch zu dem passen, was Ursus mit Dir gemacht hat. Wenn Du auf Delete klickst und "Lösche jetzt Kommentar 7" angezeigt wird, machen wir mit dem SQL Teil weiter.

Rolf

--
sumpsi - posui - clusi
0 94

phpmyadmin nicht start

liebewinter
  • datenbank
  1. 0
    Rolf B
    1. 0
      liebewinter
  2. 1
    ursus contionabundo
    1. 0
      liebewinter
      1. 0
        ursus contionabundo
      2. 0
        ursus contionabundo
        1. 0
          liebewinter
          1. 0
            ursus contionabundo
            1. 0
              liebewinter
              1. 0
                ursus contionabundo
                1. 0
                  liebewinter
                  1. 0
                    ursus contionabundo
                    1. 0
                      liebewinter
                      1. 0
                        ursus contionabundo
                        1. 0
                          liebewinter
                          1. 0
                            ursus contionabundo
                            1. 0
                              liebewinter
                              1. 1
                                ursus contionabundo
                                1. 0
                                  liebewinter
                                  1. 0
                                    ursus contionabundo
                                    1. 0
                                      liebewinter
                                      1. 0
                                        ursus contionabundo
                                  2. 0
                                    ursus contionabundo
                                    1. 0
                                      liebewinter
                                      1. 0
                                        ursus contionabundo
                                        1. 0
                                          liebewinter
                                          1. 0
                                            ursus contionabundo
                                            1. 0
                                              liebewinter
                                              1. 0
                                                liebewinter
                                                1. 0
                                                  ursus contionabundo
                                                  1. 0
                                                    liebewinter
                                                    1. 0
                                                      ursus contionabundo
                                                      1. 0
                                                        liebewinter
                                                        1. 0
                                                          ursus contionabundo
                                                          1. 0
                                                            liebewinter
                                                          2. 1

                                                            Es lag definitiv am PHP...

                                                            ursus contionabundo
                                                            1. 0

                                                              Was an der Kommentarfunktion konzeptionell schlecht ist

                                                              ursus contionabundo
                                                              1. 0
                                                                liebewinter
                                                                1. 0
                                                                  liebewinter
                                                                  1. 0
                                                                    liebewinter
                                                                    1. 0
                                                                      Tabellenkalk
                                                                    2. 0

                                                                      Altes Zeug löschen

                                                                      ursus contionabundo
                                                                      1. 0
                                                                        liebewinter
                                                                        1. 0
                                                                          liebewinter
                                                            2. 0
                                                              liebewinter
                                                              1. 0
                                                                liebewinter
                                                                1. 0

                                                                  Deine Datenbank-Tabelle ist wahrscheinlich (noch) falsch.

                                                                  ursus contionabundo
                                                                  1. 0
                                                                    liebewinter
                                                                    1. 0
                                                                      ursus contionabundo
                                                                      1. 0
                                                                        liebewinter
                                                                        1. 0
                                                                          ursus contionabundo
                                                                  2. 0
                                                                    liebewinter
                                                                    1. 0
                                                                      Rolf B
                                                                      1. 0
                                                                        liebewinter
                                                                        1. 0

                                                                          Auf dem Weg zum DELETE

                                                                          Rolf B
                                                                        2. 0

                                                                          Nein! Du machts jetzt einen Plan.

                                                                          ursus contionabundo
                                                                          1. 0
                                                                            liebewinter
                                                                      2. 0
                                                                        liebewinter
                                                                        1. 0
                                                                          Rolf B
                                                                          1. 0
                                                                            liebewinter
                                                                            1. 0
                                                                              Rolf B
                                                                              1. 0
                                                                                liebewinter
                                                                                1. 0
                                                                                  liebewinter
                                                                                  1. 0
                                                                                    Rolf B
                                                                                    1. 0
                                                                                      liebewinter
                                                                                    2. 0
                                                                                      liebewinter
                                                                                    3. 0
                                                                                      liebewinter
                                                                                      1. 0
                                                                                        Rolf B
                                                                                        1. 0
                                                                                          Matthias Apsel
                                                                                          • menschelei
                                                                                          1. 0
                                                                                            Rolf B
                                                                                        2. 0
                                                                                          liebewinter
                                                                                      2. 0

                                                                                        Tabelle wird nicht gezeigt

                                                                                        liebewinter
                                                                2. 0
                                                                  Rolf B
                                                                  1. 0

                                                                    Kleine Verfeinerung der reportPDOError - Methode

                                                                    ursus contionabundo
                                                                    • datenbank
                                                                    • php
                                                                    1. 0
                                                                      liebewinter
                                                                      1. 0
                                                                        ursus contionabundo
                                                                        1. 0
                                                                          MudGuard
                                                                        2. 0
                                                                          liebewinter
                                                                          1. 0
                                                                            ursus contionabundo
                                                                            1. 0
                                                                              liebewinter
                                                                              1. 0
                                                                                ursus contionabundo
                                                                                1. 0
                                                                                  liebewinter
                                                                                  1. 0
                                                                                    ursus contionabundo
                                                                                    1. 0
                                                                                      liebewinter
                                                                                      1. 0
                                                                                        ursus contionabundo
                                                                                        1. 0
                                                                                          liebewinter
                                                                                          1. 0
                                                                                            liebewinter
                                                      2. 0
                                                        liebewinter
                                                2. 0
                                                  liebewinter
                                                  1. 0
                                                    liebewinter
                                                    1. 0
                                                      ursus contionabundo
                        2. 0
                          ursus contionabundo
                          1. 0
                            liebewinter