Dynamisches löschen von Tabellen records

Braman

Mitglied
Moin :)

Ich versuche gerade Datensätze aus meinen Tabellen zu löschen, dies klappt auch, jedoch ist das alles sehr nutzerunfreundlich von der dynamik her. Nun habe ich nach einer dynamischen Lösung gesucht, mit welcher ich einzelne Datensätze löschen kann, ohne das ich auf delete.php geschickt zu werden und ohne die Page aktualisieren zu müssen, um die veränderte Tabelle zu sehen. Nun habe ich was von Javascript, AJAX und JQuery gelesen und mir einen Code zusammengebastelt, jedoch will dieser nicht ganz funktionieren. Da ich eigtl. Datensätze aus drei verschiedenen Tabellen in der Datenbank löschen will, habe ich mir als beispiel für das einfache Löschen eines Datensatzes einer einzigen Tabelle die Lieferantentabelle meiner Datenbank als beispiel genommen.

lieferant.php:

die Tabelle

PHP:
<table id="lieferanttbl">
<thead>

<th>lieferantID</th>
<th>Lieferantname</th>
<th>Kontakt</th>
<th>Mail</th>
<th>Bearbeiten</th>
<th>löschen</th>

</tr>
</thead>
<tbody>


<?php




    while($row=mysqli_fetch_array($lieferant)){

        ?>

        <tr>

       <td> <?php echo    $row['lieferantID']; ?>  </td>

       <td> <?php echo    $row['lieferantname']; ?>  </td>

       <td> <?php echo    $row['kontakt']; ?>  </td>

       <td> <?php echo    $row['mail']; ?>  </td>

       <td> <button class="btn-updateliefer"> <a href="updatelieferant.php? lieferantID=<?php print $row['lieferantID']; ?>&lieferantname=<?php print $row['lieferantname']; ?>
       &kontakt=<?php print $row['kontakt']; ?>&mail=<?php print $row['mail'];?>" class="btn-update"> ✓ </a> </button> </td>
      
      
       <td>  <button type="button" id="<?php echo $row['lieferantID']; ?>" class="delete-btn">delete</button></td>
    

 </tr>

<?php
    }

    }



}


Der javascript-Teil:

Javascript:
<script type="text/javascript" >
        $(function() {

            $(".delete-btn").click(function() {
                var del_id = $(this).attr("id");
                var info = {lieferantID: del_id};
                if (confirm("Are you sure?")) {
                    $.ajax({
                        type : "POST",
                        url : "delete.php", //URL to the delete php script
                        data : info,
                        success : function() {
                            setInterval('location.reload()', 1000);
                        }
                    });
                    $(this).parents(".record").animate("fast").animate({
                        opacity : "hide"
                    }, "slow");
                }
                return false;
            });
        });
 </script>


und die delete.php datei:

PHP:
$lieferantID=$_POST['lieferantID'];
$delete=mysqli_query($connection,"DELETE FROM 'lieferant' WHERE lieferantID='$lieferantID'");
$result = mysqli_query($delete) or die(mysqli_error());



Wenn ich in meiner Delete query die lieferantID eingebe, welche ich löschen will, dann funktioniert das löschen des Datensatzes auch. Dies bedeutet, dass ich die lieferantID nicht an meine delete.php richtig übergebe, jedoch komme ich nicht zur lösung des Problems.
Danke für jede Hilfe :)
 

Sempervivum

Erfahrenes Mitglied
In dem Javascript und bei der Übergabe des Parameters kann ich keinen Fehler entdecken. Im Abfragestring dürfen jedoch keine Hochkommas um den Tabellennamen stehen. Möglicher Weise hattest Du an die Backtics gedacht, dann müsste es aber so aussehen:
Code:
$delete=mysqli_query($connection,"DELETE FROM `lieferant` WHERE `lieferantID`='$lieferantID'");
Auch die Hochkommas um $lieferantID könnten falsch sein, das hängt aber vom Datentyp dieser Spalte ab: Ist er numerisch, dann ohne Hochkommas, ist es ein String, dann mit.
 

Braman

Mitglied
In dem Javascript und bei der Übergabe des Parameters kann ich keinen Fehler entdecken. Im Abfragestring dürfen jedoch keine Hochkommas um den Tabellennamen stehen. Möglicher Weise hattest Du an die Backtics gedacht, dann müsste es aber so aussehen:
Code:
$delete=mysqli_query($connection,"DELETE FROM `lieferant` WHERE `lieferantID`='$lieferantID'");
Auch die Hochkommas um $lieferantID könnten falsch sein, das hängt aber vom Datentyp dieser Spalte ab: Ist er numerisch, dann ohne Hochkommas, ist es ein String, dann mit.
Du hast vollkommen recht es lag an den Hochkommas, ich danke dir :')...

Wenn du schon da bist, ich hätte da zwei kleine Fragen noch ^^
Wie ich erwähnt hatte möchte ich eigtl Einträge mit aus 3 verschiednen Tabellen Löschen, wie übergebe ich das denn? Ich kann dem Button doch nur eine id zuweisen (?) bzw. muss ich das skript dann jeweils für jede neue ID neu schreiben oder kann man alles in einem rutsch verpacken?
Und wie bekomme ich es hin das sich die Tabelle alleine aktualisiert, ohne das ich sie Seite refreshen muss, mit :

Javascript:
success : function() {
                            setInterval('location.reload()', 1000);
                        }

Wird die Seite ja Aktualisiert, dabei muss ich dies ja aber auch erstmal bestätigen und Sinn der sache sollte eigtl sein, das man nicht darauf warten muss das sich die Seite "wirklich" refresht.

Ich hoffe ich hab mich verständlich ausgedrückt ^^
 

Sempervivum

Erfahrenes Mitglied
Nein, Du kannst das recht einfach in einem Rutsch verpacken: ID kann es natürlich nur eine geben aber Du kannst weitere Werte in einem data-Attribute ablegen:
Code:
<button type="button"
    id="<?php echo $row['lieferantID']; ?>"
    data-id2="<?php echo $die_zweite_id; ?>"
    data-id3="<?php echo $die_dritte_id; ?>"
    class="delete-btn">delete</button>
Und dann so auslesen:
Code:
            $(".delete-btn").click(function() {
                var del_id = $(this).attr("id");
                var del_id2 = $(this).data("id2");
                var del_id3 = $(this).data("id3");
                var info = {lieferantID: del_id, del_id2: del_id2, del_id3: del_id3};

Zu der Aktualisierung nach dem Löschen: So wie Du das jetzt im Code hast, ist es wirklich nicht optimal. Wenn Du die Einträge aus der Datenbank neu auslesen möchtest, kannst Du das in dem selben PHP-Skript delete.php tun und die HTML-Tabelle mit echo ausgeben. Dann steht sie im success-Callback als Parameter zur Verfügung und Du kannst die alte Tabelle durch die neue ersetzen.
Alternativ musst Du nicht unbedingt die ganze Tabelle aus der Datenbank neu auslesen sondern kannst, abhängig davon ob das Löschen im PHP erfolgreich war, eine Kennung mit echo ausgeben und im successs-Callback auswerten. Zeigt sie an, dass das Löschen erfolgreich war, dann die Zeile in der HTML-Tabelle löschen, andernfalls eine Fehlermeldung anzeigen.
 
Zuletzt bearbeitet:

Braman

Mitglied
So jetzt konnte ich es mal ausprobieren, doch leider will es nicht ganz funktionieren :(
So ist es doch richtig oder?:

PHP:
<td>  <button class="btn-deletee" type="button"
    id="<?php echo $row['bestellnr']; ?>"
    data-id2="<?php echo $row['warennr']; ?>"
    data-id3="<?php echo $row['kundeprojekt_id']; ?>" ></a></button></td>


Javascript:
<script type="text/javascript" >
        $(function() {
          $(".btn-deletee").click(function() {
                var del_id = $(this).attr("id");
                var del_id2 = $(this).data("id2");
                var del_id3 = $(this).data("id3");
                var info = {bestellnr: del_id, del_id2: del_id2, del_id3: del_id3};
                if (confirm("Are you sure?")) {
                    $.ajax({
                        type : "POST",
                        url : "delete.php", //URL to the delete php script
                        data : info,
                        success : function() {
                            setInterval('location.reload()', 1000);
                        }
                    });
                    $(this).parents(".record").animate("fast").animate({
                        opacity : "hide"
                    }, "slow");
                }
                return false;
            });
        });
 </script>

Und die delete.php nochmal zur sicherheit ^^:

PHP:
$kundeprojekt_id = $_POST['kundeprojekt_id'];
$delete=mysqli_query($connection,"DELETE FROM kunde_projekt WHERE kundeprojekt_id='$kundeprojekt_id'");
$result = mysqli_query($delete) or die(mysqli_error());


$warennr = $_POST['warennr'];
$delete=mysqli_query($connection,"DELETE FROM ware WHERE warennr='$warennr'");
$result2 = mysqli_query($delete) or die(mysqli_error());


$bestellnr = $_POST['bestellnr'];
$delete=mysqli_query($connection,"DELETE FROM bestellung WHERE bestellnr='$bestellnr'");
$result3 = mysqli_query($delete) or die(mysqli_error());

Und das mit der aktualisierung, kann ich die Tabelle wir schon gehabt auslesen lassen (aber nun in der delete.php) und muss diese dann in die
"success: function(){
}" lagern?
bzw. wie kann ich in dieser funktion darauf verweisen diese anzuzeigen/ auszulesen?^^
sorry für die vielen fragen aber in sachen JS hab ich sehr wenig ahnung :/
Und danke nochmal für deine hilfe! (y)
 

Sempervivum

Erfahrenes Mitglied
So ganz passt es noch nicht mit der Übergabe der Parameter:
var info = {bestellnr: del_id, del_id2: del_id2, del_id3: del_id3};
Was links vom Doppelpunkt steht, ist der Name, der im PHP der Schlüssel im $_POST ist, d. h. wenn Du so auf $_POST zugreifst:
$warennr = $_POST['warennr'];
musst Du auch in dem Objekt, das Du an $.ajax übergibst, diesen Namen verwenden:
var info = {bestellnr: del_id, warennr: del_id2, kundeprojekt_id: del_id3};
 

Sempervivum

Erfahrenes Mitglied
Was die Ausgabe betrifft: Mit diesem Code gibst Du ja im PHP den Körper der Tabelle aus:
Code:
<?php




    while($row=mysqli_fetch_array($lieferant)){

        ?>

        <tr>

       <td> <?php echo    $row['lieferantID']; ?>  </td>

       <td> <?php echo    $row['lieferantname']; ?>  </td>

       <td> <?php echo    $row['kontakt']; ?>  </td>

       <td> <?php echo    $row['mail']; ?>  </td>

       <td> <button class="btn-updateliefer"> <a href="updatelieferant.php? lieferantID=<?php print $row['lieferantID']; ?>&lieferantname=<?php print $row['lieferantname']; ?>
       &kontakt=<?php print $row['kontakt']; ?>&mail=<?php print $row['mail'];?>" class="btn-update"> ✓ </a> </button> </td>
   
   
       <td>  <button type="button" id="<?php echo $row['lieferantID']; ?>" class="delete-btn">delete</button></td>
 

</tr>

<?php
    }
    ?>
Alles was Du auf diese Weise ausgibst, findest Du im Parameter des success-Callback vor:
Code:
<script type="text/javascript" >
        $(function() {
          $(".btn-deletee").click(function() {
                var del_id = $(this).attr("id");
                var del_id2 = $(this).data("id2");
                var del_id3 = $(this).data("id3");
                var info = {bestellnr: del_id, warennr: del_id2, kundeprojekt_id: del_id3};
                if (confirm("Are you sure?")) {
                    $.ajax({
                        type : "POST",
                        url : "delete.php", //URL to the delete php script
                        data : info,
                        success : function(data) {
                            // Im Parameter data stehen die Ausgaben von delete.php
                            // zur Verfügung, d. h. in diesem Fall die Tabellenzeilen.
                            // Wir können sie in der Körper der Tabelle eintragen:
                            $('#lieferanttbl tbody').html(data);
                        }
                    });
                    $(this).parents(".record").animate("fast").animate({
                        opacity : "hide"
                    }, "slow");
                }
                return false;
            });
        });
</script>
 

Braman

Mitglied
So ganz passt es noch nicht mit der Übergabe der Parameter:
var info = {bestellnr: del_id, del_id2: del_id2, del_id3: del_id3};
Was links vom Doppelpunkt steht, ist der Name, der im PHP der Schlüssel im $_POST ist, d. h. wenn Du so auf $_POST zugreifst:
$warennr = $_POST['warennr'];
musst Du auch in dem Objekt, das Du an $.ajax übergibst, diesen Namen verwenden:
var info = {bestellnr: del_id, warennr: del_id2, kundeprojekt_id: del_id3};
Klappen will das damit auch nicht :|
Könnte es daran liegen das die warennr und die kundeprojekt_id foreign keys der Tabelle mit der bestellnr sind? die beide foreign key sind auf "delete on restrict" gestellt.

Benötige ich für die Tabellenausgabe im delete.php dann nicht die Select query, oder funktioniert das mit jS hierbei anders? ^^
 

Sempervivum

Erfahrenes Mitglied
Was die foreign keys betrifft, musste ich selber nachlesen:
Exact Meaning of MySQL's Foreign Key 'on delete restrict' Clause
ON DELETE RESTRICT means you can't delete a given parent row if a child row exists that references the value for that parent row. If the parent row has no referencing child rows, then you can delete that parent row.
Demnach musst Du die Zeilen, die die Referenzen enthalten, als erstes löschen, und dann die Zeile, auf die die Verweise gezeigt haben.
 

Neue Beiträge