PHP - MySQL Datensatz in eine andere Tabelle kopieren und löschen
Hallo zusammen,
ich habe aktuell ein Problem.
Ich habe eine Tabelle die über eine Eingabemaske von Usern gefüllt wird. In dieser werden aktuell anstehende Lieferungen aufgelistet.
Wenn eine Lieferung abgeschlossen ist, sollen die dazugehörigen Daten über einen "Archivieren-Button" in eine neue Tabelle geschrieben und aus der alten gelöscht werden.
Dafür verwende ich PHP. Das Löschen klappt soweit auch, nur das "Archivieren" in die neue Tabelle will nicht klappen.
Anbei der Code den ich für das Löschen verwende.
Ich habe schon einiges versucht und lange gesucht, aber bisher habe ich keine Lösung für das Archivieren gefunden.
Ein Teil meines letzten Lösungsansatzes war:
Ich hoffe ihr könnt mir weiterhelfen.
Mit freundlichen Grüßen
Daniel
ich habe aktuell ein Problem.
Ich habe eine Tabelle die über eine Eingabemaske von Usern gefüllt wird. In dieser werden aktuell anstehende Lieferungen aufgelistet.
Wenn eine Lieferung abgeschlossen ist, sollen die dazugehörigen Daten über einen "Archivieren-Button" in eine neue Tabelle geschrieben und aus der alten gelöscht werden.
Dafür verwende ich PHP. Das Löschen klappt soweit auch, nur das "Archivieren" in die neue Tabelle will nicht klappen.
Anbei der Code den ich für das Löschen verwende.
// Sicherheitsabfrage Archivierung
if (isset($_GET['aktion']) and $_GET['aktion'] == 'sicherheitarchivieren') {
if ( isset($_GET['id'])) {
$id_einlesen = (INT) $_GET['id'];
echo '<h1>Sicherheitsabfrage Archivieren</h1>';
echo '<p>Soll der folgende Datensatz archiviert werden?</p>';
echo '<p><a href="?aktion=archivieren&id='. $id_einlesen.'">Archivieren!</a></p>';
$_GET['aktion'] = 'anzeigen';
}
}
//
if (isset($_GET['aktion']) and $_GET['aktion'] == 'anzeigen') {
if ( isset($_GET['id'])) {
$id_einlesen = (INT) $_GET['id'];
if ($id_einlesen > 0) {
$dseinlesen = $db->prepare("SELECT id, Datum, Kunde , Zeitfenster, Kennzeichen, Eintreffzeit, Papiere, Belabelt, Beladen, DFUE, Abfahrt, Bemerkung
FROM abholung WHERE id = ? ");
$dseinlesen->bind_param('i', $id_einlesen);
$dseinlesen->execute();
$dseinlesen->bind_result($id, $Datum, $Kunde, $Zeitfenster, $Kennzeichen, $Eintreffzeit, $Papiere, $Belabelt, $Beladen, $DFUE, $Abfahrt, $Bemerkung );
$dseinlesen->fetch();
echo "Datum: <b> $Datum </b><br>";
echo "Kunde: <b> $Kunde </b><br>";
echo "Zeitfenster: <b> $Zeitfenster </b><br>";
echo "Kennzeichen: <b> $Kennzeichen </b><br>";
echo "Eintreffzeit <b> $Eintreffzeit </b><br>";
echo "Papiere: <b> $Papiere </b><br>";
echo "Belabelt: <b> $Belabelt </b><br>";
echo "Beladen: <b> $Beladen </b><br>";
echo "DFUE: <b> $DFUE </b><br>";
echo "Abfahrt: <b> $Abfahrt </b><br>";
echo "Bemerkung: <b> $Bemerkung </b><br>";
echo '<p><a href="_test.php">Tabelle anzeigen</a>';
$dseinlesen->close();
exit;
}
}
}
if (isset($_GET['aktion']) and $_GET['aktion']=='archivieren') {
if (isset($_GET['id'])) {
$id = (INT) $_GET['id'];
if ($id > 0)
{
$loeschen = $db->prepare("DELETE FROM abholung WHERE id=(?) LIMIT 1");
$loeschen->bind_param('i', $id);
if ($loeschen->execute()) {
echo "<p>Datensatz wurde gelöscht</p>";
}
}
}
}
Ich habe schon einiges versucht und lange gesucht, aber bisher habe ich keine Lösung für das Archivieren gefunden.
Ein Teil meines letzten Lösungsansatzes war:
$archivieren= $db->prepare (" INSERT INTO archiv SELECT * FROM abholung WHERE id= ? LIMIT 1" );
Ich hoffe ihr könnt mir weiterhelfen.
Mit freundlichen Grüßen
Daniel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 466583
Url: https://administrator.de/contentid/466583
Ausgedruckt am: 28.11.2024 um 21:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo,
https://stackify.com/php-debugging-guide/
Gruß,
Peter
Zitat von @Dantaros:
Dafür verwende ich PHP. ... nur das "Archivieren" in die neue Tabelle will nicht klappen.
Was genau will nicht klappen? Fehlermeldungen?Dafür verwende ich PHP. ... nur das "Archivieren" in die neue Tabelle will nicht klappen.
https://stackify.com/php-debugging-guide/
Gruß,
Peter
Das LIMIT 1 macht keinen Sinn beim Archivieren, selbst wenn es mehrere Datensätze mit der gleichen ID geben sollte (was vermutlich anderweitig nicht möglich sein soll) wäre es ja sinnvoll alle Datensätze gleich zu behandeln oder der Schlüssel ist der falsche. LIMIT 1 ist in dem Zusammenhang sinnfrei in vielerlei Hinsicht.
Bei DELETE wird LIMIT vermutlich einen Fehler provozieren, auch hier ist es sinnfrei. Aber vor allem müsste das hier ein Syntax Problem geben, zumindest bei MSSQL kann ich kein DELETE TOP 1 FROM tabelle machen.
Bei DELETE wird LIMIT vermutlich einen Fehler provozieren, auch hier ist es sinnfrei. Aber vor allem müsste das hier ein Syntax Problem geben, zumindest bei MSSQL kann ich kein DELETE TOP 1 FROM tabelle machen.
Mahlzeit!
Wie führst du Archivieren und Kopieren aus bzw. wie und wo werden die Funktionen aufgerufen?
Wenn nach Archivieren immer ein Löschen folgt, würde ich das gleich in eine Funktion packen und nicht extra. (Also alles bei Archivieren).
Ohne konkreten Programmcode kann man das nicht nachvollziehen.
Gruß
eisbein
Mein Problem ist jetzt, dass ich das Archivieren/Kopieren und Löschen nicht nacheinander ausgeführt bekomme, wenn ich eins von beidem ausführe, werde ich direkt wieder zur Ursprungsseite weitergeleitet.
Wie führst du Archivieren und Kopieren aus bzw. wie und wo werden die Funktionen aufgerufen?
Wenn nach Archivieren immer ein Löschen folgt, würde ich das gleich in eine Funktion packen und nicht extra. (Also alles bei Archivieren).
Ohne konkreten Programmcode kann man das nicht nachvollziehen.
Gruß
eisbein
Sobald ich auf den Button klicke, werde ich nur auf eine weiße Seite weitergeleitet.
Was genau macht der Button und welche Parameter werden damit übergeben?
Der Code den du gepostet hast zeigt lediglich wie die Parameter abgefragt/verarbeitet werden aber sonst auch schon nichts.
Damit in deinem Code auch dein INSERT und DELETE funktioniert, musst du vor Zeile 19 noch ein execute() ausführen, dann erst wieder ein neues prepare()