LiveCode Blog
  • Blog
  • Über diese Seiten
  • Forum
    • Forum-Suche
  • Log In
  • Registrieren
Seite wählen

Einfacher Login mit MySql Datenbank

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 3 Jahre, 6 Monaten von Klaus Major.
Ansicht von 30 Antwort-Themen
  • Autor
    Beiträge
    • Mai 12, 2019 um 15:57 Uhr #14762
      JB1002000
      Teilnehmer

        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
        Klaus Major
        Verwalter

          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-database

          Hinweis:
          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
          JB1002000
          Teilnehmer

            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
            Klaus Major
            Verwalter

              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
              JB1002000
              Teilnehmer

                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
                Klaus Major
                Verwalter

                  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
                  JB1002000
                  Teilnehmer

                    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
                    JB1002000
                    Teilnehmer

                      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
                      Klaus Major
                      Verwalter

                        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
                        JB1002000
                        Teilnehmer

                          Alles klar, ich versuche es dann mal. Danke schon mal für die Hilfe. 🙂

                        • Mai 14, 2019 um 13:09 Uhr #14818
                          Klaus Major
                          Verwalter

                            Stets zu Diensten, der Herr! 🙂

                          • Mai 16, 2019 um 11:22 Uhr #14836
                            Herby
                            Teilnehmer

                              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:

                              Keine Angst vor Datenbanken – eine kleine Einführung

                              Beste Grüße
                              Herby

                            • Mai 16, 2019 um 12:04 Uhr #14842
                              Klaus Major
                              Verwalter

                                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
                                Herby
                                Teilnehmer

                                  na das sieht doch ganz nett aus – probiere ich gerne aus

                                • Mai 16, 2019 um 12:25 Uhr #14850
                                  Klaus Major
                                  Verwalter

                                    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
                                    Herby
                                    Teilnehmer

                                      ok, mach ich und habs meiner Frau auch gesagt…. (die macht aber nix mit LiveCode^^)

                                    • Mai 16, 2019 um 13:02 Uhr #14856
                                      Klaus Major
                                      Verwalter

                                        ok, mach ich und habs meiner Frau auch gesagt…. (die macht aber nix mit LiveCode^^)

                                        LOL! 😀 😀 😀

                                      • September 5, 2019 um 18:10 Uhr #16266
                                        JB1002000
                                        Teilnehmer

                                          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
                                          Klaus Major
                                          Verwalter

                                            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
                                            JB1002000
                                            Teilnehmer

                                              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
                                              Klaus Major
                                              Verwalter

                                                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
                                                JB1002000
                                                Teilnehmer
                                                  
                                                  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
                                                  JB1002000
                                                  Teilnehmer

                                                    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
                                                    Klaus Major
                                                    Verwalter

                                                      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
                                                      Klaus Major
                                                      Verwalter

                                                        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
                                                        JB1002000
                                                        Teilnehmer

                                                          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
                                                          Klaus Major
                                                          Verwalter

                                                            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
                                                            JB1002000
                                                            Teilnehmer

                                                              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
                                                              Klaus Major
                                                              Verwalter

                                                                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
                                                                JB1002000
                                                                Teilnehmer

                                                                  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
                                                                  Klaus Major
                                                                  Verwalter

                                                                    Dein Code ist durchaus OK, könnte glatt von mir sein! 🙂

                                                                • Autor
                                                                  Beiträge
                                                                Ansicht von 30 Antwort-Themen
                                                                • Du musst angemeldet sein, um auf dieses Thema antworten zu können.
                                                                Anmelden


                                                                Neueste Beiträge

                                                                • Echte Web-Apps erstellen
                                                                • Android-Apps in Windows erstellen
                                                                • Eigene Apps programmieren – die neue Fassung ist erschienen
                                                                • Auto-Complete und Live-Error in LiveCode 8.2 – ein erster Blick
                                                                • Was kann man mit LiveCode alles machen? (Und was nicht?)

                                                                Archive

                                                                • Mai 2021
                                                                • Februar 2020
                                                                • November 2019
                                                                • September 2017
                                                                • Februar 2017
                                                                • Januar 2017
                                                                • November 2016
                                                                Blogverzeichnis - Bloggerei.de
                                                                Blogverzeichnis

                                                                topblogs

                                                                TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste
                                                                • Impressum
                                                                © Hauke Fehr 2020