Lösch-Buttons

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

  • Lösch-Buttons

    Hallo,

    ich habe hier letztens schon etwas gefragt zur Ausgabe meines Datenbankinhaltes bzw. Session Variablen. Nun möchte ich bei meiner
    Ausgabe immer einen Lösch-Button hinzufügen, der wenn man auf ihn
    klickt immer den dazugehörigen Eintrag in der Datenbank löscht.

    Also der Befehl des Löschens an sich ist kein Problem, nur woher weiß
    der Button, welchen Eintrag er löschen muss. Ich bin dann auf die Idee
    gekommen, man könnte verwenden. Also inkrementiert man beim Auslesen
    in der While-Schleife eine Variable (z.B. x), um die Einträge zu zählen.
    Diese werden dann als Index verwendet. Dann als Einträge werden die
    ids eingefügt.

    Nur ein Problem: Auf diese Art braucht man unendlich viele if-Anfragen und
    man weiß ja nicht wieviele genau, denn wenn Fragen hinzugefügt bzw.
    gelöscht werden müsste man ja immer den Code per Hand ändern,
    ist es möglich, diese if-Anfragen auch in Schleifen zu erstellen?

    Also nun erstmal zum Code, nur das Auslesen sieht momentan so aus:
    PHP-Code:
             if(isset($_POST['fertig3']))
             {
              
    $sql "SELECT frage, antwort FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";

              
    $table mysql_query($sql);

              echo 
    "<pre>";

              while (
    $row mysql_fetch_assoc($table))
              {
                
    print_r($row);
                echo 
    "";
              }

              echo 
    "</pre>";

              
    mysql_close($db);
             } 
    Wenn man nun die IDs in Arrays speichert sieht es so aus:
    PHP-Code:
             if(isset($_POST['fertig3']))
             {
              
    $sql "SELECT frage, antwort FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";
              
    $ids "SELECT frid FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";

              
    $table mysql_query($sql);

              
    $iderg mysql_query($ids);

              
    $idarray mysql_fetch_row($iderg); //in Array umwandeln

              
    echo "<pre>";

              
    $zaehler 0;

              while (
    $row mysql_fetch_assoc($table))
              {
                
    print_r($row);
                echo 
    "";
                echo 
    "<p><input type='submit' name='fertig3' value='Loeschen' size ='20' /></p>";
                
    $zaehler++;
              }

              echo 
    "</pre>";

              
    mysql_close($db);
             } 
    Nun habe ich nurnoch 2 Probleme:

    1. Wie gesagt die if-Abfragen, kann man diese auch mit Schleifen lösen?
    2. Wie verschickt der Button den Wert? Also wenn ich keinen Denkfehler
    mache, muss der Button bzw. es muss ja ein Formular sein die
    dazugehörige Zaehler-Variable als Index verschicken.

    AUSSER: Mir ist gerade während des Schreibens eine Idee gekommen^^
    Wenn man die if-Abfragen so erstellen kann, könnte man ja in diese
    über die Schleife schon den Korrekten Wert eintragen.

    Also das ist alles ein wenig kompliziert ^^ und ich bin selber auch schon verwirrt xD bin über Hilfe und auch andere Vorschläge dankbar!

    Mit freundlichen Grüßen

  • #2
    Da gibt es zwei Möglichkeiten:

    1. für jeden Eintrag in der DB ein Formular mit hidden-Feld und Löschen-Buttton. Im hidden steht dann die ID des Eintrags

    2. Ein Formular mit nur einem(!) Löschen-Button und Checkboxen. Die werden dann z.B. so aufgebaut:
    HTML-Code:
    <input type="checkbox" name="delete[]" value="die_id_des_datensatzes" />
    Anschließend hast du alle Lösch-Ids im Array $_POST['delete']. Das musst dann einfach nur in einer Schleife durchlaufen.

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Hier mal ein Beispiel mit ImageButtons, da kannst du dir einen Teil der Auswertung abschauen.
      PHP-Code:
      <?php
      error_reporting
      (E_ALL);
      ini_set('display_errors'TRUE);
      ?>
      <form action="" method="post">
        <input type="image" name="image[1][]" value="egal" src="btn.jpg" title="ein Button"/>
        <input type="image" name="image[2][]" value="egal" src="btn.jpg" title="ein Button" />
        <input type="image" name="image[3][]" value="egal" src="btn.jpg" title="ein Button" />
        <input type="image" name="image[4][]" value="egal" src="btn.jpg" title="ein Button" />
        <input type="image" name="image[rot][]" value="egal" src="btn.jpg" title="ein Button" />
      </form>
      <hr>
      <h1>Auswertung</h1>
      <?php
          
      if(!empty($_POST['image']))
          {
            
      $Button array_pop(Array_keys($_POST['image']));
            echo 
      " Button $Button geklickt <br>";
            echo 
      " X POS: {$_POST['image'][$Button][0]} <br>";
            echo 
      " Y POS: {$_POST['image'][$Button][1]} <br>";
            if(isset(
      $_POST['image'][$Button][2]))
            {
              echo 
      "Value: {$_POST['image'][$Button][2]} <br>";
              echo 
      "Vorsicht: Inkompatibles FF/Gecko Viech.<br>";
            }
          }else
          {
            echo 
      "Kein Image Button geklickt.";
          }
      ?>
      <hr>
      <pre>
      <h1>Post Daten</h1>
       <?php
          var_dump
      ($_POST);
       
      ?>
      </pre>
      Wir werden alle sterben

      Kommentar


      • #4
        Hallo!
        Also brauche ich garkeine Arrays, oder?
        Ich möchte das gerne mit den Buttons machen. Also bisher sieht das bei mir
        so aus:

        PHP-Code:
                 if(isset($_POST['fertig3']))
                 {
                  
        $sql "SELECT frage, antwort FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";
                  
        $ids "SELECT frid FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";

                  
        $table mysql_query($sql);

                  
        $iderg mysql_query($ids);

                  
        $idarray mysql_fetch_row($iderg); //in Array umwandeln

                  
        echo "<pre>";

                  
        $zaehler 0;

                  while (
        $row mysql_fetch_assoc($table))
                  {
                    
        print_r($row);
                    echo 
        "";

                    echo 
        "<form action='' target='_self' method='post' name='formular_$zaehler' target='_self'>";
                    echo 
        "<input type='hidden' name='id_$zaehler' value='idarray[$zaehler]'>";
                    echo 
        "<p><input type='submit' name='fertig_$zaehler' value='Loeschen' size ='20' /></p>";
                    echo 
        "</form>";

                    
        $zaehler++;
                  }

                  echo 
        "</pre>"
        Das ist erstmal die reine Ausgabe mit den Buttons, dabei habe ich gleich
        eine Frage: Ich muss ja die Formulare bennenen, kann ich in diese
        Namen die Variablen einfügen, z.B. wie in
        name='fertig_$zaehler' ? Denn so hätte ich das jetzt in C/C++ gelöst^^

        Es scheint zumindest zu funktionieren, denn einen Error bekomme ich erst
        ab Zeile 106:

        Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\Loeschen.php on line 106

        Nach dem obrigen Code folgt nämlich sofort meine Erzeugung der if-Abfragen,
        wo dieser Error auftritt:
        PHP-Code:
                  for($x2 = 0; $x2 <= zaehler; $x2++)
                  {
                    echo "<? <br>";
                    echo "if(isset($_POST['fertig_$x2'])) <br>";
                    echo "{ <br>";
                    echo " // DELETE FROM WHERE ID = '{$_POST['formular_$x2']}' <br>";
                    echo "}?>";
                  }

                  mysql_close($db);
                 }
        So, woher kommt denn dieser Error? Und würde der Rest eigentlich dann
        so funktionieren?

        Mit freundlichen Grüßen

        Kommentar


        • #5
          Was ist Zeile 105?
          Ich sehe weniger als 106 Zeilen.

          Dynamisch generierter PHP Code? Wozu? Lass es!
          Wir werden alle sterben

          Kommentar


          • #6
            Also Zeile 105 ist bei mir[COLOR=#000000][COLOR=#CC0000]
            [/COLOR][/COLOR]
            PHP-Code:
            echo "if(isset($_POST['fertig_$x2'])) <br>"
            [COLOR=#000000][COLOR=#CC0000]

            [COLOR=Black]Ich brauche den Code, da ich ja so viele Formulare erzeuge,
            wie Datensätze in der Datenbank sind und deshalb brauche ich
            ja auch genausoviele if-Abfragen, ob der jeweilige
            Button gesetzt wurde.
            [/COLOR]

            [/COLOR][/COLOR]

            Kommentar


            • #7
              und deshalb brauche ich
              ja auch genausoviele if-Abfragen, ob der jeweilige
              Button gesetzt wurde.
              Unsinn.
              Wir werden alle sterben

              Kommentar


              • #8
                Wie soll ich es dann machen?
                Wenn ich kein if habe, führt er den Befehl ja sofort aus
                und löscht mir jeden Eintrag.

                Kommentar


                • #9
                  Das ist aber kein Grund für selbstmodifizierenden Code.
                  Der ist nicht ohne Grund verpönt.

                  Sowas:
                  $_POST['fertig_$x2']
                  Finde ich schon fast ekelig!
                  Machs dir doch besser mit Arrays.

                  Tipp:
                  In meinen Code (der mit den ImageButtons) findest du eine Lösung um heraus zu finden welcher Button gedrückt wurde. Ohne ifs dynamisch zu erstellen
                  Zuletzt geändert von combie; 12.02.2012, 17:06.
                  Wir werden alle sterben

                  Kommentar


                  • #10
                    Okay, also wenn ich das richtig verstehe, hast du für die Namensgebung
                    deiner Buttons einen Array vewendet, und schaust in der if-Abfrage,
                    ob in irgendeinem Element des Arrays etwas drinsteht und wenn ja,
                    werden die Befehle dort abgearbeitet.

                    Hast du den Array irgendwo "deklariert", also
                    PHP-Code:
                    $image = array(); 
                    oder so, oder kann man es einfach direkt in das Formular schreiben,
                    also name='image[][]' ?

                    Also wenn ich das jetzt auf meinen Code übertrage, komme ich auf folgende
                    Lösung: Einen Array für die Namen, und als Value übergebe ich den Wert
                    der im Array aus dem mysql_fetch_row steht.
                    PHP-Code:
                             if(isset($_POST['fertig3']))
                             {
                              
                    $sql "SELECT frage, antwort FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";
                              
                    $ids "SELECT frid FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";

                              
                    $table mysql_query($sql);

                              
                    $iderg mysql_query($ids);

                              
                    $idarray mysql_fetch_row($iderg); //in Array umwandeln

                              
                    echo "<pre>";

                              
                    $zaehler 0;

                              while (
                    $row mysql_fetch_assoc($table))
                              {
                                
                    print_r($row);
                                echo 
                    "";

                                echo 
                    "<p><input type='submit' name='fertig_[$zaehler]' value='$idarray[$zaehler]' size ='20' title='Loeschen'/></p>";

                                
                    $zaehler++;
                              }

                              echo 
                    "</pre>";

                              if(!empty(
                    $_POST['fertig']))
                              {
                                
                    $Button array_pop(Array_keys($_POST['fertig']));
                                
                    // DELETE WHERE ID = $Button
                                
                    mysql_close($db);
                              }

                             } 
                    Aber was ich noch nicht ganz verstehe, wird bei einem Drücken des Buttons
                    der Wert in den fertig bzw. in den image Array geschrieben? Denn anders
                    weiß ich nicht, warum man diesen Array überprüfen sollte. Also wenn
                    ich zum Beispiel image[1][] drücke und der Wert ist z.B. 500,
                    sieht dieses Element dann so aus: image[1][500] ?

                    Mit freundlchen Grüßen

                    Kommentar


                    • #11
                      oder kann man es einfach direkt in das Formular schreiben,
                      also name='image[][]' ?
                      Ja!
                      PHP bastelt dir das dann korrekt in $_POST zusammen.

                      Bei einfachen SubmitButtons zum löschen mit ID Übergabe sollte das dann so aussehen:
                      name='delete[436]'
                      Wobei 436 dann die zu löschende id währe...


                      Also wenn
                      ich zum Beispiel image[1][] drücke und der Wert ist z.B. 500,
                      sieht dieses Element dann so aus: image[1][500] ?
                      Hmmm....
                      Nee, das ist ein Sonderfall der Imagebuttons.
                      PHP erstellt dann automatisch ein Array mit x,y,und evtl. Value
                      Aber das willst du ja nicht.

                      Bei Standard Submitbuttons wird das Value als Beschriftung benutzt. Der Weg ist verdorben, da du da bestimmt sowas wie "Löschen" (und nicht "746") sehen möchtest. Darum muss ein Umweg über den Array Key gegangen werden.

                      Also mein Tipp:
                      <input type='submit' name='delete[467]' value='löschen' ..........

                      Auswertung:
                      PHP-Code:
                      if(isset($_POST['delete'])&&is_array($_POST['delete']))
                      {
                         
                      $zulöschendeid array_pop(array_keys($_POST['delete']));
                          
                      // lösche Datensatz mit ID =  $zulöschendeid

                      *ungetestet*
                      Zuletzt geändert von combie; 12.02.2012, 18:54.
                      Wir werden alle sterben

                      Kommentar


                      • #12
                        Hallo,

                        also ich habe das jetzt versucht, nur wenn ich auf den Button drücke
                        passiert nichts. Ich habe dieses if auf 2 verschiedene Arten probiert.

                        PHP-Code:
                                 if(isset($_POST['fertig3']))
                                 {
                                  
                        $sql "SELECT frage, antwort FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";
                                  
                        $ids "SELECT frid FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";

                                  
                        $table mysql_query($sql);

                                  
                        $iderg mysql_query($ids);

                                  
                        $idarray mysql_fetch_row($iderg); //in Array umwandeln

                                  
                        echo "<pre>";

                                  
                        $zaehler 0;

                                  while (
                        $row mysql_fetch_assoc($table))
                                  {
                                    
                        print_r($row);
                                    echo 
                        "";

                                    echo 
                        "<p><input type='submit' name='delete[iderg[$zaehler]]' value='loeschen'/></p>";

                                    
                        $zaehler++;
                                  }

                                  echo 
                        "</pre>";
                                  if(!empty(
                        $_POST['delete']))
                                  {
                                    
                        $zuloeschendeid array_pop(array_keys($_POST['delete']));
                                    
                        $loesch "DELETE * WHERE klassenarbeiten.frahen.frid = $zuloeschendeid";
                                    echo 
                        "test";
                                  }

                                 } 
                        die andere Methode:
                        PHP-Code:
                                  if(isset($_POST['delete'])&&is_array($_POST['delete']))
                                  {
                                    
                        $zuloeschendeid array_pop(array_keys($_POST['delete']));
                                    
                        $loesch "DELETE * WHERE klassenarbeiten.frahen.frid = $zuloeschendeid";
                                    echo 
                        "test";
                                  } 
                        Also das Problem ist, dass einfach nichts passiert, also wird die Bedingung
                        nicht erfüllt. Also ich nehme an es liegt an [COLOR=#000000][COLOR=#CC0000]name='delete[iderg[$zaehler]]'
                        [/COLOR][/COLOR]
                        Mit freundlichen Grüßen

                        Kommentar


                        • #13
                          Genau, das sieht falsch aus.
                          Wir werden alle sterben

                          Kommentar


                          • #14
                            Hallo,

                            leider funktioniert es immernoch nicht richtig, also ich habe einen anderen
                            Fehler gefunden und zwar wurden die IDs nicht richtig übernommen, das
                            habe ich jetzt gefixt:

                            PHP-Code:
                            $iids "SELECT frid FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";

                            $ids mysql_query($iids);

                            while (
                            $zeile mysql_fetch_array($ids))
                                      {
                                        
                            array_push($idarray$zeile['frid']);
                                        echo 
                            $zeile['frid'];
                                        echo 
                            "<br>";
                                      } 
                            Aber kann man [COLOR=#000000][COLOR=#CC0000]name='delete[iderg[$zaehler]]'[/COLOR][/COLOR] nicht auf diese Weise schreiben?
                            Den eigentlich ist es doch so:
                            Der Zaehler ist ja am Anfang auf 0,
                            also wird beim 1. Button als name 'delete[Wert aus $idarray[0]]', in diesem
                            Fall ist dieser Eintrag bzw. die ID 1 'delete[1]' eingetragen, oder nicht?
                            Und muss man um an den Wert zu kommen nicht ein Formular erzeugen?

                            Mit freundlichen Grüßen

                            Kommentar


                            • #15
                              Variablen beginnen in PHP immer mit einem $
                              Wir werden alle sterben

                              Kommentar

                              Lädt...
                              X