Brauche ein klein wenig hilfe für mein neues projekt: Mein Serienmanager

  • Hallo liebes Autoit Forum,

    ich habe mir vorgenommen mal was vernünftiges zu machen.

    Es geht um mein neues Projekt. (Serienmanager)

    Grundgedanke (Vorwort):

    Ich bin ein kleiner Serienfreak und da die Liste meiner Lieblingsserien immer größer wird, verlier ich auch immer mehr den Überblick was ich schon gesehen hab und was nicht und wenn neue Folgen rauskommen, verpass ich die auch des öfteren.
    Es gibt zwar mehrere verschiedene Seiten, wo man nach der Regestrierung die möglichkeit hat seine Lieblingsserien zu speichern und bei den meisten Streaming Seiten sieht man sogar, welche Folgen noch geschaut werden müssen aber so richtig übersichtlich ist das nich... meist muss ich mich trotzdem wild durch meine Serien klicken um zu schauen wo es neue Folgen gibt.

    Der Hauptgrund ist eigentlich, dass ich nun soviele Serien schau, dass ich es mir nicht verzeihen könnte wenn z.b. die Seite wo ich meine Serien gespeichert hab offline geht oder einfach mein Acc gespeert oder zurückgesetzt wird etc...

    ich könnte die Serien nie alle wieder zusammen bekommen geschweige denn zu wissen welche Folgen ich geschaut hab und welche nich...

    Wie weit bin ich gekommen (Eigenbemühungen):

    Ich muss dazu sagen ich bin noch Anfänger was Programmieren betrifft.^^

    Der ein oder andere von euch schüttelt sowas sicher in 5 min aus dem Ärmel aber ich sitz da schon gut ü4 stunden an meinen bissher 29 Zeilen >,<

    Spoiler anzeigen

    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.14.4

    Author: Gehirntod Originals

    Script Function:

    Serien Manager

    #ce ----------------------------------------------------------------------------

    #include <GUIConstantsEx.au3>

    Example()

    Func Example()

    GUICreate("Serienmanager", 225 ,125)

    GUICtrlCreateInput ("Nach Serie suchen", 0, 50 , 125, 20)

    GUICtrlCreateButton ("Add", 125, 49, 25, 22)

    GUICtrlCreateButton("Meine Serien Bibliothek", 0, 0, 120, 23)

    GUICtrlCreateButton("*", 200, 0, 25, 23)

    GUISetState(@SW_SHOW)


    While 1

    Switch GUIGetMsg()

    Case $GUI_EVENT_CLOSE

    ExitLoop

    EndSwitch

    WEnd

    EndFunc


    Das Ganze sieht bissher so aus:

    Wo hängts (wobei brauch ich hilfe);

    Das Fenster an sich ist soweit fertig...

    ich brauch aber Hilfe bei der Funktionszuweisung der Buttons usw (AutoItWiki links würden mir reichen, da knoble und versuch ich selber aber grad weiss ich nich so richtig nach was ich suchen soll...)

    The End (so solls mal werden):

    wenn ich mein Serienmanager starte, möchte ich gern nur den Button für ,,Meine Serien Bibliothek"...

    Die ,,Nach Serie suchen" Suchleiste und den ,,Add Button" haben.

    Bsp;

    Ich trage meine Serie die ich gern speichern möchte in die Leiste ein und drück auf ,,Add"

    -------------------------------Z.b. ,,Die Simpsons">>>>>>>>>>>>>>>>>>>>>>

    Nun soll ,,Die Simpsons" zu meiner Serienbibliothek hinzugefügt werden

    ----------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Mit einen klick auf den Button ,,Meine Serienbibliothek", soll nun eine Liste mit all meinen Lieblingsserien auf gehen

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Wenn ich das schonmal hinbekommen würde, wär das schonmal viel wert...!^^

  • Ich glaub ich hab da was gefunden...^^

    berichtigt mich wenn ich falsch liege...

    am einfachsten wäre es doch wenn ich die Serien die in die Inputbox geschrieben werden durch drücken von ,,Add" einen iniwritebefehl ausführe?! Wenn ich das richtig verstanden habe wird nun meine Serie in eine Extra textdatei geschrieben und durch drücken auf ,,Meine Serienbibliothek" lese ich diese textdatei per iniread aus und lass mir diese als liste anzeigen?!

    versteh ich das richtig? is doch eigentlich eine gute ranngehensweise oder?^^

    • Offizieller Beitrag

    und da die Liste meiner Lieblingsserien immer größer wird

    einen iniwritebefehl ausführe

    Das beides paßt nicht zusammen. Die INI Größe ist limitiert.

    Was du vorhast, findest du schon fertig im Forum, ordentlich mit SQLite Datenbank. Kann sein, dass es als Bücher- oder Musik- oder Fotoverwaltung vorliegt - aber das ist letztlich gleich.

  • Wie BugFix oben schon erwähnt hat, gibt es sowas schon fertig.

    Wenn aber dein Programmier-Herz dafür schlägt, dass du es selbst schreiben möchtest, will dir natürlich keiner im Weg stehen.

    Ein paar kleine Tipps:

    Als Script Editor kann ich SciTE empfehlen (Vielleicht benutzt du den auch schon). Dort hast du unter anderem oben bei Tools den Koda Form Designer.

    Damit kannst du deine GUI einfach Designen ohne das du die Koordinaten selbst schreiben musst.

    Buttons kannst du mit Case $Button1 abfragen und da drunter dann einfache deine Code schreiben der ausgeführt werden soll. (Muss natürlich in einer While-Schleife stehen)

    Zum Thema Speichern der Serien:

    Ich würde dies eher in einer reinen Textdatei als in einer INI speichern. 1 Zeile = 1 Serie. Diese kannst du dann einfach mit _FileReadToArray einlesen und bekommst ein Array wo jedes Element eine Serie ist.

    Wenn du noch etwas mehr Arbeit reinstecken willst, und auch lust hast etwas neues zu lernen, kannst du die Textdatei durch eine SQLite Datenbank ersetzen.

    Hier könntest du z.B. noch weitere Spalten mit Genre, Bewertung, etc... einfügen und die Serien später danach filtern.

    Das mag sich vielleicht am Anfang etwas kompliziert anhören aber wenn man sich etwas damit beschäftigt, ist dies gar nicht so schwierig.

    Mfg timee000

  • soooo da bin ich wieder... erstmal vielen dank an Bitnugger für deine anteilnahme.^^

    Ich merk schon, dass wird bei mir ein langfristiges Projekt... bin auch noch nich viel weiter...



    Ich hab ein wenig umgebaut... ins Textfeld trage ich die Serie ein und mit ein klick auf ,,Save" speichert er es sauber Zeile für Zeile in eine .txt datei.

    ,,Clear Text" leert nur die Suchzeile...

    Wenn ich auf Serienliste drücke hätte ich gern, dass er alle meine Serien aus der .txt datei liest und mir in einem Extrafenster anzeigt. (dass klappt bissher noch nich >,< das Extrafenster öffnet sich aber anstatt meine Serien zeigt er mir nur den pfad zur .txt datei an^^)

    Frage 1: wie kann ich mir die komplette Liste meiner Serien anzeigen lassen, anstatt dem pfad?

    Frage 2: wenn ich auf ,,Save" klicke, möchte ich nicht immer wieder gefragt werden wohin es gespeichert werden soll, sondern er soll einfach die .txt datei ersetzen ohne nach zu fragen?!

    (Ich vermute, dass ich den falschen befehl benutze... ich benutzte quasi den ,,speichern unter" befehl anstatt den normalen ,,speichern" befehl nehm ich an... hab aber nix anderes finden können)

    Spoiler anzeigen

    Ich würd sagen es reicht für heute. :sleeping:

    Ich werde mich auf jedenfall die Tage in aller frische wieder sehen lassen und freu mich auf eure Antworten. -_*

    Mfg Hirni =)

  • Für den Anfang sieht das Script schon recht gut aus. :)

    Frage 1:

    Wenn du die Serien z.B. in einer MsgBox ausgeben willst, musst du natürlich vorher die Textdatei lesen. FileOpenDialog gibt nur den Pfad zurück und nicht den Inhalt der Datei.

    Also den Pfad hast du ja schon und nun kannst du diesen mit FileRead verwenden.

    FileReadLine liest immer nur 1 Zeile und wird in deinem Script auch keiner Variable zugewiesen.

    Frage 2:

    Wenn die Datei immer an der gleichen Stelle bleiben soll, dann weißt du ja wo sich die Datei befindet oder? ;)

    FileWriteLine braucht den Pfad zu der Datei, in die geschrieben werden soll. Der wird vorher bei dir mit FileSaveDialog ausgewählt. Aber wenn du den Pfad schon weißt warum nochmal abfragen?

    Hoffe ich konnte dir etwas auf die Sprünge helfen.

    MfG timee000

  • Da bin ich wieder!

    Hoffe ich konnte dir etwas auf die Sprünge helfen.

    Auf jedenfall!!!Dank dir wie verrückt für deine Unterstützung!!! =)


    Als erste Grundlage bin ich auf jedenfall zufrieden mit mir :)
    Ich trage die Serie in die Suchleiste ein, drücke auf ,,Add" und sie erscheind unten in der Liste.

    (Der ,,Add" Button speichert den Seriennamen in eine .txt datei und lässt es gleichzeitig in der Liste anzeigen)

    sm0.png

    Soweit klappt alles fürs erste... nur leider versteh ich noch nich ganz wieso :DHatte jetzt ne ganze weile das Problem, dass er mir die .txt datei als brocken (123456789ABCDEG als eine zeile und nich unternander) angezeigt hatte...oder nur eine einzige Zeile... (die restlichen zeilen fehlten)Irgendwann hatte ichs dann das er wenigstens die eine zeile aus der .txt datei mehrfach in die liste eingetragen hat (war nen kleiner Lichtblick)

    Zum Ziel kahm ich dann mit:  ,,$TxtData = "|" & StringReplace(FileRead("test1.txt"), @CRLF, "|")" es Klappte aber ich verstehs nich!...

    was macht die ,,(" vor dem ,,FileRead" befehl... würd ja auch nich schreiben: (nur ein Bsp) GUISetState(GUICtrlSetData(ID, data), @SW_SHOW) oder geht sowas?^^

    ---------------------------------------------------------------------------------------------------------------------------------------------------
    Frage 1:
    $TxtData = "|" & StringReplace(FileRead("test1.txt"), @CRLF, "|")

    1a) Was bedeuted "l"?

    1b) Was bedeuted @CRLF?

    1c) Was ist StringReplace, gehört dass ,,&" dazu oder macht es was Extra?

    1d) Wie geh ich am besten ran, wenn ich mal wieder so ein unerklärlichen Text hab?


    Frage 2:
    Der Text meiner Seriensuchleiste (inputbox) sollte beim Start markiert sein, jedoch macht es dass nicht. (Find den Fehler nicht)

    2a) Wie lautet der Befehl, dass beim Start ,,Seriensuchleiste" markiert ist damit ich gleich lostippen kann?

    ---------------------------------------------------------------------------------------------------------------------------------------------------
    Meine Hausaufgaben für die nächsten Tage:

    Hausaufgaben

    Listview-Datenbank v3

    Alinas_SQLite_BuchVw

    In den nächsten Tagen werde ich mich erstmal viel belesen und üben bevor ich weiter bastle, also nich wundern wenn ich mal paar Tage nich da bin. Ich komm wieder. xD

    ---------------------------------------------------------------------------------------------------------------------------------------------------
    Code:

    Serienmanager

    ---------------------------------------------------------------------------------------------------------------------------------------------------
    Meine Planung für die Zukunft:
    Ok als nächstes möchte ich dass ganze gern auf eine Website beziehen. (filmstarts.de
    Am aller liebsten wäre es mir, wenn ich (blöd gesagt) meine Inputbox durch diese hier ersetzen könnte:

    Suchleiste

    ---------------------------------------------------------------------------------------------------------------------------------------------------
    Dann soll er die richtige Serie finden und auswählen:

    Finde Serie

    ---------------------------------------------------------------------------------------------------------------------------------------------------
    Und nun soll er auf der Serienseite Informationen einholen wie z.b:

    Finde Informationen

    1. Genre soll im Serienmanager angezeigt werden

    2. Zusammenfassung & Details zur TV-Serie soll im Serienmanager angezeigt werden

    3. Es soll geprüft werden ob neue Folgen raus gekommen sind, entweder über den button (3.1) oder über die Staffelbuttons. (3.2)
    4.Trailer und Teaser sollen im Serienmanager angezeigt werden und per druck auf den play Button im Serienmanager Abgespielt werden.

    sm.png

    ---------------------------------------------------------------------------------------------------------------------------------------------------

    Frage 3:
    Welche Möglichkeiten hab ich um dies umzusetzen?

    wie geh ich am besten an die Sache ran?

    ---------------------------------------------------------------------------------------------------------------------------------------------------

    Merci an alle fleißigen Helfer!
    Mfg Gehirntod aka Hirni =)


    7 Mal editiert, zuletzt von Gehirntod (16. März 2018 um 14:48)

  • Da hast du auf jedenfall noch einiges vor, wenn du deine Hausaufgaben alle machen willst :)

    Zum Thema mehrere Funktionen ineinander schreiben.

    Das kannst du ohne Probleme machen. Allerdings wird dies bei vielen Funktionen immer schwerer nachvollziehbar.

    _ArrayAdd($array, StringReverse(StringTrimRight(StringReplace(GUICtrlRead($Label1), "eins", "zwei"), 5))) ; Beispiel


    Zur ersten Frage:

    a) Das "Pipe" Zeichen ist in der Regel nur ein ganz normales Zeichen. Bei AutoIt wird dies aber manchmal als Delimeter also als Trennzeichen benutzt. Wie z.B. bei GUICtrlSetData. Dort kannst du dann mehrere Werte "trennen".

    b) Ein @CRLF ist zu Deutsch ein Zeilenumbruch. Also in einer Textdatei einmal ENTER. (Aufpassen bei Linux/macOS hier sind es keine CRLF sondern LF/CR)

    c) StringReplace ersetzt, wie der Name schon sagt, Zeichen in einem String. Das & Gehört nicht dazu. Dies ist in AutoIt da um Werte "aneinanderzukleben". ("eins" & "zwei" = "einszwei")

    d) Auf einem Befehl den du nicht kennst in SciTE F1 drücken dann bekommst du die Hilfe oder Google. Dort dann nach Schlagwörtern suchen und du solltest eigentlich so gut wie immer was finden.

    Dein Befehl mit StringReplace macht im Prinzip folgendes:

    Lese alles aus der Textdatei. Ersetzte alle CRLF also Zeilenumbrüche mit einem Pipe zeichen. Weise der Variable $TxtData ein Pipe Zeichen und (&) das Ergebnis von StringReplace zu.


    Zur zweiten Frage:

    GUICtrlSetState und $GUI_FOCUS sind dein Freund ;)

    MfG timee000

  • Ich wollte schon länger ein solches Programm schreiben und hab die letzten Tage daran gebastelt.

    Ich hab das Programm jetzt fertig, du kannst es hier finden: TVShow Manager - Serienverwaltung

    Es kann eigentlich alles, was du hier auch genannt hast.

    Ich arbeite im Moment auch an einem größeren Verwaltungstool, allerdings in Java. Dort werde ich eine ähnliche Serienverwaltung ebenfalls implementieren, nur mit mehr Funktionen. Da das Projekt aber sehr umfangreich ist (Ich hab bisher fast nur Interfaces und kleinere Klassen und bin schon bei mehr als 6000 Zeilen Code...) und ich noch nicht weiß, wie lange ich dafür noch brauche hab ich das hier jetzt mit AutoIt geschrieben.

    Wenn du dir den Quellcode ansiehst kannst du auch einiges lernen. Ich hab versucht, etwas auf guten Stil zu achten (Kommentare habe ich aber vernachlässigt :D). Dies Tool hat jetzt fast 1100 Zeilen :).

    MfG Kanashius

  • ---------------------------------------------------------------------------------------------------------------------------------------------------
    Grüße,
    wie es aussieht bin ich schneller wieder da als gedacht. :whistling:
    Vielen Dank timee000 für deine schnelle Hilfe. :rock:

    Vielen Dank kanashius, dass ist ein sehr gutes Beispiel und davon werde ich sicher noch einiges lernen können.

    Ich möchte jedoch selber lernen, verstehen und basteln.

    Kommentare habe ich aber vernachlässigt


    Alinas_SQLite_BuchVw ist auch ein gutes Beispiel... ich finds schade, dass in beiden fällen keine Kommentare vorhanden sind.

    (Wäre ja vielleicht eine Idee für ein neues Tool, falls jemand langeweile hat^^ ein Kommentargenerator/ setinfo tool ;D der für fertige Skripte die Kommentare hinzufügt. Meiner Noob Meinung nach sollte es dafür einen Button im editor geben :saint:)
    ---------------------------------------------------------------------------------------------------------------------------------------------------
    Zurück zum eigentlichen Thema:

    Wie es aussieht sollte ich mir nun Kenntnisse über SQLite aneignen, wenn dass zutrifft würde ich mich freuen, wenn jemand Tutorial/s für mich hat oder eine andere Möglichkeit um mir dieses Wissen anzueignen.

    Im Editor ist SQLite unter Sprachen garnich aufgelistet aber scheint ja zu klappen...^^

    ---------------------------------------------------------------------------------------------------------------------------------------------------

    Merci an alle fleißigen Helfer!
    Mfg Gehirntod aka Hirni =)

  • Sqlite braucht man eigentlich nur 6 Befehle:

    _SQLite_Startup EInmal zum initialisieren

    _SQLite_Shutdown Einmal beim beenden des Programmes

    _SQLite_Open Zum öffnen einer Datenbankdatei

    _SQLite_Close Zum schließen einer Datenbankdatei

    _SQLite_Exec Zum Einfügen, Löschen, Bearbeiten,....

    _SQLite_GetTable2D Zum abfragen von Daten

    Dazu muss man noch SQL lernen. Und die besonderheiten dabei von SQLite berücksichtigen, dort wird nämlich nicht alles Unterstützt.

    Hier findet man für den Anfang alles wichtige: https://www.tutorialspoint.com/sqlite/index.htm

    Ansonsten in meinem Tool nach dem Exec und GetTable2D Befehl suchen, dort hab ich einige genutzt :)

    MfG Kanashius

  • Wie heißt es so schön: Learning by Doing :)

    Mein Tipp ist einfach Schritt für Schritt mit der Datenbank anfangen, also Erstellen, Spalten einfügen, Daten einfügen, etc... und sobald man nicht weiter kommt in einem Tutorial nachschauen wie die Befehle dazu aussehen.

    Auf der Seite sqliteonline.com kannst du dich austoben und mal verschiedene Querys ausprobieren.

    MfG timee000

  • Oha 6000 Zeilen Code für Krimskrams :D

    Ich habe damals (2014) sowas Ähnliches gemacht, da reichten INI Files dick aus. SQL ist für einen reinen Anfänger noch zu viel. :D

    Man muss ja erstmal INI oder was auch immer "lernen" und es sinnvoll einsetzen. :P

    Bei SQL gibt es noch viel zu lernen, bevor man es für richtige Projekte nutzen sollte.

    Da hilft nur viel zu lesen, besonders in der AutoIt Hilfe/internet. Es ist erstmal gar nicht so wichtig, alles so gut wie möglich einzubauen

    und am Ende nur die Hälfte versteht. Viel besser wäre es, ganz einfach anzufangen, falls es zu schwer ist, schraubt man einen Gang zurück

    und beschränkt sich auf ganz einfache Testscripts. :)

  • Hallo liebes Autoit Forum,

    da bin ich wieder. :saint:

    -------------------------------------------------------------------------------------

    SQL ist für einen reinen Anfänger noch zu viel.

    Bin ja auch kein reiner Anfänger... noch Grün hinter den Ohren aber kein Anfänger.^^

    Hab schon mehrere kleine Pixelsearch Sachen gemacht, healscripts usw. hab vor kurzen ein Bewerbungscript gebastelt, welches Anschrift und Email aus einer Tabelle nimmt... in meiner Bewerbung einfügt, daraus eine PDF Mappe erstellt und dann die Email verschickt. viele kleine Projekte halt.


    Unrecht hast du jedoch nich... sehr viel Input und viel zuviele:?:in meinem Kopf.

    Ich habe damals (2014) sowas Ähnliches gemacht, da reichten INI Files dick aus.

    Wenn ich damit meine Ziele umsetzen kann, reicht mir dass völlig aus. :/

    -------------------------------------------------------------------------------------

    Der Stand der Dinge:

    Es wird alles ein wenig verwirrend und viele Fragen tun sich auf, deshalb würd ich gern erstmal alles ordnen und verstehen was bei mir im Kopf hängt. Dieses Projekt ist mir sehr wichtig... ich belese mich auch gern weiterhin Stundenlang und tüftle und knoble aber wie ich die Sache sehe, brauche ich ab und an mal ein Schubs in die richtige Richtung, ein guten Tipp oder einfach nur ein kleinen Lichtblick am Horizont.^^

    Daher bin ich euch, die mir so fleißig zur Hilfe stehen echt Wahnsinnig Dankbar!

    Ok, ich würd sagen fangen wir nochmal ganz von vorne an. :Face:

    Ich würde gern noch einmal darüber reden/ den plan durchgehen bzw meine Optionen überdenken...

    -------------------------------------------------------------------------------------

    Was hab ich seit dem letztem mal geschafft:
    kurz gesagt: umgesetzt hab ich noch nix.

    Ich habe mich auf https://www.tutorialspoint.com/sqlite/index.htm belesen... SQLite installiert und schon ein wenig vertraut gemacht... auf sqliteonline.com bissl rumprobiert, ne Tabelle mit Spalten und Kopfzeilen erstellt.

    Dann habe ich mir den TVShow Manager - Serienverwaltung von Kanashius nochmal angeschaut. :D Am Anfang hab ich nur blöd durchgescrollt und hab geschaut ob ich mit irgendwas etwas anfangen kann...^^

    Ums besser zu verstehen, dachte ich mir nun ,,nehm ichs Stück für Stück auseinander und schaus mir Stück für Stück an =D so irgendwann nach 2 std STRG+F durch den Quellcode war ich immernoch nich viel weiter/schlauer als vorher und habs vorerst zur Seite gelegt xD

    -------------------------------------------------------------------------------------

    Wo drückt der Schuh/ Was hab ich auf dem Herzen:

    Wie gesagt wirds für mich alles durcheinander und dadurch unverständlich daher bitte ich euch mir auf die Sprünge zu helfen... damit ich die ganze Sachlage richtig verstehe.
    Hauptgrund weshalb ich vorerst nich weiter gebastelt habe ist:

    SQLite - Injection

    If you take user input through a webpage and insert it into a SQLite database there's a chance that you have left yourself wide open for a security issue known as SQL Injection.

    Klingt uncool... wie darf ich das genau verstehen?

    Bekomm ich durch Falsche befehle bzw durch falsches deklarieren Sicherheitsprobleme? :(

    Davon hab ich mich vorerst nich entmutigen lassen und hab den sqliteonline.com Tipp von timee000 angeschaut und getestet...

    nur leider kann ich dort nicht alle Befehle bzw nur wenige Befehle nutzen...

    wiederrum, wie Kanashius schon sagte:

    Sqlite braucht man eigentlich nur 6 Befehle

    und werden wiederrum in Autoit ganz anders geschrieben...

    Irgendwie hab ich jetzt den Faden verloren...

    Was soll ich nun lernen?

    Wie mache ich weiter?

    Oder soll/kann ich das wie xSunLighTx3 schon sagte mit .ini Files regeln wie zb in http://ritzelrocker04.bplaced.net/wordpress/tutorials/ini-dateien/ beschrieben...

    Bin mir selber grad unsicher wie ichs am besten realisieren könnte...

    Sagen wir mal so... Solange ich keine Sicherheitsprobleme bekomme, lerne und teste ich auch gern SQLite weiter und mach ne schmucke Datenbank...

    ich hätte aber auch nix dagegen, wenn ichs schneller mit weniger Kopfschmerzen durch .ini Files hin bekommen könnte... was sagt ihr?

    *bitte macht mir mut* xD :saint:

    Reicht für heute

    Mfg Hirni ;)

  • Klingt uncool... wie darf ich das genau verstehen?

    Bekomm ich durch Falsche befehle bzw durch falsches deklarieren Sicherheitsprobleme? :(

    Das kann passieren wenn man Userinput in noch zu interpretierenden Befehlscode unterbringen muss.

    Beispiel:

    Es gibt eine Tabelle User mit Name und Passwort und seinem Kontostand.

    Ein User meldet sich über dein Programm an und möchte seinen Kontostand erfragen.

    Das willst du aber nur zulassen wenn er das richtige Passwort gibt.

    Also könnte eine (naive) SQL-Abfrage hierfür z.B. so aussehen:

    SELECT Kontostand from USER WHERE Passwort = "hierkommtdasPasswortrein";

    Das Passwort muss jedoch noch eingefügt werden.

    Also In AutoIt wird der Befehlsstring z.B. dann so zusammengebaut.

    AutoIt
    $s_Passwort = InputBox(...)
    $s_Query = 'SELECT Kontostand from USER WHERE Passwort = "' & $s_Passwort  '";'

    Eine SQL-Injection könnte man in dem Fall dann erreichen wenn man es schafft mit dem übergebenen Daten den Befehlsstring selbst abzuändern.

    Beispielsweise wenn man als Passwort folgendes einträgt:

    " Or "" = "

    das hätte dann nämlich folgenden String in $s_Query zur Folge:

    AutoIt
    SELECT Kontostand from USER WHERE Passwort = "" Or "" = "";

    Diese Bedingung wird auch dann erfüllt wenn das Passwort nicht das richtige ist.

    Um sich jedoch zu schützen muss man im Grunde nur die Usereingaben so behandeln dass entsprechende Sonderzeichen ihre Bedeutung verlieren und wirklich nur ein String bleiben.

    Für SQLite in AutoIt gibt es hierfür z.B. _SQLite_Escape die Funktion _SQLite_Escape.

    Im konkreten Fall würde er den Anführungszeichen durch Verdopplung ihre Bedeutung für den SQLite-Interpreter nehmen.

    Der übergebene Befehl würde also nach der Behandlung von $s_Passwort mit _SQLIte_Escape so aussehen:

    SELECT Kontostand from USER WHERE Passwort = """ Or """" = """;

    Wenn man sich konsequent daran hält Input von außen entsprechend zu behandeln gibt es nicht wirklich ein Problem.

    Gibt noch andere Methoden welche das Problem ebenfalls beseitigen können aber für den Standard-AutoIt-SQLite-Fall wäre dies das normale Vorgehen.

  • Gehirntod, du kannst dir ja mal folgende Punkte die nächsten Monate durchlesen, wenn du wirklich SQL lernen willst:

    indizes

    constraints

    index

    view

    DDL/DML

    transaction/commit/rollback