• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PHP Guestbook mit SQL /löschenfunktion

digleu

New member
So also ich habe ne Table in SQL und die haben halt so ein paar spalten. das eigentlich wichtige is jetzt aber die id spalte:
wenn ich jetzt über die Adminpage von dem Guestbook nen Eintrag löschen will dann soll der den Eintrag löschen und die IDs dannach sollen "nachrutschen"
ich hoffe ich habe diese best. ziemlich dumme Frage genügend beschrieben
hoffe auf baldige Antwort

mfg DiGleu!
 
Ne dem sein Problem war anders als meins (ich hatte das auch schon gesehen) ich denke mal mein Problem ist simpler ... also ich will die SQL-DB so editieren, dass dort die id immer von oben bis unten durchnummeriert ist.
Wollte wissen, ob es zum sortieren (oder ähnliches) SQL Befehle gibt oder ob ich das mit PHP Befehlen machen muss.
Bei nem neuen Eintrag hängt er ja immer an und zählt eins hoch wenn man aber einen Eintrg läscht dann müssen alle anderen eins nachrutschen, jetzt verstanden ?
Wenn es so einen SQL Befehl gibt dann ist er ja auch für andere Sachen pratkisch nich nur für ein GB ...
 
also so einen Befehl, bei dem SQL automatisch nachrutscht wie du es bezeichnest und fehlende ID Einträge editiert gibt es nicht.
Wenn du jedoch solche Sachen wie die Zahl des Eintrages o.ä. anzeigenlassen lassen möchtest musst du das in einer Schleife abfragen, wie in dem Beispiel zumindest weiter unten beschrieben und dementsprechend diese Zahlen immer zur Echtzeit errechnen.
 
Zum einen einen solchen Befehl gibt es im SQL nicht, denn ein solches Nachrutschen ist höchstgradig verboten und verpöhnt....
Im übrigen verweise ich auch auf den anderen Thread, dessen Problem identisch ist/war....
 
und warum ist das verpönt ? Ich meine solang es nützlich ist ...
@wagi: aber wie soll ich die Reihenfole rausfinden ??

P.S.:
Und wo wir gerade dabei sind: wie lese ich denn eine Datenbank rückwärts aus :) ?
 
Zuletzt bearbeitet:
Da gibt es sowas, das nennt sich referentielle Integrität (hab ich im anderen Thread kurz angeschnitten).... und damit man die aufrechterhalten kann, sollten Schlüssel nach dem Löschen nicht wieder verwendet werden.
Ansonsten empfehle ich die Lektüre eines SQL92 Buchs..
 
Ja mein Gott ich hab eigentlich keine Zeit mir Haufenweise SQL Bücher rein zu ziehen (obwohl vielleicht mach ichs doch :)) und darum bin ich auch hier um mir meine Fragen direkt von Mensch zu Mensch beantworten zu lassen.
Also gut ich kann mir aber vorstellen, dass es evtl. nicht gut ist einen Schlüssel wieder zu verwenden.
dann dange nochmal für die Tips.
 
Sagens wir mal so - Ich denke wär hier zu kompliziert den Content dieses Buches zu erkläre, oda??

Also ich habs bei mir so gemacht - Hab ne ID die ist autoincrement. Ich Lass dann die Einträge per ID anordnen, aber DESC, also rückwärts. Dann mach ich nur noch eine Schleife also for ($i=0; $i<=$anzahl; $i++){ wobei $anzahl pber mysql_num definiert wird - klar?
 
jut zwei Weitere Fragen :) :
1. ist dieses DESC (oder so) ein Befehl ?? Bidde, bidde erklären
2. Wenn ich aber jetzt einen Eintrag (über diese Admin-Page vom GB) lösche dann kann es passiert (tut es aber nicht immer), dass sich ein neuer Eintrag an die ID-Stelle vom gelöschten setzt ... (soll ich die Einträge dann nur auf "invisible" setzen oder wie ?)

thx im Voraus DiGleu!
 
Zuletzt bearbeitet:
mysql> SELECT * FROM guestbook ORDER BY id DESC;

sortiert die abgefragten daten nach id in absteigender reihenfolge

das mit invisible setzen versteh ich nicht
 
also eigentlich - zumindest isses bei mir so - wird die id nur mittels der eigenschaft auto_increment erzeugt, hat also gar nicht die Möglichkeit einen ehemals gelöschten ID Wert zu ersetzen, da bei auto_increment die Zahl ja immer um eins hochgezählt wird - automatisch (du brauchst auch in deinem SQL Befehl ala INSERT INTO $tabelle (spalten) VALUES (spalten) die Spalte Id nicht angeben - wie gesagt automatisch).

DESC ist n MYSQL Zusatz und das Gegenteil von ASC

SELECT * FROM $tabelle ORDER BY id DESC -
dann wird wenn man das ganze über fetch array anspricht zuerst die letzte ID (Beispielhalber 50) ausgegeben, dann die Vorletzte (49) usw
 
erstmal big thx für die Mühen aber wenn ich nen Eintrag lösche und an dann wieder Eintrage füllt der manchmal auch die Lücken ...
 
$sql = "INSERT INTO digleugb SET
name='$name',
mail='$mail',
hp='$hp',
icq='$icq',
date='$date',
time='$time',
ip='$REMOTE_ADDR',
eintrag='$eintrag';";
if (@mysql_query($sql)) {
echo("<p>Your entry has been added, thank you for visiting my Guestbook</p>");
} else {
echo("<p>Error adding your entry: " . mysql_error() . "</p>");
 
puh den kenn ich jetzt doch nich mehr aber die id müsste folgende eigenschaften gehabt haben:
INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY

hier is der anfang von der describe ausgabe

+---------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+----------------+
| id      | int(11) |      | PRI | NULL    | auto_increment |
| name    | text    | YES  |     | NULL    |                |
| mail    | text    | YES  |     | NULL    |                |

hoffe das reicht
 
Zuletzt bearbeitet:
Das die Datenbank ihren Speicherplatz selbst verwaltet und sich damit das Recht herausnimmt, den Platz eines gelöschten Datensatzes wieder mit einem passenden neuen Datensatz aufzufüllen, weil er von der Größe her reinpasst, das ist gang und gäbe bei gescheiten Datenbanken. Man darf sich also nicht darauf verlassen, daß ein select * from table; immer identische Ergebnisse liefert. Die Reihenfolge kann sich mit jeder kleinsten Änderung ändern. Deswegen gibt es ja die Order by Klausel, die die Sortierung direkt beeinflussen und dafür sorgen, daß man vergleichbare und vor allem verlässliche Ergebnisse erhält...

Deswegen nochmals die Empfehlung eine SQL Doku zur Hand nehmen und gucken, was man damit alles schönes schon anstellen kann.....
Ein sehr gutes Werk ist dieses hier
 
Hallo!

Also wenn ich du wäre würde ich das sortieren mit id usw. einfach vergessen wenn du es vernünftig machen willst.
Normalerweise würde man das ganze nach Datum, Zeit sortieren und man müßte sich dann nicht den Kopf über die id(Die eigentlich nur dazu verwendet werden sollte um die Datenbank nicht zu verwirren :) -> Blöd ausgedrückt, ist aber genau so) zerbrechen.

Also: Wenn man schon etwas hochzählen lassen will dann sollte man das am besten ins Skript(PHP o. was auch immer) mitreinnehmen und sich nicht auf die Unique ID einer Tabelle beziehen.
 
ja jut dann sortier ich das jetzt per Datum ... und es gibt echt keine Möglichkeit zu verhindern, dass der die gelöschten IDs wiederverwendet ?
 
Zurück
Oben