PHP Einträge löschen die zu einer User ID gehören

Cool Master

Fleet Admiral
Registriert
Dez. 2005
Beiträge
39.912
Hallo,

als Info ich mach gerade ein Praktikum für einen Ausbildungsplatz als Fachinformatiker Anwendungsentwicklung. So da es heute das Wetter nicht zulässt das mein Chef und ich ins Büro fahren arbeiten wir von zu Hause aus.

So meine "Hausaufgabe" heute ist es per php ein script zu erstellen das alle Einträge, die zur UserID gehören, löscht. Sprich:

ein resetuser.php -> resetuser.php?userid=<irgendeinevorhandeneID>

So dazu sei gesagt ich kenne mich mit php nicht so super aus da ich in der Schule leider nichts mit DB gemacht habe sondern nur Assembler, C und C++ also bitte nicht gleich mein Kopf einschlagen ;)

So das ist der script der einen "cookie" erstellt und eben einen eintrag macht:

Code:
<?
include("abb_secrets.inc.php");


if(isset($_GET['userid'])){
    
    $userid = $_GET['userid'];
    $var    = $_GET['var'];
    $val    = $_GET['val'];

    mysql_connect(localhost,$username,$password);
    @mysql_select_db($database) or die( "Unable to select database"); 
    
    $query = "INSERT INTO $datatable VALUES ('$userid','$var', '$val') ON DUPLICATE KEY UPDATE user_id=$userid, cookie_name='$var', cookie_value='$val';";
                
    mysql_query($query);
    
    mysql_close();

}
?>
So mein denken ist nun das man alles stehen lassen kann bist auf

Code:
 $query = "INSERT INTO $datatable VALUES ('$userid','$var', '$val') ON  DUPLICATE KEY UPDATE user_id=$userid, cookie_name='$var',  cookie_value='$val';";
sprich da muss ich ein delete $var und $val machen. Nun aber die Frage wie stelle ich das am besten an? Wie ich sagte ich kenne mich mit php nicht super aus daher kenne ich auch nicht wirklich die leichtesten befehle^^

Hoffe ihr könnt mir da ein wenig den Ball zu schießen.
 
hi,

wenn du eh schon programmieren kannst, solltest du dir zusätzlich mal sql befehle anschaun.
"sql delete" wär der begriff, aber egal

mit mysql_query($query); kannst du querys absetzen, SELECT INSERT DELETE UPDATE ...

und in deinem fall muss du jetzt über $query den string mitgeben
und der sieht dann so aus: "DELETE FROM $datatable WHERE user_id = $userID";
 
hi,

wenn du eh schon programmieren kannst, solltest du dir zusätzlich mal sql befehle anschaun.
"sql delete" wär der begriff, aber egal

mit mysql_query($query); kannst du querys absetzen, SELECT INSERT DELETE UPDATE ...

und in deinem fall muss du jetzt über $query den string mitgeben
und der sieht dann so aus: "DELETE FROM $datatable WHERE user_id = $userID";

Bin ebenfalls dieser Meinung - würde nämlich NIEMALS etwas auf NULL setzen:

$var = NULL;
$val = NULL;

Damit wirst du nicht froh...
 
Wie oben bereits gesagt, einfach mit der ID ein "Delete Query" zusammenstellen und ausführen.
Hier MySQL Delte Infos -> http://dev.mysql.com/doc/refman/5.1/de/delete.html

In PHP den Query ausführen:
mysqli->query() -> http://ch.php.net/manual/de/mysqli.query.php
Hier steht auch was die Rückgabewerte alles sein können.

Danach noch den Rückgabewert entsprechend prüfen. Sollte was falsch sein bzw. der Query war nicht erfolgreich hast auch noch zugriff auf Fehlermeldungen:
mysqli->error() -> http://ch.php.net/manual/de/mysqli.error.php
 
Wie läuft das in php ab wenn ich die userID lösche, löscht er auch automatische die var und val von der userID oder bleiben die vorhanden?
 
nein die bleiben vorhanden, aber du brauchst in php nicht den speicher wiederfreigeben so wie in c oder c++

also die kannst einfach so lassen, die werden eh spätesten nach dem script wieder frei.

// EDIT: sorry falsch gelesen, siehe nextes post, da steht die antwort :)
 
Zuletzt bearbeitet:
Wenn du Daten in einer Datenbank bzw. einer Tabelle löschts, wird/werden immer komplette Datensätze gelöscht.

Als Beispiel.

DELTE FROM tbl_user WHERE userID = 19;

Wird der user mit der ID 19 komplett aus der Tabelle tbl_user (inkl. aller anderen Felder, also Name, Vorname, Anrede etc...) gelöscht.

Beantwortet das deine Frage?
 
Zuletzt bearbeitet:
Genau das meinte ich Pascal_Peter danke für die Info :)
 
wenn ihr in euer mysql innodb benutzt mit fk
kann es sein das auf dem fk on delete trigger drauf sind.
Das heisst wenn du in euer Usertabelle eine userid löschst,
dann werden allen detail tabellen die userid datensätze mit gelöscht.
 
Kann sein das AlbertLast das gleiche meint wie, was ich jetzt schreiben, wenn ja sorry für die doppel Nennung!

Aber wenn zwei oder mehr Tabellen unter einander verknüpft sind, kann es passieren, das ein löschen nicht möglich ist.
Also einfach ein DELETE Row über die UserID ist meines erachtens nicht sicher. Man sollte wissen, ob es noch abhängigkeiten zu anderen Tabellen gibt. Sonst kann es schnell zu Anzeigefehlern auf der Webseite kommen.
 
naja, so ein riesen projekt wird das nicht sein ... wenn das script echt in einem produktivsystem verwendet wird, würd ich mir schleunigst gedanken über die sicherheit machen, denn es werden nirgendwo die input daten geprüft und auch nicht sicher in die datenbank geschrieben

sql injection nennt sich das, d.h. jemand übergibt einfach einen string (zb als user_id) über $_GET in dem string hat er zeichen so hintereinander gereiht, dass es zb die GANZE datenbank löscht
 
@RedDevilGT: Ja bei InnoDB kannst du keine Schlüssel löschen die anderswo in "gebrauch sind".

Bei unserer simplen Internen CIDB kann ich Bsp. kein "User" löschen der noch "Hardware" bestitzt:
DETAIL: Cannot delete or update a parent row: a foreign key constraint fails (`cidb`.`tbl_item`, CONSTRAINT `FK_user` FOREIGN KEY (`user_fk`) REFERENCES `tbl_user` (`user_id`)).

@AlbertLast, "fk on delete trigger " das müsste aber glaube ich "eingeschaltet" werden, wenn man es wünscht? Bin mir aber gerade nicht sicher...

@darkd0g, richtig. Eingaben immer vorher überprüfen und Rückgabewerte ebenfalls wieder überprüfen um Fehler abzufangen...
 
Zurück
Oben