• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Lösch Button für mysql Datensatz in Tabelle

BWDS

Neues Mitglied
Hallo,

An der Webseite an der ich gerade Baue, gibt es eine Tabelle, die Datensätze anzeigen soll. Nachdem der Datensatz von uns verarbeitet wurde, soll man ihn über einen Button Löschen können. Der Button existiert und funktioniert, er kann einzelne Datensätze löschen. Nur das Problem ist, er löscht die letzten Datensätze und nicht die Datensätze, die man über den Button auswählt. Ich hatte auch meine Probleme überhaubt den Code so zu schreiben, dabei hat mir ein anderes Thema geholfen: https://www.html.de/threads/loeschen-button-in-tabelle.56916/

Ich hoffe ihr könnt mir helfen, bzw. habt mich überhaubt verstanden. Ich Bedanke mich schon mal im vorhinein. Hier sind noch die Codes:

Der Code hier der ist die Tabelle

Code:
  <table class="table table-striped">
    <form action='delete.php' method="POST" >
    <thead class="thead-dark">
      <tr>
        <th>  </th>
        <th> Order ID </th>
        <th> Food ID </th>
        <th> Order Date </th>
        <th> Food Name </th>
        <th> Quantity </th>
        <th> Ordernumber </th>
        <th> actions </th>

      </tr>
    </thead>

    <?PHP
      //OUTPUT DATA OF EACH ROW
      while($row = mysqli_fetch_assoc($result)){
    ?>

  <tbody>
    <tr>
      <td> <span class="glyphicon glyphicon-menu-right"></span> </td>
      <td><?php echo $row["order_ID"]; ?></td>
      <td><?php echo $row["F_ID"]; ?></td>
      <td><?php echo $row["order_date"]; ?></td>
      <td><?php echo $row["foodname"]; ?></td>
      <td><?php echo $row["quantity"]; ?></td>
      <td><?php echo $row["b_numm"]; ?></td>
      <td>
      <input type='hidden' name='id' value="<?php echo $row['order_ID']; ?>">
      <input type="SUBMIT" name="delete" value="Loeschen">
      </td>

    </tr>
  </tbody>

<?php } ?>
</form>
  </table>
    <br>

das hier ist der Code der die sachen löscht

PHP:
<?php
error_reporting(-1);
ini_set('display_errors', true);

$gut = $_POST['id'];

  $con = mysqli_connect('localhost','root','', 'foodorder');

    mysqli_select_db($con,'orders');

  $sql = "DELETE FROM `orders` WHERE `order_ID` = ";

  if(mysqli_query($con,$sql))
        header("refresh:1; url=view_order_kitchen.php");

    else{
        echo "Fehler";
}
  ?>

(Die erste code ist von der Datei view_order_kitchen.php und der zweite code von delete.php)

MfG
BWDS
 

Sempervivum

Senior HTML'ler
Das Problem ist, dass sich das Formular über die ganze Tabelle erstreckt und Du darin viele Inputs mit dem Namen "id" hast. Dabei gewinnt dann der letzte.

Mehrere Lösungsmöglichkeiten:

1. In jeder Tabellenzelle ein Formular. Unschön wegen der Inflation von Formularen.
2. Statt des verborgenen Inputs ein sichtbarer Check- oder Radiobutton womit man die/das zu löschende Element(e) auswählt, das Formular wie bisher über die ganze Tabelle und einen einzigen Submit-Button.
 
Zuletzt bearbeitet:

BWDS

Neues Mitglied
Das bedeutet sie würden es über get regeln. Ich habe es vorher auch über get ausprobiert nur zeigte er mir immer ein fehler der string conversation an deshalb bin ich auf post gewechselt. Wenn man mir bei get auch noch weiterhelfen würde, wär ich dankbar

MfG
BWDS
 

Sempervivum

Senior HTML'ler
Verstehe nicht: Das ist unabhängig davon ob Du das Formular mit GET oder POST überträgst. Auch einen Zusammenhang mit string conversation kann ich nicht erkennen.
 

BWDS

Neues Mitglied
Wie würde man das jetzt via Get machen (Code für den Lösungsansatz währe nett)
 

m.scatello

Senior HTML'ler
Dafür brauchst du kein Formular.
<form action='delete.php' method="POST" > und </form> raus
PHP:
    <tr>
      <td> <span class="glyphicon glyphicon-menu-right"></span> </td>
      <td><?php echo $row["order_ID"]; ?></td>
      <td><?php echo $row["F_ID"]; ?></td>
      <td><?php echo $row["order_date"]; ?></td>
      <td><?php echo $row["foodname"]; ?></td>
      <td><?php echo $row["quantity"]; ?></td>
      <td><?php echo $row["b_numm"]; ?></td>
      <td><a href="delete.php?order_id="<?php echo $row['order_ID']; ?>" class="button">Löschen</a></td>
    </tr>
In delete.php
PHP:
<?php
  if (isset($_GET['order_id'))
  {
     // Hier hast du jetzt die ID von dem Datensatz, der gelöscht werden soll
  }
?>
Möglicher CSS-Code für den Link
CSS:
<style>
      .button {
      background-color: #FF4500;
      border: none;
      color: white;
      padding: 5px;
      text-align: center;
      text-decoration: none;
      font-size: 14px;
      cursor: pointer;
      }
</style>
 

BWDS

Neues Mitglied
Jetzt haben wir noch ein problem

er übermittelt die order id nicht.

MfG

BWDS
 

m.scatello

Senior HTML'ler
Und du glaubst jetzt wirklich, wir könnten das Problem ohne deinen angepassten Quellcode erkennen? Wenn ja, dann muss ich dich enttäuschen, meine Glaskugel ist wegen Corona in Kurzarbeit.
 

BWDS

Neues Mitglied
Angepasster Quellcode:

view_order_kitchen.php

Code:
  <table class="table table-striped">
    <thead class="thead-dark">
      <tr>
        <th>  </th>
        <th> Order ID </th>
        <th> Food ID </th>
        <th> Order Date </th>
        <th> Food Name </th>
        <th> Quantity </th>
        <th> Ordernumber </th>
        <th> actions </th>

      </tr>
    </thead>

    <?PHP
      //OUTPUT DATA OF EACH ROW
      while($row = mysqli_fetch_assoc($result)){
    ?>

  <tbody>
    <tr>
      <td> <span class="glyphicon glyphicon-menu-right"></span> </td>
      <td><?php echo $row["order_ID"]; ?></td>
      <td><?php echo $row["F_ID"]; ?></td>
      <td><?php echo $row["order_date"]; ?></td>
      <td><?php echo $row["foodname"]; ?></td>
      <td><?php echo $row["quantity"]; ?></td>
      <td><?php echo $row["b_numm"]; ?></td>
      <td><a href="delete.php?order_id="<?php echo $row['order_ID']; ?> class="button">Löschen</a></td>

    </tr>
  </tbody>

<?php } ?>
  </table>

delete.php

Code:
<?php
error_reporting(-1);
 ini_set('display_errors', true);


  $con = mysqli_connect('localhost','root','', 'foodorder');

    mysqli_select_db($con,'orders');

    if (isset($_GET['order_id']))
{
    $sql = "DELETE FROM `orders` WHERE `order_ID` = $_GET";

}


  if(mysqli_query($con,$sql))
        header("refresh:1; url=view_order_kitchen.php");

    else{
        echo "Fehler";
}

  ?>
Fehler webseite bestellung .png

Hier der Fehler CODE
 

m.scatello

Senior HTML'ler
if (isset($_GET['order_id']))

$sql = "DELETE FROM `orders` WHERE `order_ID` = $_GET";

Da fällt dir nix auf?
 

BWDS

Neues Mitglied
Nein leider nicht. Trotzdem wird von view_order_kitchen.php keine id weitergegeben.
 

m.scatello

Senior HTML'ler
Nein leider nicht.
Traurig, dann solltest du dich mehr mit den Grundlagen beschäftigen.

Trotzdem wird von view_order_kitchen.php keine id weitergegeben.
Woher weißt du das? Ich sehe da keinerlei Debugausgaben.

Richtig debuggen
  1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
  2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
  3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
  4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
  5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
  6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
  7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
  8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
  9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 

BWDS

Neues Mitglied
Woher weißt du das? Ich sehe da keinerlei Debugausgaben.

indem ich einfach den code aus der delete.php ersetze durch den code:

Code:
<?php
echo '<pre>';
print_r($_GET);
echo '</pre>';
?>

dann kommt das
1594044241872.png
daran sieht man, dass keine id übergeben wurde

hat man zb die id 467 würde das heraus kommen:
1594044336483.png

Da fällt dir nix auf?

was sollte mir da auffallen? dass man nach dem gleich zeichen das schreibt?


if (isset($_GET['order_id']))

$sql = "DELETE FROM `orders` WHERE `order_ID` = $_GET['order_ID']";


kläre mich bitte mal auf dies wäre eusers nett

MfG
BWDS
 

m.scatello

Senior HTML'ler
Dann kann doch nur hier das Problem liegen:
PHP:
<a href="delete.php?order_id="<?php echo $row['order_ID']; ?> class="button">Löschen</a></td>
Du müsstest in der URL bei delete.php die ID sehen. Wenn das nicht so ist, dann musst du mal nachgesehen, wie der HTML-Code aussieht, den der Browser bei der Zeile bekommt.
 

BWDS

Neues Mitglied
ich habe es jetzt gerade gerückt, und nun wird die ID übertragen.
quellcode aktualisierung:
view_order_kitchen.php
Code:
  <table class="table table-striped">
    <thead class="thead-dark">
      <tr>
        <th>  </th>
        <th> Order ID </th>
        <th> Food ID </th>
        <th> Order Date </th>
        <th> Food Name </th>
        <th> Quantity </th>
        <th> Ordernumber </th>
        <th> actions </th>

      </tr>
    </thead>

    <?PHP
      //OUTPUT DATA OF EACH ROW
      while($row = mysqli_fetch_assoc($result)){
    ?>

  <tbody>
    <tr>
      <td> <span class="glyphicon glyphicon-menu-right"></span> </td>
      <td><?php echo $row["order_ID"]; ?></td>
      <td><?php echo $row["F_ID"]; ?></td>
      <td><?php echo $row["order_date"]; ?></td>
      <td><?php echo $row["foodname"]; ?></td>
      <td><?php echo $row["quantity"]; ?></td>
      <td><?php echo $row["b_numm"]; ?></td>
      <?php
    echo  "<td><a href=delete.php?id=".$row['order_ID'].">ENTFERNEN</a></td>"; 
      ?>


    </tr>
  </tbody>

<?php } ?>

  </table>
    <br>


delete.php

Code:
<?php
error_reporting(-1);
 ini_set('display_errors', true);


  $con = mysqli_connect('localhost','root','', 'foodorder');

    mysqli_select_db($con,'orders');

    if (isset($_GET['order_id']))
{
    $sql = "DELETE FROM `orders` WHERE order_ID = $_GET['order_ID'] ";

}


  if(mysqli_query($con,$sql))
        header("refresh:1; url=view_order_kitchen.php");

    else{
        echo "Fehler";
}

  ?>

trotzdem ist immernoch der wurm drin.

MfG
BWDS
 

m.scatello

Senior HTML'ler
trotzdem ist immernoch der wurm drin.
Och menno, das ist doch kein Problembeschreibung und "Richtig debuggen" hast du auch nicht angewendet. Ist das wirklich so schwer???
PHP:
<?php
  error_reporting(-1);
  ini_set('display_errors', true);


  if (isset($_GET['order_id']))
  {
     $con = mysqli_connect('localhost','root','', 'foodorder');
 
     if (!$con)
     {
       echo "Fehler: konnte nicht mit MySQL verbinden." . PHP_EOL;
       echo "Debug-Fehlernummer: " . mysqli_connect_errno() . PHP_EOL;
       echo "Debug-Fehlermeldung: " . mysqli_connect_error() . PHP_EOL;
       exit;
     }

     mysqli_select_db($con,'orders')
       or die (mysqli_error($con));

     $sql = "DELETE FROM `orders` WHERE order_ID = $_GET['order_ID'] ";

     mysqli_query($con,$sql)
       or die (mysqli_error($con));
      
     header("refresh:1; url=view_order_kitchen.php");
  }
  else
    die ("Parameter nicht vorhanden");
?>
 

BWDS

Neues Mitglied
wenn ich genau diesen code in delete.php einfüg zeigt er mir folgende fehlermeldung an:
1594055243004.png
der code ist aber soweit ich sehe richtig.

MfG
BWDS
 

BWDS

Neues Mitglied
Jetzt sagt er mir, dass der parameter nicht vorhanden ist, obwohl der parameter vorhanden ist.

was nun?
 

m.scatello

Senior HTML'ler
Wenn PHP bei dem Script ausgibt, dass der Parameter nicht vorhanden ist, dann glaube ich PHP mehr als dir.

Hängt die ID an der URL?
Hast du das Script 1:1 übernommen?
 
Werbung:
Oben