Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP - SQL Query löscht nicht mehrere Werte, trotz foreach-Schleife?

Einklappen

Neue Werbung 2019

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

  • PHP - SQL Query löscht nicht mehrere Werte, trotz foreach-Schleife?

    Hey, Ich baue eine Todo-Website, welche problemlos neue Einträge in die DB einfügen kann, und auch einzelne wieder löschen kann. Wenn ich nun allerdings versuche, mehrere zu löschen, wird trotzdem nur ein Entry gelöscht. Mein Form-Code ist folgender:


    HTML-Code:
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
    <div class="col s12">
              <div class="input-field inline">
                <input name="todo" type="text" class="validate">
                <label for="todo">Todo</label>
                   <input id="absenden" type ="submit" class ="btn waves-effect waves-light inline" value = "Hinzufügen"/>
              </div>
    </div>
    <ul id="Liste" class="collection z-depth-1">
      <li class="collection-header center"><h4>Todo-Liste</h4></li>
      <?php
      try {
        $db = new PDO("mysql:dbname=todo;host=localhost",
                            "root",
                            "");
      }catch (PDOException $e) {
        echo "Fehler: " . htmlspecialchars($e->getMessage());
        exit();
      }
        $stmt = $db->query("Select * from todo");
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
          echo "<li class='collection-item'>" . $row["text"] . "<label class='right'><input type='checkbox' name='entry[]'  value='". $row["id"]. "'> <span>Löschen</span></label> </li>" ;
        }
       ?>
    </ul>
    </form>
    Mein PHP-Skript zum Hinzufügen/Löschen so:

    PHP-Code:

    $isSet  
    = isset($_POST["todo"]);
    if(
    $isSet == 1) {
      
    $todo $_POST["todo"];
    }else {}


    if(
    $isSet == && $todo != "") {
    $sql "INSERT INTO todo(text) VALUES ('$todo');";
    $db->exec($sql);
    header("Refresh:0");
    }elseif (
    $isSet == && $todo == "") {
      if(isset(
    $_POST['entry'])) {
        foreach(
    $_POST["entry"] as $entry)
        echo 
    $entry ."<br>";
        
    $sql "DELETE FROM todo WHERE id = " $entry ";";
        
    $db->exec($sql);
        
    header("Refresh:0");
      }

    Ich hoffe jemand kann mir helfen

  • #2
    Huch, warum sind denn alle Code-Teile einzeilig? Das kann ich ja keinem hier an tun!

    Kommentar


    • #3
      Zitat von MrHappy Beitrag anzeigen
      Huch, warum sind denn alle Code-Teile einzeilig? Das kann ich ja keinem hier an tun!
      Ändere es.

      Kommentar


      • #4
        Zitat von Alf2016 Beitrag anzeigen
        Ändere es.
        Und wie? Ich habe oben nur auf "php" und "HTML Code" geklickt, und meinen Code in die Tags gepasted.

        Kommentar


        • #5
          Zitat von MrHappy Beitrag anzeigen
          Und wie? Ich habe oben nur auf "php" und "HTML Code" geklickt, und meinen Code in die Tags gepasted.
          Als mögliche Ursachen fallen mir ein:

          - Der verwendete Editor, aus dem der Code kopiert wurde.
          - Der verwendete Browser, mit dem der Code eingefügt wurde.

          Beides kannst du variieren.

          Kommentar


          • #6
            Zitat von hellbringer Beitrag anzeigen

            Als mögliche Ursachen fallen mir ein:

            - Der verwendete Editor, aus dem der Code kopiert wurde.
            - Der verwendete Browser, mit dem der Code eingefügt wurde.

            Beides kannst du variieren.
            Hat geklappt. danke!

            Kommentar


            • #7
              PHP-Code:
              if(isset($_POST['entry'])) {
                  foreach(
              $_POST["entry"] as $entry)
                  echo 
              $entry ."<br>";
                  
              $sql "DELETE FROM todo WHERE id = " $entry ";";
                  
              $db->exec($sql);
                  
              header("Refresh:0");
                } 
              Da fehlen geschweifte Klammern rund um den Teil, den du gerne in den foreach hättest. Im Moment ist nur der echo im foreach.

              Kommentar


              • #8
                Zitat von jonas3344 Beitrag anzeigen
                PHP-Code:
                if(isset($_POST['entry'])) {
                foreach(
                $_POST["entry"] as $entry)
                echo 
                $entry ."<br>";
                $sql "DELETE FROM todo WHERE id = " $entry ";";
                $db->exec($sql);
                header("Refresh:0");

                Da fehlen geschweifte Klammern rund um den Teil, den du gerne in den foreach hättest. Im Moment ist nur der echo im foreach.
                Oh Gott, wie peinlich. Das war tatsächlich der Grund.. darauf habe ich 0 geachtet, nachdem das echo ja wunderbar funktioniert hat Danke!

                Kommentar


                • #9
                  Und mach EINE Abfrage daraus, mit WHERE id IN(...). SQL in Schleifen ist immer eine schlechte Idee.
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar

                  Lädt...
                  X