Entwickler-Ecke
Internet / Netzwerk - Passwortabfrage von Server
dorian_89 - Di 24.01.06 15:31
Titel: Passwortabfrage von Server
Hallo
Ich bin in Delphi sehr sehr unerfahren und schlecht, also ein wahrer Anfänger (erst seit gut einem viertel bis halben Jahr). Ich schreibe aber gerade an einem programm, welches es ermöglicht Eine Bestellung aufzugeben und abzuschicken. Nun muss natürlich auch überprüft werden ob der Nützer des Programms über die Berechtigung verfügt etwas zu bestellen. Ich dachte mir daher ich stelle die Kundennummern und Passwörter in einem Textdokument auf dem Webserver zur Verfügung. Nun soll in eine textbox die Kundennummer eingegeben werden, in eine andere textbox das Passwort. Diese sollen nun mit den Dateien auf dem Server abgeglichen werden und entweder das e-mail Programm starten oder die meldung ausgeben: 'Kundennummer und Passwort stimmen nicht überein.' Ich bin schon so weit, dass er eine Meldung ausgibt wenn nichts in eine der beiden textboxen eingetragen worden ist, und sonst das e-mail programm startet und so weiter.
Kann mir einer von euch sagen wie man die kundennummer mit dem passwort abgleichen kann? Ich hab hier im Forum einige Möglichkeiten mit Stringlists gesehen, allerdings weis ich nicht einmal was das ist, geschweige denn wie sie funktionieren. Sollte es also damit gehen, könntet ihr mir dann erklären wie ich das anzustellen hab, oder einen Quelltext geben, den ich dann selbst durcharbeite und verstehe :les: ??
Schon mal vielen vielen Dank im vorraus
Dorian
Moderiert von
raziel: Topic aus Sonstiges (Delphi) verschoben am Mi 25.01.2006 um 10:23
breakdancer1111 - Mi 25.01.06 15:28
Wäre sicher sinvoller die Daten in einer MySql Tabelle auf
dem Webserver zu lagern.
dorian_89 - Mi 25.01.06 22:10
Ich bin mir schon bewusst, dass das nicht sehr intelligent und sicher ist, aber ich hab das Prog ja nur geschrieben, um in der Schule ein biischen anzugeben, ich lerne Delphi ja wie gesagt erst seit nem guten viertel Jahr, und von MySql versteh ich nichts, von Php auch nicht, sondern nur von html. Also ist es ja völlig egal, ob das sicher ist oder nicht, ist ja nur zum Fun, mir ist aber vor dem Rechner keine Idee für 'n Prog gekommen, sondern nur die des Bestellprogramms.
Vilen dank für die Posts, aber wenn ich nun die Datei geöffnet hab, wie kann ich ihm sagen die Kundennummer und das Passwort zu überprüfen?
(Entschuldigung für die blöden Fragen, aber mein Informatiklehrer hat auch keine Ahnung von Delphi, obwohl er das ja eigentlich haben sollte :lol: !)
WolfB - Do 26.01.06 09:59
also. das ist eine textdatei richtig? wenn ja, dann erklär ich das hier mal. du musst die datei in eine stringlist laden. hier ein beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure wasauchimmer; var liste: tstringlist; begin liste:= tstringlist.create; liste.loadfromfile('c:\'); end; |
in die klamme bei loadfromfile kommt dann der pfad, also mit allen ordnern und der datei name. wenn du nun die stringlist durch gehst, zb mit einer for-schleife, greifst du folgendermaßen auf die einzelnen elemente zu, die dann strings sind:
Delphi-Quelltext
1: 2:
| for i:=0 to liste.count-1 do text:= liste[i]; |
nun wird in die variable text, die ein string sein muss, die zeile i der stringlist geladen. und dann kannste die wie n normalen string behandeln und überprüfen was du möchtest. das liste.count bedeutet, dass der das so oft macht, wie die liste elemente hat. wichtig: eine stringlist startet mit dem 0ten element und daher muss die -1 hinter liste.count, da er sonst ein element am ende sucht, was nicht in der liste existiert.
hoffe ich konnte dir das einigermaßen erklären ^^
bis dann
dorian_89 - Do 26.01.06 16:17
Also, ich bin inzwischen so weit, dass ich die Passwörter und Kundennummmern von meinem Rechner laden kann, allerdings noch nicht aus dem Internet. Mit den Posts, die mir freundlicherweise verlinkt worden sind, fang ich gar nichts an. Wenn ich die Quelltexte kopiere, unterstreicht delphi lediglich 50% rot. Kann mir jemand eine genaue Erklärung, oder einen Quelltext zum öffnen einer .txt aus dem Internet geben?
Danke Dorian
Martin1966 - Do 26.01.06 16:19
Dann sag uns doch was Delphi da als ersts rot unterstreicht.
dorian_89 - Do 26.01.06 16:29
Vielleicht liegt es ja auch an meiner eigenen Dummheit. Kann mir jemand sagen, wo ich die Funktion einfügen muss?
Im Moment habe ich sie unter
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| private
public constructor Create; end;
function CheckUrl(url: string): boolean; var |
sthen ist das richtig?
Martin1966 - Do 26.01.06 16:31
dorian_89 hat folgendes geschrieben: |
| sthen ist das richtig? |
Ne, das ist falsch.
Die Funktion muss im Implementation-Abschnitt eingefügt werden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Implementation
Uses
|
Warum benutzt du die Funktion
CheckUrl und nicht
GetInetFile?
Lg Martin
dorian_89 - Do 26.01.06 16:38
Danke, aber 2 Sachen:
1. Meine Uses stehen unter Interface
und 2. Die hälfte des Quelltextes ist immer noch rot, fehlen da noch bestimmte Einträge in uses o.ä?
Einige Beispiele für unterstrichene Wörter:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| HInternet f: File; InternetOpen INTERNET_OPEN_TYPE_PRECONFIG InternetOpenURL InternetReadFile BlockWrite InternetCloseHandle InternetCloseHandle |
Fals dies keine Fehler, sondern anzugleichende Tags sind, bräuchte ich Hilfe dabei, denn ich versteh davon kaum ein Wort.
Martin1966 - Do 26.01.06 16:43
dorian_89 hat folgendes geschrieben: |
| 1. Meine Uses stehen unter Interface |
Das ist auch ok. In beiden Abschnitten (Interface und Implementation) kann die Uses Klausel definiert werden. Wichtig jedefalls ist: Die Implementation muss nach der Uses Klausel erfolgen.
dorian_89 hat folgendes geschrieben: |
| und 2. Die hälfte des Quelltextes ist immer noch rot, fehlen da noch bestimmte Einträge in uses o.ä? |
Ja richtig. Die Unit
WinInet.
Lg Martin
dorian_89 - Do 26.01.06 16:46
Dabke, aber wieder 2 Sachen:
1. Der Bezeichner Blockwrite ist Delphi weiterhin unbekannt und
2. Wie kann ich nun die geöffnete Datei (oder was diese Funktion auch immer bewirkt) weiterverwenden, also als Stringlist setzten?
Dorian
dorian_89 - Do 26.01.06 16:49
oh, und das Semikolon hinter der variable
Ist auch noch unterstrichen
Martin1966 - Do 26.01.06 16:57
dorian_89 hat folgendes geschrieben: |
| 1. Der Bezeichner Blockwrite ist Delphi weiterhin unbekannt |
Hm, komisch. Die Blockwrite Procedure ist in der Unit System implementiert und die sollte eigentlich automatisch inkludiert werden.
dorian_89 hat folgendes geschrieben: |
| 2. Wie kann ich nun die geöffnete Datei (oder was diese Funktion auch immer bewirkt) weiterverwenden, also als Stringlist setzten? |
Du solltest schon versuchen die Funktion zu verstehen. Die Funktion versucht eine Datei aus dem Web auf deinen Compunter zu speichern. Eigentlich könntest du den Zwischenschritt, also das speichern auf deiner Festplatte, rausnehmen und direkt die Daten weiter verarbeiten.
Hier mal die geänderte Version die direkt das ganze als String zurück gibt. Bin aber nicht sicher ob die funktioniert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| function GetInetFile(const fileURL: String): String; var hSession, hURL: HInternet; Msg: Array [0..4096] of Char; BufferLen: DWORD; sAppName: string; begin Result:=''; sAppName := ExtractFileName(Application.ExeName); hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try hURL := InternetOpenURL(hSession, PChar(fileURL), nil,0,0,0); try Repeat FillChar (Msg, SizeOf (Msg), 0);
If InternetReadFile (hURL, @Msg[0], Pred (SizeOf (Msg)), BufferLen) Then Result := Result + Msg Else Break; Until BufferLen = 0; finally InternetCloseHandle(hURL) end finally InternetCloseHandle(hSession) end end; |
Lg Martin
dorian_89 - Do 26.01.06 17:06
Danke, aber weiterhin die Frage: Wie werte ich die ausgegeben Dateien aus
(Nun ist immernoch FillChar unterstrichen, Delphi meint: Nicht deklarierter Bezeichner)
Martin1966 - Do 26.01.06 17:08
dorian_89 hat folgendes geschrieben: |
| Danke, aber weiterhin die Frage: Wie werte ich die ausgegeben Dateien aus |
Äh? Du musst doch wissen wie du deine Datei aufgebaut hast. Und der Inhalt dieser Datei befindet sich in dem String die von der Funktion zurückgegeben wird.
dorian_89 - Do 26.01.06 17:09
Oh, stimmt danke *peinlich*
Allerdings:
Delphi-Quelltext
1: 2: 3:
| hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); |
Ist eine ungültige Typenumwandlung (laut Delphi)
Martin1966 - Do 26.01.06 17:13
Bei mir (Delphi 7) klappt es ohne Probleme. Hier mal der Code den ich zum testen verwendet habe:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| Uses WinInet;
function GetInetFile(const fileURL: String): String; var hSession, hURL: HInternet; Msg: Array [0..4096] of Char; BufferLen: DWORD; sAppName: string; begin Result:=''; sAppName := ExtractFileName(Application.ExeName); hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try hURL := InternetOpenURL(hSession, PChar(fileURL), nil,0,0,0); try Repeat FillChar (Msg, SizeOf (Msg), 0);
If InternetReadFile (hURL, @Msg[0], Pred (SizeOf (Msg)), BufferLen) Then Result := Result + Msg Else Break; Until BufferLen = 0; finally InternetCloseHandle(hURL) end finally InternetCloseHandle(hSession) end End;
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Text := GetInetFile ('http://www.delphi-forum.de'); end; |
dorian_89 - Do 26.01.06 17:16
Ich hab allerdings nur Delphi 2oo5, und FillChar, sowie die Typenumwandlung sind auch bei dem neuen Code ein Problem von Delphi.
Wo liegt das Problem?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!