Startseite › Foren › Deutsches LiveCode-Forum › Einfacher Login mit MySql Datenbank
Schlagwörter: Benutzerkonto, Code, LiveCode, Login, Programmieren, Registrierung
- Dieses Thema hat 30 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 5 Jahren von Klaus Major.
-
AutorBeiträge
-
-
Mai 12, 2019 um 15:57 Uhr #14762
Hallo, ich möchte einen einfachen Login Bereich mit MySql Datenbank erstellen. Da ich leider noch Anfänger bin, habe ich lange nach Beispielen gesucht, allerdings gibt es nicht wirklich Hilfe dazu. kennt jemand ein Beispiel Code oder kann irgendwie helfen? ich wäre sehr dankbar dafür. Vielen Dank im voraus!
-
Mai 12, 2019 um 16:32 Uhr #14764
Hallo JB1002000,
was genau meinst Du mit einem “einfachen Login Bereich mit MySql Datenbank”?
Beim “Mutterschiff” gibt es ein Tutorial dazu:
http://lessons.livecode.com/m/4071/l/7003-connecting-to-a-mysql-databaseHinweis:
Aus Sicherheitsgründen erlauben die meisten Provider keinen direkten Zugriff auf eine Online MySQL Datenbank!
Das geht dann nur über eine sogenannte “Middleware” wie PHP oder auch LC Server. Dies empfangen dann die Datenbankanfragen, arbeiten sie ab und schicken dann das Ergebnis zum Client zurück.Gruß
Klaus
-
Mai 12, 2019 um 17:20 Uhr #14766
Verbunden bin ich mit meinem Code bereits mit meiner Datenbank, ich möchte eine Art Benutzerkonto für meine User erstellen, dafür brauche ich eine Registrierung, einen Login, einen Logout und eine Passwort vergessen Seite. Ich weiß aber nicht wie ich das umsetzen könnte, deshalb hatte ich die Hoffnung, dass hier schon mal jemand ein Beispiel irgendwo gesehen hat und mir helfen kann.
-
Mai 12, 2019 um 18:41 Uhr #14768
Hallo JB1002000,
aha, OK, Beispiele wüsste ich jetzt nicht, aber helfen kann ich Dir sicher.
Du solltest zunächst eins nach dem anderen davon angehen und vielleicht erst einmal die GUI entwickeln. Danach können wir uns um die einzelnen Punkte kümmern.Wie sind Deine Kenntnisse von SQL? Das wirst Du auf jeden Fall benötigen.
Und Du solltest Dir selber in einfachen Worten erklären, was wann wie passieren muss, OHNE direkt in “computerisch” zu denken. Dann ist die Umsetzung in LC meist relativ simpel.
Gruß
Klaus
-
Mai 12, 2019 um 19:16 Uhr #14772
Alles klar, da erstelle ich erstmal die GUI und dann sehen wir weiter. Bei SQL kann ich auch noch sehr viel lernen. Danke erstmal für deine Hilfe.
-
Mai 12, 2019 um 19:28 Uhr #14774
Ich schlage immer hier nach, wenn ich mal wieder was mit Datenbanken machen muss 🙂
https://www.w3schools.com/sql/default.asp -
Mai 12, 2019 um 23:03 Uhr #14780
Alles klar, ich informiere mich mal und versuche mal ein paar Dinge. Wenn es dann weiter geht mit dem Projekt melde ich mich hier wieder.
-
Mai 13, 2019 um 20:35 Uhr #14803
Also ich habe es hinbekommen, dass der Nutzer seine Daten in einer Datenbank speichern kann. Somit würde die Registrierung funktionieren. Jetzt würde der ganze Spaß mit dem Login beginnen. Wie schaffe ich es, dass die Daten in der Datenbank mit den eingegebenen Werten des Nutzers verglichen werden?
-
Mai 13, 2019 um 21:08 Uhr #14805
Sauber! 🙂
Ich denke, der User gibt den Usernamen und das Passwort ein, korrekt?
Dann folgende SQL-Abfrage starten:... put QUOTE & fld "username" & QUOTE into eingegebener_username put "select passwort from deine_tabelle_hier where username =" && eingegebener_username into tSQL ...
(Pseudo Code, aber das sollte als Hinweis genügen, denke ich.)
Dann vergleichen: Wenn dann das Passwort aus der Datenbank mit dem übereinstimmt, was der User auf der Karte eingegben hat, ist alles in Ordnung. -
Mai 14, 2019 um 12:52 Uhr #14816
Alles klar, ich versuche es dann mal. Danke schon mal für die Hilfe. 🙂
-
Mai 14, 2019 um 13:09 Uhr #14818
Stets zu Diensten, der Herr! 🙂
-
Mai 16, 2019 um 11:22 Uhr #14836
Hallo JB,
ich arbeite mit einer SQLite-Datei (intern) auf einem einem Android-Smartphone.
Als Beispiel poste ich hier meine Änderungsroutine:global ypfd -- Pfad zur SQLite-Datei global xlan --Ändern on mouseUp if fld "fdlax" > 0 then -- Eingabe vorhanden ? if xlan = false then set the itemDelimiter to tab put fld "fdlax" into z1 -- (Datensatz-ID) put revOpenDatabase("sqlite",ypfd, , , , ) into xsql -- Datensatz suchen und anzeigen put "SELECT Karte1,Karte2 FROM Stapel WHERE ID = " &z1 into xsel put revDataFromQuery(tab,return,xsql,xsel) into xdat put textDecode(xdat,"UTF-8") into Texte -- Umlaute umwandeln put Texte into xdat revCloseDatabase xsql if xdat is not empty then -- Gibt es den Datensatz mit der eingegebenen ID ? put item 1 of xdat into fld "fdlay" put item 2 of xdat into fld "fdlaz" set the disabled of fld "fdlax" to true set the disabled of fld "fdlay" to false set the disabled of fld "fdlaz" to false set the label of button "bnlae" to "Speichern" set the disabled of btn "bnlei" of card id 76194 to true set the disabled of btn "bnllo" of card id 76194 to true put true into xlan else put "Datensatz ID nicht gefunden" into fld "fdlay" wait 3 seconds LKLoeschen -- Alles zurücksetzen end if else if fld "fdlay" is empty or fld "fdlaz" is empty then -- keine Eingaben gemacht LKLoeschen end if if fld "fdlay" is not empty and fld "fdlaz" is not empty then put fld "fdlax" into x1 -- Datensatz-ID put textEncode(fld "fdlay","UTF-8") into k1 put textEncode(fld "fdlaz","UTF-8") into k2 put revOpenDatabase("sqlite",ypfd, , , , ) into xsql --- Datensatz ändern put "UPDATE Stapel SET Karte1 = '" &k1& "', Karte2 = '" &k2& "' WHERE ID = "&x1 into sql revExecuteSQL xsql, sql revCloseDatabase xsql put revOpenDatabase("sqlite",ypfd, , , , ) into xsql --(alle Datensätze neu anzeigen) put "SELECT ID,Karte1,Karte2 FROM Stapel" into xsel put revDataFromQuery(tab,return,xsql,xsel) into xxerg put textDecode(xxerg,"UTF-8") into xerg revCloseDatabase xsql set the dgtext of group "DataK" to xerg LKLoeschen end if end if else put "Bitte Datensatz ID eingeben" into fld "fdlay" wait 3 seconds LKLoeschen end if end mouseUp
für mySQl müsstest du nur die Anmeldung ändern :
put revOpenDatabase(“mysql”, “www.server.com”, dbName, userName, passWort) into dbid
Ich habe meine Infos beim LiveCode-Papst (Hauke Fehr) gefunden:
Beste Grüße
Herby -
Mai 16, 2019 um 12:04 Uhr #14842
Hallo Freunde,
ich habe hier noch zwei sehr pratkische Funktionen für euch:
function q tString return QUOTE & tString & QUOTE end q function q2 tString return "'" & tString & "'" end q2
Gerade beim Arbeiten mit Datenbanken sehr nützlich, damit entfällt das Rumgehample mit einfachen/doppelten Anführungszeichen. Ab ins Stackskript damit und ihr könnt sowas machen:
# Vorher: put "UPDATE Stapel SET Karte1 = '" &k1& "', Karte2 = '" &k2& "' WHERE ID = "&x1 into sq ... # Nachher put "UPDATE Stapel SET Karte1 =" && q2(k1) & ", Karte2 =" && q2(k2) && "WHERE ID = " & x1 into sql ...
Und:
# Vorher: put QUOTE & "irgendwas, was in Anführungszeichen gehört..." & QUOTE into tVar ... # Nachher put q("irgendwas, was in Anführungszeichen gehört...") into tVar ...
Vielleicht ist das was für euch…
Gruß
Klaus
-
Mai 16, 2019 um 12:07 Uhr #14846
na das sieht doch ganz nett aus – probiere ich gerne aus
-
Mai 16, 2019 um 12:25 Uhr #14850
Noch ein guter Tip:
Benennt all eure externen Dateien, wie Datenbanken, Stacks, Bilder, Sounds und Videos mit KLEINBUCHSTABEN.Android und iOS sind CASE-Sensitive Betriebsysteme -> Teststack.livecode <> teststack.livecode
Auf dem Desktop und in der IDE ist das egal, und diese Tatsache könnte zu unliebsamen Überraschungen führen.So braucht ihr nicht nachzudenken oder nachzugucken, wie die Datei, die ihr gerade im Skript verwendet, nun genau geschrieben wird! Weitersagen! 😎
-
Mai 16, 2019 um 12:58 Uhr #14852
ok, mach ich und habs meiner Frau auch gesagt…. (die macht aber nix mit LiveCode^^)
-
Mai 16, 2019 um 13:02 Uhr #14856
ok, mach ich und habs meiner Frau auch gesagt…. (die macht aber nix mit LiveCode^^)
LOL! 😀 😀 😀
-
September 5, 2019 um 18:10 Uhr #16266
Auch hier geht es endlich weiter mit dem Projekt. 😀 Ich möchte nun folgendes umsetzen:
Nach der Registrierung soll die E-Mail Adresse überprüft werden (Also ist die eingetragene E-Mail Adresse auch eine E-Mail Adresse …) und das Passwort in einen hashwert umgewandelt werden, dieser soll dann in die Datenbank eingetragen werden und später soll beim Login der Hashwert in der Datenbank und der Hashwert des Passwortes was beim Login eingetragen wurde verglichen werden. Hat damit jemand Erfahrung und kann mir Tipps geben, wie dieses Projekt am besten umsetzen könnte?
-
September 6, 2019 um 11:26 Uhr #16268
Hi JB,
meinst Du eine Emailadresse validieren?
Dazu solltest Du im Netz ein paar RegEX Sachen finden.
Leider ist RegEx für mich immer noch ein Buch mit 42 Siegeln. 😀Sonst einfach mit der in der Datenbank für diesen User gespeicherten Adresse vergleichen.
Passwort:
Dazu solltest Du den MD5Digest der Passwörter speichern und später vergleichen.... put fld "unverschlüsseltes passwort" into tPass put md5digest(tPass) into verschlüsselt_und_binär put base64encode(verschlüsselt_und_binär) into verschlüsselt_als_text ## Nun kannst Du verschlüsselt_als_textr in der Datenbank als Text speichern ...
Später dann wieder base64DEcoden und die Werte vergleichen:
... if base64DEcode(PWD_Wert_aus_Datenbank) = md5Digest(fld "frisch eingegebenes passwort") then ## Passwort korrekt, mach Dein Ding... end if ...
You get the picture. 🙂
Auf diese Weise wird kein Passwort unverschlüsselt irgendwo (im Skript o.ä.) gespeichert und der Aufwand, den MD5Digest zu knacken ist immens, aber machbar, wie jegliche Verschlüsselung.Gruß
Klaus
-
September 12, 2019 um 21:34 Uhr #16332
Hallo Klaus,
vielen Dank für deine Hilfe. Das verschlüsseln und das anschließende speichern in der Datenbank funktioniert wunderbar. An dem Thema mit der Mail Adresse werde ich noch arbeiten. Zur Zeit versuche ich den Login zum laufen zu bringen. Der Nutzer gibt ja seine Mail Adresse wieder ein und dann muss ja geschaut werden ob überhaupt so ein Nutzer vorhanden ist und wenn ja, muss von seinem Account das verschlüsselte Passwort ausgelesen werden. Wie bekomme ich das dazugehörige Passwort zu seiner Mail Adresse wieder aus der Datenbank ausgelesen? Kann man auch so eine Art Session für den Nutzer erstellen? Es soll nämlich ständig überprüft werden ob der Nutzer angemeldet ist. Also einmal anmelden und immer wieder Zugriff auf den Mitgliederbereich beim starten der App erhalten (wenn man sich nicht abgemeldet hat oder nicht “angemeldet bleiben” geklickt hat).
Lg Julian
-
September 12, 2019 um 21:45 Uhr #16334
Hi Julian,
Wie bekomme ich das dazugehörige Passwort zu seiner Mail Adresse wieder aus der Datenbank ausgelesen?
Ein einfacher SQL Befehl:
... select passwort from wasauchimmer where email = 'des_users@email.de' ...
Kann man auch so eine Art Session für den Nutzer erstellen?
Sorry, keine Ahnung, was Du damit meinst?
Gruß
Klaus
-
September 12, 2019 um 22:09 Uhr #16336
put fld "Mail" into eingegebe_mail put fld "Passwort" into eingabe_passwort put revOpenDatabase("mysql", "*****", "*****", "*****", "*****") into dbid put "SELECT passwort FROM nutzerdaten WHERE mail = eingabe_mail" into sql put revDataFromQuery(comma,return,dbid,sql) into PWD_Wert_aus_Datenbank revCloseDatabase dbid if base64DEcode("PWD_Wert_aus_Datenbank") = md5Digest(fld "eingabe_passwort") then answer "juhu" end if
Dies ist jetzt mein Code. Die Zeile mit der if Abfrage wird mit einem gelben Pfeil angezeigt, wenn man das Programm ausführen möchte. Dazu kommt folgende Fehlermeldung: “button “Anmelden_btn”: execution error at line 33 (Chunk: no such object), char 1″
-
September 12, 2019 um 22:30 Uhr #16338
Mit Session meine ich die Speicherung des Logins. Damit der Nutzer wenn er die Checkbox “Angemeldet bleiben” beim Login anklickt sich nicht mehr erneut einloggen muss. Also wenn er die App schließt und dann wieder öffnet, müsste er sich nicht mehr anmelden, er wird nämlich sofort in den Motgliederbereich weitergeleitet. Wenn er die Checkbox nicht anklickt. Muss er sich bei jedem neuen Start der App neu anmelden.
-
September 12, 2019 um 22:32 Uhr #16340
Hi Julian,
keine Ahnung, was bei Dir in Zeile 33 steht, aber hier ein paar Fixes:
... put fld "Mail" into eingegebe_mail put fld "Passwort" into eigabe_passwort put revOpenDatabase("mysql", "*****", "*****", "*****", "*****") into dbid ### put "SELECT passwort FROM nutzerdaten WHERE mail = eingabe_mail" into sql ### Du übergibst den STRING eingabe_mail, aber nicht den WERT in dieser Variable put "SELECT passwort FROM nutzerdaten WHERE mail =" && q2(eingabe_mail) into sql ## q und q2 Funktionen siehe mein zweites Posting hier oben! put revDataFromQuery(comma,return,dbid,sql) into PWD_Wert_aus_Datenbank revCloseDatabase dbid ### if base64DEcode("PWD_Wert_aus_Datenbank") = md5Digest(fld "eingabe_passwort") then ### Dito hier: if base64DEcode(PWD_Wert_aus_Datenbank) = md5Digest(fld "eingabe_passwort") then answer "juhu" end if ...
Gruß
Klaus
-
September 12, 2019 um 22:34 Uhr #16342
Session:
Du kannst das Passwort bzw. den MD5 Digest davon auf der HD abspeichern.
Oder meinst Du etwas Anderes? -
September 16, 2019 um 20:36 Uhr #16376
Hallo, ich habe nun versucht diesen Code so umzusetzen. Allerdings erhalte ich folgende Fehlermeldung beim ausführen:
https://www.bilder-upload.eu/bild-a0cba0-1568658917.png.html -
September 16, 2019 um 20:42 Uhr #16378
Ja nun, Du musst auch meine beiden Funktionen q und q2, siehe weiter oben, auch in Dein Stackskript kopieren, das sind KEINE in LC eingebauten Befehle! 😎
Dann kannst Du in der ersten Zeile auch wieder Tipparbeit sparen:
... ## put QUOTE & fld "Mail" & QUOTE into eingegebene_mail put q(fld "Mail") into eingegebene_mail ...
-
September 18, 2019 um 20:43 Uhr #16393
Ich habe jetzt ein wenig herum probiert und ich habe eine funktionierende Lösung gefunden:
on mouseUp pMouseButton put fld "Mail" into eingegebene_mail put fld "Passwort" into eingabe_passwort put revOpenDatabase("XXXXX", "XXXXX", "XXXXX", "XXXXX", "XXXXX") into dbid put "SELECT passwort FROM nutzerdaten where mail='" & eingegebene_mail & "'" into sql put revDataFromQuery(comma,return,dbid,sql) into PWD_Wert_aus_Datenbank revCloseDatabase dbid put md5digest(eingabe_passwort) into verschlüsselt_und_binär put base64encode(verschlüsselt_und_binär) into verschlüsselt_als_text if PWD_Wert_aus_Datenbank = verschlüsselt_als_text then answer "juhu" end if end mouseUp
Was sagst du zu dieser Variante? 😀 Ich wurde daraufhin gewiesen, dass man MD5 nicht mehr nutzen sollte, man sollte am besten ein anderes Verfahren nutzen, geht das bei LiveCode? Zum Beispiel wurde SHA2-256 als bessere Variante genannt.
-
September 18, 2019 um 21:10 Uhr #16395
LC unterstützt eine Menge Verschlüsselungsverfahren, aber die sind nicht ganz so komfortabel zu benutzen wie md5digest(). Lies mal im Dictionary über ENCRYPT und DECRYPT nach.
Aber da ALLES irgendwie geknackt werden kann, auch hier die Frage, sind die Daten so wichtig, daß sich jemand die Mühe machen würde, den MD5DIGEST dafür zu knacken? Ist ja nun auch nicht gerade eine triviale Aufgabe. 🙂
-
September 18, 2019 um 21:13 Uhr #16397
Alles klar, vielen Dank nochmal für deine Hilfe und vor allem für deine Geduld mit mir als Neuling.
Es geht ja um einen Login und ich weiß nicht wie sicher so etwas sein sollte, besser als Klartext ist es auf jeden Fall. Wie findest du den Code? kann man das so machen oder hast du noch Tipps, wie man etwas besser und professioneller machen kann?
-
September 18, 2019 um 21:55 Uhr #16399
Dein Code ist durchaus OK, könnte glatt von mir sein! 🙂
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.