Autor Beitrag
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Di 15.09.09 16:57 
boah ich dreh durch... ich hab alles neu gemacht, dann die function kopiert und in dem code

ausblenden Delphi-Quelltext
1:
2:
3:
4:
if Login('benutzername''passwort''http://duckload.com/index.php?Modul=Login'then
  ShowMessage('Login war erfolgreich')
else
  ShowMessage('Login fehlgeschlagen');


den nutzer und das passwort durch meine realen daten erstetzt. absturz wegen zugriffsverletzung bei adresse...
mal ehrlich, bin ich zu blöd :evil:
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Di 15.09.09 22:18 
:? :? hab ich jetzt alle vergrault :?: :?:
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 15.09.09 22:21 
Wie wäre es mit etwas Geduld? :roll:
Richtlinien hat folgendes geschrieben:
4.6 Schiebeposting
Schiebeposting (ein Posting um sein eigenes Topic für unsere Leser wieder als ungelesen zu markieren) sind nach 24 Stunden erlaubt. Es gibt keine Begrenzung von Schiebepostings, sofern ihr Abstand 24 Stunden beträgt.


Zum Thema: In welcher Zeile passiert der Fehler denn?
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Di 15.09.09 22:50 
Zitat:
In welcher Zeile passiert der Fehler denn?

mhh, gute frage. der fehler kommt auch erst, wenn ich auf den button klicke. also das Form1 baut sich noch fehlerfrei auf.

... ist eine exception der klasse eaccessviolation mit der melung 'zugriffsverletzung bei adresse 004ab5f4 in modul 'test5projekt.exe'. lesen von adresse 00000140' aufgetreten.

zusätzlch kommt in der idhttp eine rote markierung bei der zeile 1576:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function TIdCustomHTTP.GetRequestHeaders: TIdHTTPRequest;
begin
  Result := FHTTPProto.Request; //zeile 1576
end;



hab noch ne meldung gesehen:

ausblenden Delphi-Quelltext
1:
[DCC Hinweis] test5.pas(33): H2077 Auf 'Login' zugewiesener Wert wird niemals benutzt					
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 16.09.09 06:29 
user profile iconnoo.bee hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
In welcher Zeile passiert der Fehler denn?

mhh, gute frage. der fehler kommt auch erst, wenn ich auf den button klicke.
Ja, aber was passiert dann beim Debuggen? Ich meine wenn du einen Haltepunkt dort setzt und das zeilenweise abarbeitest, dann merkst du ja in welcher Zeile der Fehler auftritt.
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Mi 16.09.09 10:40 
ok, habs zeilenweise durchgetestet. er stürzt hier ab:

in der IDHTTP.pas bei zeile 1576
ausblenden Delphi-Quelltext
1:
2:
3:
4:
1574function TIdCustomHTTP.GetRequestHeaders: TIdHTTPRequest;
1575begin
1576:   Result := FHTTPProto.Request; //zeile 1576
1577end;
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Do 17.09.09 11:02 
kann einer sagen was der fehler bedeutet und wie man den beheben kann ?
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Do 17.09.09 12:28 
user profile iconnoo.bee hat folgendes geschrieben Zum zitierten Posting springen:
kann einer sagen was der fehler bedeutet und wie man den beheben kann ?


Ich glaube kaum das in den Indys ein Fehler ist, erst recht nicht in einer Komponente die so häufig benutzt wird. Der Fehler tritt schon früher auf und zwar in deinem Code! Hast du dir den Link von Sebastian angeschaut? Poste doch bitte nochmal deinen jetztigen Code, am besten die ganze Unit (nicht das ganze Projekt).
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Do 17.09.09 12:34 
ja das hab ich mir angeschaut. aber da hab ich auch net alles richtig gemacht. und dann wurde mir ein "sauberer" code geschrieben, um überhaupt erstmal die anmeldung hinzubekommen. das teste ich also grad:

ausblenden volle Höhe 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:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
unit test5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdCookieManager, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    IdCookieManager1: TIdCookieManager;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  IdHTTP1: TIdHTTP;
implementation

{$R *.dfm}
function Login(AUserName, APassword, AURL: String):Boolean;
var
  PostData: TStrings;
  Source: String;
begin
  Result := False;

  PostData := TStringList.Create;
  try
    //Felder hinzufügen
    PostData.Add('yl_name=' + AUserName);
    PostData.Add('yl_pw=' + APassword);

    //Absenden
    Source := IdHTTP1.Post('http://duckload.com/index.php?Modul=Login', PostData);

    //Überprüfen ob der Login erfolgreich war
    Result := pos('Login war erfolgreich', Source) > 0;  //Den String musst du natürlich an die Ergebnisseite anpassen, wenn das wirklich wieder die Startseite ist, steht da sicherlich was wie "Sie sind eingeloggt" oder "Loggout DeinBenutzername", anstatt den Code der Seite zu überprüfen kannst du natürlich auch den CookieManager auswerten
  finally
    PostData.Free;
  end;
end;




procedure TForm1.Button1Click(Sender: TObject);
begin
if Login('benutzername''passwort''http://duckload.com/index.php?Modul=Login'then
  ShowMessage('Login war erfolgreich')
else
  ShowMessage('Login fehlgeschlagen');
end;

end.
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Do 17.09.09 12:42 
ausblenden Delphi-Quelltext
1:
Result := pos('Login war erfolgreich', Source) > 0;  //Den String musst du natürlich an die Ergebnisseite anpassen, wenn das wirklich wieder die Startseite ist, steht da sicherlich was wie "Sie sind eingeloggt" oder "Loggout DeinBenutzername", anstatt den Code der Seite zu überprüfen kannst du natürlich auch den CookieManager auswerten					


Einfach kopiert und nicht mal den Kommentar gelesen :x

EDIT: Das hier hast du einfach abgeändert, warum denkst du habe ich einen Parameter für die URL definiert?
ausblenden Delphi-Quelltext
1:
Source := IdHTTP1.Post(AURL, PostData);					


Auf der Form hast du ein IdHTTP welches du aus der Function nicht ansteuern kannst ohne das die Function eine methode der Form wird oder du Form1. voranstellst. Dann definierst du eine globale Variable mit gleichen Namen wie die Komponente vom Form und instantiierst sie nicht mal. Grundlagen lernen!
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Do 17.09.09 12:55 
:nixweiss: :gruebel: also das krieg ich nich mehr hin... blick ja jetzt schon kaum noch durch :shock:
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Do 17.09.09 12:59 
user profile iconnoo.bee hat folgendes geschrieben Zum zitierten Posting springen:
:nixweiss: :gruebel: also das krieg ich nich mehr hin... blick ja jetzt schon kaum noch durch :shock:

Grundlagen lernen! Wenn mich nicht alles täuscht habe ich auf der ersten Seite einen Crashkurs verlinkt...

Kleine Hilfe noch:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type
  TForm1 = class(TForm)
  ...
  function Login(...):Boolean;
  end;

...
...

function TForm1.Login(...):Boolean;
begin

end;
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Do 17.09.09 13:12 
ich hatte ja schonmal paar kleine quiz geschrieben. waren nur n paar forms miteinander verbunden, bilderlisten, if-abfragen, cases, n bissi logisches und anderer einfacher "kleinkram" rechnen. war total easy. deshalb dachte ich mir zur erleichterung mach ich mir n kleines tool für den upload. dass das natürlich so "ausartet" hätte ich nicht gedacht :/
naja wenns nix wird habsch eben pech... bisher gings ja auch übern browser - dann gehts eben so weiter ;)
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Do 17.09.09 13:44 
user profile iconnoo.bee hat folgendes geschrieben Zum zitierten Posting springen:
ich hatte ja schonmal paar kleine quiz geschrieben. waren nur n paar forms miteinander verbunden, bilderlisten, if-abfragen, cases, n bissi logisches und anderer einfacher "kleinkram" rechnen. war total easy. deshalb dachte ich mir zur erleichterung mach ich mir n kleines tool für den upload. dass das natürlich so "ausartet" hätte ich nicht gedacht :/
naja wenns nix wird habsch eben pech... bisher gings ja auch übern browser - dann gehts eben so weiter ;)


Ist ja schön und gut das du dich mit Abfragen usw. auskennst. Aber ohne zumindest die Grundkenntnisse der objektorientierten Programmierung (Objekte erstellen, etc.) zu kennen, wirst du nicht sehr weit kommen.

Aufgeben wird dich im Leben niemals weiter bringen, weder in der Programmierung noch sonst wo... Außerdem ist noch kein Meister vom Himmel gefallen :wink:

Hier noch ein bisschen Literatur:
www.delphi-treff.de/...al/delphi-crashkurs/ (insbesondere www.delphi-treff.de/...hi-crashkurs/page/8/ )
www.delphi-treff.de/...-mit-boolean-werten/
www.delphi-treff.de/.../stringverarbeitung/

Wenn du das aufmerksam liest und eine Nacht auf dich wirken lässt, sollte sich dein Problem lösen lassen. Und wenn noch Fragen sind, einfach posten :-D
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Do 17.09.09 23:57 
so, ich wieder :lol:

hab mal n bissi mit "live http headers" geschaut. jetzt klappt der login wirklich :D ich lasse mir als bestätigung den quelltext von duckload.com/member/ anzeigen, welche den LOGOUT-button hat. und den sieht man nur, wenn man eingeloggt ist.
es hat noch folgendes gefehlt:
ausblenden Delphi-Quelltext
1:
StringList.Values['yl_submit'] := 'Login';					


also so sieht die anmeldung nun aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.loginClick(Sender: TObject);
begin
  StringList := TStringList.Create;  //TStringList erstellen
  try
    StringList.Values['yl_name'] := Edit1.Text;
    StringList.Values['yl_pw'] := Edit2.Text;
    StringList.Values['yl_submit'] := 'Login';
    idhttp1.Post('http://duckload.com/index.php?Modul=Login', StringList);
    memo1.Lines.Text := idhttp1.Post('http://duckload.com/member/', StringList);
  finally
     StringList.Free; //Speicherfreigeben
end;

end;



wieder ne frage zum upload. im uploadformular steht "action" zum upload drin. jetzt ducht duckload spontan den server aus (sprich stor11, könnte aber beim nächsten mal auch storXX ... sein)
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
<form id="upload" enctype="multipart/form-data" [u]action="http://stor11.duckload.com:666/upload/upload.php"[/u] method="post" onsubmit="UploadHandler_startProgressBar('stor11.duckload.com:666','stor11'); return true;">
      <input name="MAX_FILE_SIZE" value="9589934592" type="hidden">
                    <div id="uploadForm">

                        <div class="input_file"><input name="file[]" size="70" onchange="save(this.value,'1');document.getElementById('input_file_fake_1').innerHTML=this.value;" type="file"></div>
                        <div class="input_file_fake" id="input_file_fake_1"></div>

das würde doch bedeuten, dass ich nicht einfach so hochladen kann, sondern immer erst irgendwie schauen muss, auf welchen server grad geupped werden soll. oder seh ich das falsch ?
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Fr 18.09.09 09:48 
Ja, du musst die "Action"-Adresse extrahieren, also erst Code der Seite runterladen und dann parsen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var
  s: String;
  Position1, Position2: Integer;
begin
  s := herunterladenderseite.....
  
  //sucht nach action=" und gibt die Position im String zurück, 
  //wir erhalten die Position von a möchten aber wissen was zwsichen
  // " und " steht. Also zählen wir die Länge des Suchstrings dazu
  Position1 := pos('action="', s) + 8;  
  
  //wir suchen nach dem abschließenden ", ab unserer ersten Position, 
  //könnten ja mehrere " im String sein...
  Position2 := PosEx(s, '"', Position1) - 1;  
  
  //wir kopieren den Text zwischen unseren Positionen, Copy erwartet 
  //aber nicht die Position des letzten Zeichen als dritten Parameter 
  //sondern die Anzahl der zu kopieren zeichen, da darfst du jetzt mal selbst überlegen ;-)
  s := Copy(s, Position1, ???);  
end;
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Fr 18.09.09 14:00 
kurze frage: es gibt kein PosEx, bzw muss es erst deklariert werden. aber deklarieren ist ja sicher nicht gewollt :gruebel:

ausblenden Delphi-Quelltext
1:
[DCC Fehler] duck1709.pas(70): E2003 Undeklarierter Bezeichner: 'PosEx'					
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Fr 18.09.09 14:54 
user profile iconnoo.bee hat folgendes geschrieben Zum zitierten Posting springen:
kurze frage: es gibt kein PosEx, bzw muss es erst deklariert werden. aber deklarieren ist ja sicher nicht gewollt :gruebel:

ausblenden Delphi-Quelltext
1:
[DCC Fehler] duck1709.pas(70): E2003 Undeklarierter Bezeichner: 'PosEx'					


Hättest du PosEx in die Delphi-Hilfe eingetippt, wüsstest du das die Unit StrUtils eingebunden werden muss.
noo.bee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Fr 18.09.09 17:42 
ok, parsen hat mit deiner hilfer natürlich bombig geklappt

ausblenden 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:
procedure TForm1.storXXClick(Sender: TObject);
var
  s: String;
  Position1, Position2: Integer;
begin
  s := idhttp1.Get('http://duckload.com/index.html');

  //sucht nach action=" und gibt die Position im String zurück,
  //wir erhalten die Position von a möchten aber wissen was zwsichen
  // " und " steht. Also zählen wir die Länge des Suchstrings dazu
  Position1 := pos('action="', s) +8;

  //wir suchen nach dem abschließenden ", ab unserer ersten Position,
  //könnten ja mehrere " im String sein...
  Position2 := PosEx(s, '"', Position1) - 1;

  //wir kopieren den Text zwischen unseren Positionen, Copy erwartet
  //aber nicht die Position des letzten Zeichen als dritten Parameter
  //sondern die Anzahl der zu kopieren zeichen, da darfst du jetzt mal selbst überlegen ;-)
  s := Copy(s, Position1, 48);
  edit3.Text := s; // Ausgabe des benutzten Stores

end;


beim uppen klemmts noch :nixweiss: ich hab den code genommen, den ihr mir vorgeschlagen habt und dazu die geparste url zum upload (diese steht im string 's'):
ausblenden volle Höhe 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:
procedure TForm1.uploadClick(Sender: TObject);
var
  MultiPartFormDataStream: TMsMultiPartFormDataStream;
  Response: String;
begin
   MultiPartFormDataStream := TMsMultiPartFormDataStream.Create; // Objekte instanzieren
  try
      // Content-Type bestimmen
      idhttp1.Request.ContentType := MultiPartFormDataStream.RequestContentType;

      // Formular-Felder setzen, die keine Dateien sein sollen
      MultiPartFormDataStream.AddFormField('''');
      // ...

      // Datei laden
      MultiPartFormDataStream.AddFile('file[]''c:\clock.avi''');

      // diese Methode muss _vor_ dem Senden augerufen werden
      MultiPartFormDataStream.PrepareStreamForDispatch;
      MultiPartFormDataStream.Position := 0;

      try
        // Anfrage abschicken, hier halt z.B. "deine" PHP-Datei hinsetzen
        Response := idhttp1.Post(s, MultiPartFormDataStream);

      except
        // Upload fehlgeschlagen, entsprechend reagieren
      end;
  finally
    MultiPartFormDataStream.Free;
  end;
end;
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Sa 19.09.09 09:18 
user profile iconnoo.bee hat folgendes geschrieben Zum zitierten Posting springen:


ausblenden Delphi-Quelltext
1:
  s := Copy(s, Position1, 48);					

Das wird aber nicht immer klappen. Kann doch sein das die URL irgendwann mal kürzer oder länger als 48 Zeichen ist. Wenn du die Länge des Strings und Position2 hast, lässt sich die zu kopierende Länge ganz einfach ausrechnen.

user profile iconnoo.bee hat folgendes geschrieben Zum zitierten Posting springen:
diese steht im string 's'
[delphi]


Nö, s ist in storXXClick als lokale Variable deklariert worden. Sobald storXXClick fertig ist, wird auch die Variable gelöscht.