Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankzeile mit einem Button aus einer Dropdownliste löschen

Einklappen

Neue Werbung 2019

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

  • Datenbankzeile mit einem Button aus einer Dropdownliste löschen

    Hallo liebe Forumgemeinde,

    nach tagelanger Suche und verzweifeltem Variablengeschubse habe ich mich dazu entschlossen meine Frage im Forum zu äußern.

    Es geht darum, dass ich einen Artikel aus meiner Datenbank zuerst aus einer Auswahlliste/Dropdown auswähle (das klappt soweit auch) und dann über einen Button löschen möchte. Und genau an diesem Punkt komme ich nicht weiter. Ich vermute, dass es am value= Wert scheitert - er also nicht das selektierte Element nimmt und in meiner Löschen-Methode verarbeitet. Ich habe an der Stelle schon sehr viel versucht - zuletzt mit loeschen($_GET["anr"]) oder nur löschen($z) - allerdings auch ohne Erfolg.

    Die Fehlermeldung, die ich erhalte lautet: "Undefined index: anr in ...\bestelldatenbank\e3_artikel_loeschen.php on line 17"


    Code:
    <!DOCTYPE html>
    <html lang="de">
    <head>
    <meta charset="utf-8" />
    <title>Aufgabe 3</title>
    </head>
    <body>
    
    
     <?php
        $artikel = new artikel();
    
        ?>
    <form method = "post">
    <label for="artik">Artikel:</label>
        <?php echo $artikel->einfuegenSelect("artikel", "anr", "name", NULL); ?>
        <input type="submit" name="loesch" value= <?php $artikel -> loeschen($_GET["anr"]); ?> Löschen >
    </form>    
    
    
    <?php
    
    class artikel {
    
    private $tabelle = "artikel";
    
    public function loeschen($z) {
         try {
        $pdo = new PDO ( 'mysql:dbname=bestelldatenbank;host=localhost;charset=utf8', 'root', '' );
    } catch ( PDOException $e ) {
        die ( $e->getMessage () );  }
    
         $sql = "DELETE FROM " .$this->tabelle ." WHERE anr = :anr";
         if ($stmt = $pdo -> prepare($sql)) {
            $stmt->bindParam(':anr', $z);
            $stmt -> execute();
             echo "Artikel gelöscht!";
          }
    }
    
    public function einfuegenSelect($tabelle, $val, $text, $def)
    {
        try {
        $pdo = new PDO ( 'mysql:dbname=bestelldatenbank;host=localhost;charset=utf8', 'root', '' );
    } catch ( PDOException $e ) {
        die ( $e->getMessage () );  }
    
        $s = "<select name=\"" .$val ."\" id=\"" .$val ."\">";
    
    
        $sql = "SELECT " .$val .", " .$text ." FROM " . $tabelle;
        if ($stmt = $pdo -> prepare($sql)) {
    
            $stmt -> execute();
            while ($z = $stmt -> fetch()) {
                $s = $s ."<option value=\" . $z[0] .\"";
                $s = $s .">" .$z[0] ." | " .$z[1]."</option>";
    
            }
            $s = $s ."</select>";
            return $s;      
        }
        else {
            return false;
        }
     }
    
    
    }
     ?>   
    
    </body>
    </html>
    Ich würde mich wirklich sehr über einen Gedankenanstoß freuen.
    Besten Gruß,
    Steven

  • #2
    Ohne die Zeile zu makieren ist nicht nett, egal.
    woher soll
    HTML-Code:
      <input type="submit" name="loesch" value= <?php $artikel -> loeschen($_GET["anr"]); ?> Löschen >
    GET['arn'] auch kommen beim ersten Aufruf ?

    Kommentar


    • #3
      Sorry für das nicht markieren. Das merke ich mir fürs nächste Mal.

      Ich dachte dadurch nimmt er die gewählte Auswahl als anr. an übergibt den Wert an die Methode. Aber das tut er nicht.
      Ich verstehe nur nicht wie ich aus der Dropdown Methode (einfuegenSelect) die ausgewählten Werte bzw. Variablen in meine Löschen Methode bekomme.

      HTML-Code:
       <input type="submit" name="loesch" value= <?php $artikel -> loeschen($z); ?> Löschen >
      Er nimmt sich keine Variable, egal welche ich auch aus der Dropdown Methode nehme. Ich hätte gedacht, die variable $z definitert die <option value> und damit könnte ich es mit dem Submit Button auswerten, aber das klappt nicht.

      Kommentar


      • #4
        Du musst den Wert des DropDowns abfragen. Debugge.. ist eh immer das selbe Procedere. Schau ob dein HTML Form korrekt ist, dann was in $_POST übergeben wird etc etc.. Debuggen halt.

        https://php-de.github.io/jumpto/faq/#debugging

        Warum machst du in jeder Funktion die DB Verbindung neu auf? Mach die einmal auf und nutze die doch mehrmals. Weiter schau dir mal das EVA-Prinzip an (siehe Wissenssammlung). Eine PHP-Klasse innerhalb der (HTML)-Ausgabe (das "A" von EVA) ist sehr unschön. Das hat dort nichts verloren.
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Wenn man mit POST absendet darf man nicht erwarten mit $_GET auf die Parameter zugreifen zu können.

          Kommentar


          • #6
            Der Aufruf der Löschen Methode gehört auch definitiv nicht in die Value des Buttons. Stattdessen solltest du prüfen, ob das Formular abgeschickt wurde, die Parameter validieren und dann erst die Methode aufrufen.
            sorry, shift-taste kaputt

            Kommentar

            Lädt...
            X