| Autor |
Beitrag |
dorian_89
      
Beiträge: 43
Win XP
Delphi 2005; Html
|
Verfasst: Di 24.01.06 15:31
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  ??
Schon mal vielen vielen Dank im vorraus
Dorian Moderiert von raziel: Topic aus Sonstiges (Delphi) verschoben am Mi 25.01.2006 um 10:23
_________________ Der Punker am Rechner
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Mi 25.01.06 11:14
Hallo!
Zu erst musst du mal die Textdatei von Deinem Webserver auf deinen Rechner übertragen. Such mal im Delphi-Forum nach INTERNETOPEN. Dann findest Du unter anderem dieses und dieses Topic. In beiden ist eine Funktion gepostet, die eine Datei vom Server läd und diese auf dem Computer abspeichert.
Wenn Du diese Textdatei hast kannst du die Kundennummer und das Kennwort suchen und überprüfen lassen.
Zum Thema Sicherheit sage ich mal bewusst nichts.
Lg Martin
_________________ Ein Nutzer der Ecke
|
|
breakdancer1111
      
Beiträge: 148
Windows 7 Home Premium 64Bit
Delphi XE2 Starter
|
Verfasst: Mi 25.01.06 15:28
Wäre sicher sinvoller die Daten in einer MySql Tabelle auf
dem Webserver zu lagern.
|
|
dorian_89 
      
Beiträge: 43
Win XP
Delphi 2005; Html
|
Verfasst: 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  !)
|
|
WolfB
      
Beiträge: 39
WinXP Professional
Delphi 7
|
Verfasst: 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 
      
Beiträge: 43
Win XP
Delphi 2005; Html
|
Verfasst: 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
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Do 26.01.06 16:19
Dann sag uns doch was Delphi da als ersts rot unterstreicht.
_________________ Ein Nutzer der Ecke
|
|
dorian_89 
      
Beiträge: 43
Win XP
Delphi 2005; Html
|
Verfasst: 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
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: 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
_________________ Ein Nutzer der Ecke
|
|
dorian_89 
      
Beiträge: 43
Win XP
Delphi 2005; Html
|
Verfasst: 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
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: 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
_________________ Ein Nutzer der Ecke
|
|
dorian_89 
      
Beiträge: 43
Win XP
Delphi 2005; Html
|
Verfasst: 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 
      
Beiträge: 43
Win XP
Delphi 2005; Html
|
Verfasst: Do 26.01.06 16:49
oh, und das Semikolon hinter der variable
Delphi-Quelltext
Ist auch noch unterstrichen
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: 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:
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
_________________ Ein Nutzer der Ecke
|
|
dorian_89 
      
Beiträge: 43
Win XP
Delphi 2005; Html
|
Verfasst: 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
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: 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.
_________________ Ein Nutzer der Ecke
|
|
dorian_89 
      
Beiträge: 43
Win XP
Delphi 2005; Html
|
Verfasst: 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
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Do 26.01.06 17:13
Bei mir (Delphi 7) klappt es ohne Probleme. Hier mal der Code den ich zum testen verwendet habe:
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; |
_________________ Ein Nutzer der Ecke
|
|
dorian_89 
      
Beiträge: 43
Win XP
Delphi 2005; Html
|
Verfasst: 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?
|
|