Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL DELETE From funktioniert nicht - Warum ?

Einklappen

Neue Werbung 2019

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

  • MySQL DELETE From funktioniert nicht - Warum ?

    Hallo Zusammen,

    ich habe eine Userliste in MySQL angelegt und möchte nun alle User mit Id Name und Mailadresse ausgeben lassen. Das klappt auch schon wunderbar, nur weiß ich noch nicht wie ich es umsetzen soll, dass man die Checkboxen anklickt von den Usern, die man löschen möchte und die User dann auch gelöscht werden. Ich habe es folgendermaßen schon probiert:

    1.php:
    PHP-Code:
     <?php 
    include("config.php"); 
    mysql_connect($dbhost$dbuser$dbpass); 
    mysql_select_db($dbname); 

    $abfrage "SELECT * FROM ".$dbprefix."_user ORDER BY id"
    $ergebnis mysql_query($abfrage); 
    ?> 
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    <?php echo '<table border="0" cellspacing="0" cellpadding="0">'
    while(
    $row mysql_fetch_object($ergebnis)) 
        { 
        echo 
    '<tr><td align="left">'.$row->id.'.</td>'
        echo 
    '<td align left><input type="checkbox" name="loeschen[]" value="">&nbsp;</td>'
        echo 
    '<td align="left">'.$row->name.'&nbsp;&nbsp;</td>'
        echo 
    '<td align="left">'.$row->mail.'</td>'
        echo 
    '</tr>'
        } 
    echo 
    '</table><input type="hidden" value="1" name="t"><input type="submit" value="Delete" name="submit"></form>'

    $delete[] = $_POST['loeschen[]']; 
    $send $_POST['t']; 
    if (
    $send '1'

    foreach (
    $delete as $value

        
    $deltext "DELETE FROM ".$dbprefix."_user WHERE id = '".$value."'"
        
    $del mysql_query($deltext); 


    mysql_close(); 
    ?>
    Wo liegt mein Fehler ?

    Vielen Dank im Voraus
    Gruß
    Repli


  • #2
    Hallo und willkommen im Forum!

    Als erstes das hier auf alle Fälle vermeiden weil XSS anfällig!

    PHP-Code:
    <?php echo $_SERVER['PHP_SELF']; ?>
     
    //so schreiben
     
    <?php echo htmlentities($_SERVER['SCRIPT_NAME']); ?
    oder das action Atribut einfach leer lassen!

    Zum 2 machst du mit deinem hidden Feld was falsch


    <input type="hidden" value="1" name="t">

    Da muss die id aus der DB rein zum Beispiel so

    <input type="hidden" value="<?php echo $row->id ?>" name="t">

    Weil du willst ja nach id löschen,du hast aber 1 im value drin stehen gehabt und wenn dann aus der DB ein anderer Wert als 1 auftritt dann wird nichts mehr gelöscht.

    Dein delete Statement hat noch einen Fehler. Du darfst nicht nach dem value Wert löschen musst den Namen des hidden Feldes dazu verwenden

    PHP-Code:
    //falsch
    $deltext "DELETE FROM ".$dbprefix."_user WHERE id = '".$value."'"
     
    //richtig
    $deltext "DELETE FROM ".$dbprefix."_user WHERE id = '".$_POST['t']."'"
    Und das hidden Feld musst auch mit in die while Schleife rein schreiben sonst kannst nicht mehrere Datensätze löschen!
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de

    Kommentar


    • #3
      Okay schon mal vielen Dank, habe versucht deine Verbesserungen so gut wie es geht umzusetzen, doch es klappt immer noch nicht

      1.php
      PHP-Code:
      <?php
      include("config.php");
      mysql_connect($dbhost$dbuser$dbpass);
      mysql_select_db($dbname);

      $abfrage "SELECT * FROM ".$dbprefix."_user ORDER BY id";
      $ergebnis mysql_query($abfrage);

      echo 
      '<form action="" method="post"><table border="0" cellspacing="0" cellpadding="0">';
      while(
      $row mysql_fetch_object($ergebnis))
          {
          echo 
      '<tr><td align="left">'.$row->id.'.</td>';
          echo 
      '<input type="hidden" value="<?php echo $row->id ?>" name="t">';
          echo 
      '<td align left><input type="checkbox" name="loeschen[]" value="">&nbsp;</td>';
          echo 
      '<td align="left">'.$row->name.'&nbsp;&nbsp;</td>';
          echo 
      '<td align="left">'.$row->mail.'</td>';
          echo 
      '</tr>';
          }
      echo 
      '</table><input type="hidden" value="1" name="st"><input type="submit" value="Delete" name="submit"></form>';

      $delete[] = $_POST['loeschen[]'];
      $send $_POST['st'];
      if (
      $send '1')
      {
      foreach (
      $delete as $value)
      {
          
      $deltext "DELETE FROM ".$dbprefix."_user WHERE id = '".$_POST['t']."'";
          
      $del mysql_query($deltext);
      }
      }
      mysql_close();
      ?>
      Wo liegt denn jetzt mein Fehler ?

      Kommentar


      • #4
        Schaue dir mal diese Zeile an.

        echo '<input type="hidden" value="<?php echo $row->id ?>" name="t">';

        Normalerweise müsste PHP dir eine Fehlermeldung bringen!

        Du müsstest deiner Checkbox auch einen Value geben zum Beispiel mit 1 und eine IF Abfrage machen wo du sagst nur die angehakten sollen gelöscht werden!
        Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
        http://www.lit-web.de

        Kommentar


        • #5
          Stimmt, da war noch ein Fehler! Habe ihn ausgebessert und kann mit folgendem Code jetzt immer einzeln löschen.

          Mein Problem jetzt: Ich muss die Seite mit F5 refreshen um zu sehen, dass der User gelöscht wurde und ich kann nicht mehrere User löschen.

          Wo ist mein Fehler ?

          1.php:
          PHP-Code:
          <?php
          include("config.php");
          mysql_connect($dbhost$dbuser$dbpass);
          mysql_select_db($dbname);

          $abfrage "SELECT * FROM ".$dbprefix."_user ORDER BY id";
          $ergebnis mysql_query($abfrage);

          echo 
          '<form action="" method="post"><table border="0" cellspacing="0" cellpadding="0">';
          while(
          $row mysql_fetch_object($ergebnis))
              {
              echo 
          '<tr><td align="left">'.$row->id.'.</td>';
              echo 
          '<input type="hidden" value="'.$row->id.'" name="t">';
              echo 
          '<td align left><input type="checkbox" name="loeschen[]" value="">&nbsp;</td>';
              echo 
          '<td align="left">'.$row->name.'&nbsp;&nbsp;</td>';
              echo 
          '<td align="left">'.$row->mail.'</td>';
              echo 
          '</tr>';
              }
          echo 
          '</table><input type="hidden" value="1" name="st"><input type="submit" value="Delete" name="submit"></form>';

          $delete[] = $_POST['loeschen[]'];
          $send $_POST['st'];
          if (
          $send '1')
          {
          foreach (
          $delete as $value)
          {
              
          $deltext "DELETE FROM ".$dbprefix."_user WHERE id = '".$_POST['t']."'";
              
          $del mysql_query($deltext);
          }
          }
          mysql_close();
          ?>

          Kommentar


          • #6
            Mach da mal ein richtiges Affenformular draus. Script über dem HTML Teil und das Formular ruft beim Absenden die gleiche Seite auf.
            Im PHP-Teil machst du eine Abfrage, ob eine ID gePOSTet wurde, und mit der nimmst du den Datensatz dann raus. Danach werden die restlichen Sätze wieder unten angezeigt und du kannst weitere löschen.

            Infos zum Them Affenformular findest du in Wikipedia und über die Forensuchfunktion.
            PHP-Code:
            if ($var != 0) {
              
            $var 0;

            Kommentar


            • #7
              <input type="hidden" value="'.$row->id.'" name="t">
              Dies wird bei jedem Schleifendurchlauf ueberschrieben.

              <input type="checkbox" name="loeschen[]" value="">
              Was soll das?

              Bitte bau dir ein Affenformular, du stocherst doch nur rum und weisst eigentlich garnicht wie HTML-Formulare funktionieren.
              "Mein Name ist Lohse, ich kaufe hier ein."

              Kommentar


              • #8
                Ich sehe noch keinen Sinn im Affenformular! Was genau soll mir diese Struktur bringen? Denn das Formular komplett in HTML aufzubauen macht für mich keinen Sinn, da doch in der while-Schleife der größte Teil des Formulars mit ID, Name und Mailadresse gefüllt werden. Das wäre doch quasie der HTML-Teil des Affenformulars und danach beginnt der PHP Teil.

                Kommentar


                • #9
                  Zitat von Repli Beitrag anzeigen
                  Mein Problem jetzt: Ich muss die Seite mit F5 refreshen um zu sehen, dass der User gelöscht wurde.
                  Das kannst du mit einer einfachen header("Location:"); abschaffen,da wirst authomatisch wieder umgeleitet auf die selbe Seite und sie wird neu geladen!
                  Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                  http://www.lit-web.de

                  Kommentar


                  • #10
                    Danke an alle, die mir hier wirklich weiter geholfen haben.
                    Habe es jetzt endlich geschafft und bin fertig alles funktioniert
                    Habe es jetzt nur etwas anders gelöst.

                    1.php:
                    PHP-Code:
                    <?php
                    include("config.php");
                    mysql_connect($dbhost$dbuser$dbpass);
                    mysql_select_db($dbname);

                    $abfrage "SELECT * FROM ".$dbprefix."_user ORDER BY id";
                    $ergebnis mysql_query($abfrage);
                    ?>
                    <form action="" method="post"><table border="0" cellspacing="0" cellpadding="0">
                    <?php 
                    while($row mysql_fetch_object($ergebnis))
                        {
                        echo 
                    '<tr><td align="left">'.$row->id.'.</td>';
                        echo 
                    '<td align left><input type="checkbox" name="t[]" value="'.$row->id.'">&nbsp;</td>';
                        echo 
                    '<td align="left">'.$row->name.'&nbsp;&nbsp;</td>';
                        echo 
                    '<td align="left">'.$row->mail.'</td>';
                        echo 
                    '</tr>';
                        } 
                    ?>
                    </table><input type="hidden" value="1" name="st"><input type="submit" value="Delete" name="submit"></form>
                    <?php 
                    $delete 
                    $_POST["t"];
                    $send $_POST['st'];
                    if (
                    $send 1)
                    {
                        
                    $anzahl=count($delete);
                        for(
                    $i=0;$i<$anzahl;$i++)
                        {
                            
                    $deltext "DELETE FROM ".$dbprefix."_user WHERE id = '".$t[$i]."'";
                            
                    $del mysql_query($deltext);
                        }
                        if(
                    $i $anzahl)
                        {
                            echo 
                    '<head><meta http-equiv="refresh" content="0; url=delete.php"></head>';
                        }
                    }
                    mysql_close();
                    ?>
                    Vielen Dank nochmals
                    Gruß
                    Repli

                    Kommentar

                    Lädt...
                    X