Trigger in MySQL erstellen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
befehl
code
datenbank
datum
email
erstellen
forum
login
methode
not
null
registrierung
software
spalten
string
system
tabelle
trigger
update
url
-
Also Ferndiagnose ist ganz schlecht, vllt passen die Datentypen ja nicht wie ich erwähnt hab. Ohne Zugang zu der Datenbank ist es schwer dir dabei weiterzuhelfen für mich.
Welcher Datentyp ist es denn? Integer oder varchar? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Welcher Datentyp ist es denn? Integer oder varchar?
Hallo,
also es ist integer - "Typ: int(10)" -
Überträgst du es denn auch als integer? Ist es ein fester wert? Wenn du group_id Überträgst dann geht das ja auch nicht da es ein string ist.
-
Überträgst du es denn auch als integer? Ist es ein fester wert? Wenn du group_id Überträgst dann geht das ja auch nicht da es ein string ist.
es gibt 4 Gruppen ID´s in dieser Foren Software. Group_ID2 = Gäste, Group_ID4=Mitglieder Group_ID3=Moderatoren und letztlich Group_ID1=Admin
BEGIN INSERT into forumusers (username, email, password, group_id, language) VALUES(new.username, new.email, new.password, 'group_id4' , new.language); END
Ich hatte ja in meinem Beispiel (siehe oben) gezeigt wie ich die Group_ID eingetragen hatte. Wie was nun übertragen wird, davon hab ich leider überhaupt keine große Ahnung. Ich sehe in der Datenbank, dass es integer ist, das wars aber auch schon. Wie gesagt die Spalte Group_ID gibt es in der Haupt Software leider nicht, weshalb ich sie auch nicht so wie z.B der username oder email einfach so übergeben kann. Vielmehr ist es hier ein fester Wert der übergeben werden muss da sich die Group ID ja nicht ändert und bei jedem neuen User gleich ist.
Grundsätzlich soll aber immer ein fester Wert, also Group_ID4 im Trigger übergeben werden, da das Forum nur über die Hauptseite selbst zugänglich ist und zwar auch erst nur nach Registration bzw Login. Die Foren Software ist FluxBB falls Dir das weiter Hilft.
Beitrag zuletzt geändert: 21.10.2017 13:06:46 von jippyx -
Wenn es ein integer ist musst du auch eine ganzzahl übertragen und nicht wie du es hast als string.
Jede deiner group-ids hat ja nen Wert und den musst du übertragen. -
muellerlukas schrieb:
Um welche Produkte handelt es sich denn überhaupt?
Ob die Passwörter überhaupt ohne Anpassung der Software 1:1 übernommen werden können ist fraglich.
Je nachdem, ob beide die selben Methoden zum Hashen von Passwörtern nutzen oder nicht.
Wieso sollte es da zu Problemen kommen? Es kommt ja nicht mehr darauf an welcher Algorithmus verwendet wird, wenn das System einen Hash Wert voraussetzt den es mit password_verify() überprüft.
Abgesehen davon, speicherst du die Passwörter eigentlich als Hash oder nicht? -
Wenn es ein integer ist musst du auch eine ganzzahl übertragen und nicht wie du es hast als string.
Jede deiner group-ids hat ja nen Wert und den musst du übertragen.
Ich dachte mit der Angabe group_ID4 habe ich einen Wert übergeben. Man ist das kompliziert, lach. (Ja, ich weiß, wer sich damit auskennt für den ist es kein Hexenwerk aber für mich noch Böhmische Dörfer^^)
Und wie löse ich das Problem jetzt am elegantesten? Hast du da eine Idee? -
horstexplorer schrieb:
muellerlukas schrieb:
Um welche Produkte handelt es sich denn überhaupt?
Ob die Passwörter überhaupt ohne Anpassung der Software 1:1 übernommen werden können ist fraglich.
Je nachdem, ob beide die selben Methoden zum Hashen von Passwörtern nutzen oder nicht.
Wieso sollte es da zu Problemen kommen? Es kommt ja nicht mehr darauf an welcher Algorithmus verwendet wird, wenn das System einen Hash Wert voraussetzt den es mit password_verify() überprüft.
Du beantwortest dir deine Frage im Satz drauf selbst.
Nur weil es eine Funktion gibt, heißt das noch lange nicht dass auch jede Software die einsetzt.
Zumal die Funktion auch "erst" seit PHP 5.5 existiert. Software die kompatibel zu älteren Versionen sein will, kann also da eh nicht drauf zurück greifen.
Abgesehen davon, speicherst du die Passwörter eigentlich als Hash oder nicht?
Zumindest in FluxBB gibt es entsprechende Hashing-Methoden. Welche Methodik da jetzt genau eingesetzt wird müsste ich auch erst nachschauen.
Aber der Quellcode ist ja an sich kein Geheimnis. ;) -
muellerlukas schrieb:
horstexplorer schrieb:
muellerlukas schrieb:
Um welche Produkte handelt es sich denn überhaupt?
Ob die Passwörter überhaupt ohne Anpassung der Software 1:1 übernommen werden können ist fraglich.
Je nachdem, ob beide die selben Methoden zum Hashen von Passwörtern nutzen oder nicht.
Wieso sollte es da zu Problemen kommen? Es kommt ja nicht mehr darauf an welcher Algorithmus verwendet wird, wenn das System einen Hash Wert voraussetzt den es mit password_verify() überprüft.
Du beantwortest dir deine Frage im Satz drauf selbst.
Nur weil es eine Funktion gibt, heißt das noch lange nicht dass auch jede Software die einsetzt.
Zumal die Funktion auch "erst" seit PHP 5.5 existiert. Software die kompatibel zu älteren Versionen sein will, kann also da eh nicht drauf zurück greifen.
Abgesehen davon, speicherst du die Passwörter eigentlich als Hash oder nicht?
Zumindest in FluxBB gibt es entsprechende Hashing-Methoden. Welche Methodik da jetzt genau eingesetzt wird müsste ich auch erst nachschauen.
Aber der Quellcode ist ja an sich kein Geheimnis. ;)
Ah okay, da habe ich nicht ganz gekuckt seit wann es die Funktion gibt :) -
BEGIN INSERT into forumusers (username, email, password, group_id, language) VALUES(new.username, new.email, new.password, group_id4 , new.language); END
Und jetzt setzt du einen integer wert, ganzzahl, 1/2/3/4/5/6/oder höher je nachdem welcher Wert dafür steht statt group_id4 in den values ein, was folgendes liefern sollte.
BEGIN INSERT into forumusers (username, email, password, group_id, language) VALUES(new.username, new.email, new.password, 1/2/3/4 oder auch 5 oder höher , new.language); END
Wenn es IMMER ein fester wert ist der sich nicht ändert dann ist es egal ob Group_id in accounts enthalten ist oder nicht.
-
Und jetzt setzt du einen integer wert, ganzzahl, 1/2/3/4/5/6/oder höher je nachdem welcher Wert dafür steht statt group_id4 in den values ein, was folgendes liefern sollte. BEGIN INSERT into forumusers (username, email, password, group_id, language) VALUES(new.username, new.email, new.password, 1/2/3/4 oder auch 5 oder höher , new.language); END
Vielen herzlichen Dank, das hat super geklappt. Jetzt wird alles bestens übergeben.
Eine abschließende Frage habe ich aber noch.
Werte aus unterschiedlichen Spalten kann man aber nicht übergeben, oder? - Beispielsweise wenn die Spate für den Vor und Nachnamen in der Tabelle accounts "name" heißt und in der Tabelle forumusers "realname" ? Der Typ wäre varchar(40). Das wäre noch so das perfekte non plus ultra, aber wenn nicht machbar ist es auch okay. Bin schon voll happy so. Echt noch mal dicken Dank bis hier her fürs helfen !!!
Beitrag zuletzt geändert: 21.10.2017 23:01:21 von jippyx -
Vllt solltest du demnächst mal doe Grundlagen sql dir ansehen :)
Mit sql kannst du auch das lösen.
Im insert into teil, teilst du mit wohin es geschrieben werden soll, erst die Tabelle dann doe spalten in den klammern. Im values teil sind die Werte enthaltene die du da reinschreiben willst in die oben angesprochene Tabelle.
Kurz gesagt für deinen jetzigen fall: müsstest du im insert into 'realname' hinzufügen oder eine spalte ersetzen. Im values teil müsstest du dann new.name übergeben und ersetzen odee hinzufügen. -
Hehe, recht hast Du, aber durch Deine Beispiele habe ich es tatsächlich verstanden wie es funktioniert. Learning bei Doing ist doch oftmals besser als reine Theorie. Ich danke Dir auf jeden Fall für Deine Hilfe, echt Top von Dir !!!
Ich spendiere Dir mal nen virtuelles Bierchen
lg.
Beitrag zuletzt geändert: 22.10.2017 19:56:16 von jippyx -
Also hat es funktioniert? Sehr gut :p nehme auch reale biere an ;)
-
Also hat es funktioniert? Sehr gut :p nehme auch reale biere an ;)
Ja bestens, ich konnte sogar noch andere Dinge damit Realisieren, echt perfekt ! Vielen Dank :) -
Was hast denn noch realisieren können? Würde mich mal interessieren :)
-
Nichts wildes, habe einen neuen Angelegt, der noch zusätzlich die ID, die IP und zuletzt online Zeit übergibt. Klappt bestens. Das einzige was mich etwas stutzig macht ist das der Trigger nicht updatet. Ein User hat den Benutzernamen geändert aber im Forum blieb der alte noch stehen. Brauch ich da ein neuen UPDATE Trigger für? Eigentlich doch nicht, oder?
-
Doch brauchst du.
Kuck dir wirklich die SQL Basics an das ist alles ganz selbsterklärend und oder mit massig Beispielen was es macht und wie es Funktioniert.
Kurzform:
Der Insert Befehl erstellt einen neuen Datensatz, UPDATE aktualisiert oder ändert Werte aus einem bestehenden Datensatz.
Es sollte klar sein, dass du keinen Datensatz doppelt anlegen kannst bzw solltest.
Achtung der Update Befehl funktioniert anders als der Insert Befehl. bei der genauen Syntax hilft gern Google und ein wenig nachdenken :)
Beitrag zuletzt geändert: 23.10.2017 23:35:55 von horstexplorer -
Es sollte klar sein, dass du keinen Datensatz doppelt anlegen kannst bzw solltest.
Achtung der Update Befehl funktioniert anders als der Insert Befehl. bei der genauen Syntax hilft gern Google und ein wenig nachdenken :)
Also ich hab lohischerweise mal überlegt und etwas zusammengestellt. das müsste dann in etwa so aussehen?
CREATE TRIGGER trigger_account_changes
AFTER UPDATE ON accounts
FOR EACH ROW
UPDATE INTO forumusers
(username, email, password, group_id, language, realname, registered, last_visit)
VALUES
(OLD.username, OLD.email, OLD.password, 4, OLD.language, OLD.name, OLD.time, OLD.last_logged NOW());
Beitrag zuletzt geändert: 24.10.2017 11:39:57 von jippyx -
Google.....
Der Update Befehl funktioniert anders. Zudem der Ned einmal vorkommt.
UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value
Das ganze Packt man dann in einen Code mit ner IF Abfrage rein:
IF search_condition THEN statement_list ELSE statement_list END IF
Das if fragt an ob es einen Datensatz mit den Daten bereits gibt (kann man evtl an Email oder so fest machen)
Falls ja (Then) soll er den Eintrag Updaten. Sonnst ihn neu erstellen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage