Results 1 to 4 of 4

Thread: Datensätze löschen mit foreach Schleife

  1. #1
    dreamworker.de Experte
    Join Date
    02/2010
    Posts
    82

    Datensätze löschen mit foreach Schleife

    Hallo,

    ich habe folgendes Problem ich habe ein Formular erstellt, welches mir mehrere Datensätze anzeigt. Bei jedem Datensatz habe ich ein Kontrollkästchen welches man anklicken muss damit der Datensatz gelöscht wird. Doch es wird immer nur 1 Datensatz gelöscht trotz foreach Schleife. Ich hoffe ihr könnt mir da helfen und vielen Dank schon einmal im vorraus.

    Hier der Formularcode:

    PHP Code:
    <?php
         $var 
    "0";    
         if(
    $totalRows_pm != $var){ ?>
        <?php $k=0; do { ?>
          <li class="titel">
          <form name="pm_del" method="POST" action="configs/delete.php">
              <div>Nachricht von <?php echo $row_pm['userfrom']; ?> gesendet am <?php echo $row_pm['datum']; ?> um <?php echo $row_pm['zeit']; ?></div>
              <div class="text">
                <h4><?php echo $row_pm['betreff']; ?></h4>
                <?php echo nl2br($row_pm['nachricht']); ?>      </div><p></p>
                l&ouml;schen    <label class="form">
              <input name="del[<?=$k?>]" type="checkbox" id="del" value="<?php echo $row_pm['Id']; ?>">
              </label>
              <input type="hidden" name="MM_update" value="pm_akt">
              <input name="submit" type="submit" id="submit" value="Aktualisieren">
            </form>
            <?php $k++; } while ($row_pm mysql_fetch_assoc($pm)); ?><?php }else{ echo "Sie haben noch keine Nachrichten."; }?>
    und hier der code der delete.php:

    PHP Code:
    <?php require_once('../Connections/cms.php'); ?>
    <?php
    if (!function_exists("GetSQLValueString")) {
    function 
    GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
    {
      
    $theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

      
    $theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

      switch (
    $theType) {
        case 
    "text":
          
    $theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
          break;    
        case 
    "long":
        case 
    "int":
          
    $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case 
    "double":
          
    $theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
          break;
        case 
    "date":
          
    $theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
          break;
        case 
    "defined":
          
    $theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
          break;
      }
      return 
    $theValue;
    }
    }
    if(
    is_array($_POST['del']))
    {
    foreach (
    $_POST['del'] as $key => $wert) {
    if ((isset(
    $_POST['del'])) && ($_POST['del'] != "")) {
      
    $deleteSQL sprintf("DELETE FROM pm_system WHERE Id=%s",
                           
    GetSQLValueString($wert"int"));

      
    mysql_select_db($database_cms$cms);
      
    $Result1 mysql_query($deleteSQL$cms) or die(mysql_error());
    }
    }
    }
      
    $deleteGoTo "../index.php?site=pmar";
      if (isset(
    $_SERVER['QUERY_STRING'])) {
        
    $deleteGoTo .= (strpos($deleteGoTo'?')) ? "&" "?";
        
    $deleteGoTo .= $_SERVER['QUERY_STRING'];
      }
      
    header(sprintf("Location: %s"$deleteGoTo));
    ?>
    mfg noobylishes

  2. #2
    waldfex
    Gast

    AW: Datensätze löschen mit foreach Schleife

    Hi,

    hast du dir denn schon einmal die übergebenen Werte zur Kontrolle vor der Verarbeitung mit print_r() oder vardump() ausgeben lassen!?

    Grundsätzlich solltest du beachten, dass Checkboxen nicht übertragen werden, wenn Sie nicht aktiviert wurden. dadurch kannst du dir den Komplex mit isset() ... vereinfachen.
    In deiner jetzigen Scriptabfolge kommt die Abfrage eh zu spät! Ist kein DS zum Löschen ausgewählt, dürfte is_array($_POST['del']) eh eine Warnung werfen, was unschön aussieht und bei Sessions zu einem Fehler führen kann.

    Anstelle von (isset($_POST['del'])) && ($_POST['del'] != "") einfacher mit (!(empty($_POST['del'])) arbeiten.

    Die zu löschenden IDs in einem String sammeln und dann über eine einzige DELETE-Anweisung löschen (... WHERE Id IN ('....'))

    Die $row_pm['Id'] gleich als Array-Schlüssel einsetzen, spart den Zähler!

    Allgemein sei noch der Hinweis gestattet: Auf die PHP-Shorttags zu verzichten. Das kann je nach Serverkonfiguration auf einigen Servern Probleme bereiten:

    Quote Originally Posted by PHP-Manual
    Hinweis: Die Verwendung der Short-Tags sollten Sie vermeiden, wenn Sie Applikationen oder Bibliotheken entwickeln, die für die Weitergabe oder den Einsatz auf nicht Ihrer Kontrolle unterstehenden PHP-Servern bestimmt sind, da es sein kann, dass Short-Tags auf dem Zielsystem nicht unterstützt werden. Um portablen, weiterverteilbaren Code zu haben, verwenden Sie keine Short-Tags.
    Siehe auch: http://de2.php.net/manual/de/ini.cor...short-open-tag

    Gruß Fex

  3. #3
    dreamworker.de Experte
    Join Date
    02/2010
    Posts
    82

    AW: Datensätze löschen mit foreach Schleife

    Hallo, danke erst einmal für deine Tips habe immoment leider wenig Zeit, darum auch erst die so späte Rückmeldung. Ich habe versucht deine Sachen umzusetzen, doch es wird immer noch nur ein Datensatz gelöscht und ich finde immer noch keine Lösung.

    Hier der Code der delete.php

    PHP Code:
    <?php require_once('../Connections/cms.php'); ?>
    <?php
    if (!function_exists("GetSQLValueString")) {
    function 
    GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
    {
      
    $theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

      
    $theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

      switch (
    $theType) {
        case 
    "text":
          
    $theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
          break;    
        case 
    "long":
        case 
    "int":
          
    $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case 
    "double":
          
    $theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
          break;
        case 
    "date":
          
    $theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
          break;
        case 
    "defined":
          
    $theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
          break;
      }
      return 
    $theValue;
    }
    }
    foreach (
    $_POST['del'] as $key => $wert) {
    (!(empty(
    $_POST['del'])) {
      
    $deleteSQL sprintf("DELETE FROM pm_system WHERE Id=%s",
                           
    GetSQLValueString($wert"int"));

      
    mysql_select_db($database_cms$cms);
      
    $Result1 mysql_query($deleteSQL$cms) or die(mysql_error());
    }
    }
      
    $deleteGoTo "../index.php?site=pmar";
      if (isset(
    $_SERVER['QUERY_STRING'])) {
        
    $deleteGoTo .= (strpos($deleteGoTo'?')) ? "&" "?";
        
    $deleteGoTo .= $_SERVER['QUERY_STRING'];
      }
      
    header(sprintf("Location: %s"$deleteGoTo));
      }
    ?>
    und hier der vom Formular:

    PHP Code:
    <?php
         $var 
    "0";    
         if(
    $totalRows_pm != $var){ ?>
        <?php do { ?>
          <li class="titel">
          <form name="pm_del" method="POST" action="configs/delete.php">
              <div>Nachricht von <?php echo $row_pm['userfrom']; ?> gesendet am <?php echo $row_pm['datum']; ?> um <?php echo $row_pm['zeit']; ?></div>
              <div class="text">
                <h4><?php echo $row_pm['betreff']; ?></h4>
                <?php echo nl2br($row_pm['nachricht']); ?>      </div><p></p>
                l&ouml;schen    <label class="form">
              <input name="del[<?php echo $row_pm['Id']; ?>]" type="checkbox" id="del" value="<?php echo $row_pm['Id']; ?>">
              </label>
              <input type="hidden" name="MM_update" value="pm_akt">
              <input name="submit" type="submit" id="submit" value="Aktualisieren">
            </form>
            <?php } while ($row_pm mysql_fetch_assoc($pm)); ?><?php }else{ echo "Sie haben noch keine Nachrichten."; }?>
    mfg noobylishes

  4. #4
    dreamworker.de Beginner
    Join Date
    04/2015
    Posts
    1

    Re: Datensätze löschen mit foreach Schleife

    Anzeigen:
    Webhosting ab 3,99 €
    ich stehe mal wieder vor einem kleinen Problem. Meine News werden in einer MySQL Datenbank abgespeichert und ich möchte diese nun auslesen und zu einem RSS Feed zusammen basteln.lean six sigma
    Es ist soweit auch alles in Ordnung, allerdings enthalten einige News-Artikel oder auch Titel Sonderzeichen, die das XML Dokument nicht verarbeiten kann.
    Last edited by Tripple26; 20.04.2015 at 15:16.

Similar Threads

  1. Datensätze (Bilder) löschen per Kontrollkästchen
    By anotherworld in forum Serverseitige Programmierung
    Replies: 3
    Last Post: 12.02.2010, 23:10
  2. Dynamisch: Fehler in do while Schleife
    By Shortman in forum Adobe Dreamweaver
    Replies: 8
    Last Post: 02.12.2008, 12:37
  3. mit Phakt Datensätze löschen ( PHP )
    By scottyboy in forum Serverseitige Programmierung
    Replies: 2
    Last Post: 09.04.2002, 15:17
  4. Dynamisch: Automatisch Datensätze löschen
    By thomasroth in forum Adobe Dreamweaver
    Replies: 3
    Last Post: 12.10.2001, 15:30

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •