Entwickler-Ecke

Internet / Netzwerk - Login über PHP aber nicht im webbrowser


Petros - Di 09.08.11 17:17
Titel: Login über PHP aber nicht im webbrowser
Hallo Delphi Freunde ich habe mal wer ein kleines problem.

Zu dem Thema habe ich schon einige ansätze gefunden aber es war leider nichts dabei was ich genau gesucht habe..

Mein Programm beinhaltet folgene sachen:

Chat
P2P Netzwerk
Kleines Online game
Forum (Twebbrowser)

Jetzt kann mann den chat und das Forum per IE oder FF betreten und einloggen jetzt möchte ich aber das alle sachen über das login der PHP seite laufen lassen..

Das Programm Startet + Login Fenster erscheint + Eingabe der Benutzerdaten + sind daten richtig Öffnet sich ein ein neues Fenster (Hauptfenster) + Login fenster verschwindet + im hauptfenster sind Folgene Button | Chat | Forum | Game | P2P |

Username für den Chat, P2P und Game werden aus Dem Edit Feld Login1.edit1.text ausgelesen und dem entsprechen verwendet..

Für das Forum (Twebbrowser) habe ich folgenen code der auch funktioniert.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TLogin1.Button1Click(Sender: TObject);
var
i : integer;
begin
WBForum1.webbrowser1.navigate('http://127.0.0.1/login.php');
WBForum1.webbrowser1.OleObject.document.forms.item(0).elements.item('user_name').value := Edit1.Text;
WBForum1.webbrowser1.OleObject.document.forms.item(0).elements.item('user_pass').value := Edit2.Text;
 for i := 0 to (WBForum1.WebBrowser1.OleObject.Document.forms.item(0).elements.length - 1do
begin
  if (WBForum1.WebBrowser1.OleObject.Document.forms.item(0).elements.Item(i).Value = 'Anmelden'then
  begin
   WBForum1.WebBrowser1.OleObject.Document.forms.item(0).elements.Item(i).Click;
  end;
end;


Jetzt weiß ich aber nicht wie ich die Loginform so schreibe das wenn die Daten richtig sind er Die Hauptform Öffnet und wenn die Daten falsch sind ne meldung kommt per ShowMessange('User daten falsch oder Sie sind noch nicht registriert');

Habe es schon versucht so zu schreiben aber hat nix gebracht und mir fällt auch weiter keine lösung ein...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TLogin1.Button1Click(Sender: TObject);
var sURL:String; slEintrag:TStringList;
begin
  slEintrag := TStringList.Create;
  sURL:='http://127.0.0.1/login.php';
  with
  slEintrag do
  begin
    Values['user_name'] := Edit1.Text;
    Values['user_pass'] := Edit2.Text;
  end;
  try
    Hauptform.show;
  except
    ShowMessange('User daten falsch oder Sie sind noch nicht registriert');
  end;
  slEintrag.Free;
end;


Ich hoffe es ist soweit etwas verständlich und Ihr könnt mir etwas helfen oder mir zumindest nen kleinen ansatz geben

MFG petros


Delete - Di 09.08.11 21:53

Zu deinem zweiten Code: Wie denkst du werden die Daten an das PHP Script übertragen? Per Telekinese? Schon mal auf die Idee gekommen das man noch Code braucht, um die Daten an das PHP Script zu übertragen? Und mit etwas Suchen wird man ganz schnell auf die HTTP-Komponente von den Indys stoßen. Passenden Code solltest du hier auch im Forum finden.


Petros - Mi 10.08.11 00:33

Ein paar sachen habe ich ja schon gefunden wie z.B Folgenen code habe ich gefunden und umgeschrieben

Orginal Code


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;
  stream: TStringList;
  begin
    try
    try
      Stream := TStringList.Create;
      Stream.Add('user_name'+Edit1.Text);
      Stream.Add('user_pass'+Edit2.Text);
      s := idhttp1.Post('http://127.0.0.1/login.php',stream);
      if (Pos('index.php',s) > 0then //Erfolgreich eingeloggt?
        ShowMessage('Du bist Eingeloggt.')
      else
        ShowMessage('du bist nicht eingeloggt');
    finally
      Stream.Free;
    end;
  except on E: Exception do
    ShowMessage(E.Message);
  end;


Mein veränderter Code


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
  stream: TStringList;
  begin
    try
    try
      Stream := TStringList.Create;
      Stream.Add ['user_name'] := Edit1.Text;
      Stream.Add ['user_name'] := Edit1.Text;
      s := idhttp1.Post('http://127.0.0.1/login.php',stream);
      if (Pos('index.php',s) > 0then //
        ShowMessage('Du bist Eingeloggt.')
      else
        ShowMessage('du bist nicht eingeloggt');
    finally
      Stream.Free;
    end;
  except on E: Exception do
    ShowMessage(E.Message);
  end;


den Orginal code kann ich ja nicht verwenden

Delphi-Quelltext
1:
2:
Stream.Add('user_name'+Edit1.Text);
Stream.Add('user_pass'+Edit2.Text);
da ja user_name + Edit1.text beim login nicht funktioniert..

daher musste ich es in etwa so umschreiben


Delphi-Quelltext
1:
2:
Stream.Add ['user_name'] := Edit1.Text;
Stream.Add ['user_name'] := Edit1.Text;


Dann bekomme ich aber folgene Meldung [DCC Fehler] Unit1.pas(38): E2035 Nicht genügend wirkliche Parameter

Habe auch deine ganzen Links und Posteinträge gelesen und das mit dem If und Pos ist mir ja schon klar..

PS. Ich benutze dafür PHPFusion für den Login
Hier mal die ausgabe von 's'


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:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='de' lang='de'>
<head>
<title>Testforum - Login</title>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
<meta name='description' content='' />
<meta name='keywords' content='' />
<link rel='stylesheet' href='themes/Stylo/styles.css' type='text/css' media='screen' />
<link rel='shortcut icon' href='images/favicon.ico' type='image/x-icon' />
<script type='text/javascript' src='includes/jquery/jquery.js'></script>
<script type='text/javascript' src='includes/jscript.js'></script>
</head>
<body>
<div class='wrapper'>

<div class='main-header'>
<a href='http://127.0.0.1/'><img src='images/logo.png' alt='Test Forum' style='border: 0;' /></a>
</div>
<div class='sub-header clearfix floatfix'><ul>
<li class='first-link'><a href='index.php'>
<span>Startseite</span></a></li>
</ul>
</div>
<div class='main-bg'>
<div id='side-left'><div class='scapmain-top'></div>
<div class='scapmain clearfix'>
<div class='flleft'>Navigation</div>
</div>
<div class='side-body spacer'>
<div id='navigation'>

<ul>
<li class='first-link'>
<a href='index.php' class='side'><img src='themes/Stylo/images/bullet.gif' class='bullet' alt='»' border='0' />
<span>Startseite</span></a></li>
</ul>
</div>
</div>
<div class='scapmain-top'></div>
<div class='scapmain clearfix'>
<div class='flleft'>Mitglieder Online</div>
</div>

<div class='side-body spacer'>
<img src='themes/Stylo/images/bullet.gif' class='bullet' alt='»' border='0' /> Gäste Online: 1
<img src='themes/Stylo/images/bullet.gif' class='bullet' alt='»' border='0' /> Mitglieder Online: 0

<img src='themes/Stylo/images/bullet.gif' class='bullet' alt='»' border='0' /> Mitglieder insgesamt: 16
<img src='themes/Stylo/images/bullet.gif' class='bullet' alt='»' border='0' /> Neuestes Mitglied: <span class='side'><a href='profile.php?lookup=17' class='profile-link'>Sidonia</a></span>
</div>

</div>
<div id='side-center' class='side-left'><div class='upper'></div>
<div class='content'><div class='capmain-top'></div>
<div class='capmain'>Login</div>
<div class='main-body  floatfix spacer'>
<div style='text-align:center'>
<form name='loginpageform' method='post' action='news.php'>
Benutzername
<input type='text' name='user_name' class='textbox' style='width:100px' />
Passwort
<input type='password' name='user_pass' class='textbox' style='width:100px' />
<label><input type='checkbox' name='remember_me' value='y' />Login merken</label>
<input type='submit' name='login' value='Login' class='button' />

</form>
Passwort vergessen?Um ein neues Passwort anzufordern <a href='lostpassword.php' class='side' title='klicke hier'>klicke hier</a>.</div>
</div>
</div>
<div class='lower'></div>
</div>
<div class='clear'></div>
</div>
<div class='sub-footer-top'></div>
<div class='sub-footer clearfix'>
<div class='flleft' style='padding: 15px 0 6px 0;'><!--counter-->3,468 eindeutige Besuche</div>
<div class='flright' style='padding: 15px 0 6px 0;'>10. August 2011 - 00:31:34</div>

</div>
<div class='main-footer clearfix'>
<div class='flleft'>
Powered by <a href='http://www.php-fusion.co.uk'>PHP-Fusion</a> copyright © 2002 - 2011 by Nick Jones.
Released as free software without warranties under <a href='http://www.fsf.org/licensing/licenses/agpl-3.0.html'>GNU Affero GPL</a> v3.
Theme designed by <a href='http://www.agxthemes.com'>Falcon</a></div>

<div class='flright' style='width: 50%; text-align: right;'><div style='text-align:center'>Copyright © 2011</div></div>
</div>
</div>
</body>
</html>


Petros - Mi 17.08.11 15:02

So ich habe jetzt 1 woche lang das ganze Forum durstöbert und viele viele verschiedene cods ausprobiert aber keins will so wirklich funktionieren.

Ich habe auch umgestellt auf ein ganz einfaches php login script aber da bekomm ich es auch nicht hin liegt warscheinlich daran das ich da in dem bereich nicht all zu viel ahnung habe..

Das Login script (ohne datenbank) habe ich als anhang mit beigefügt.

Hier mal der code den ich mehrmals in verschiedenen versionenn ausprobiert habe, aber nicht funktioniert oder ich keine ahnung habe wie es wirklich klappt.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
Procedure TForm1.login();
var
  HTMLCode: string;
  Params: TStringList;
begin
  Params := TStringList.Create;
  try
    Params.Add('user' + Edit1.Text);
    Params.Add('password' + Edit2.Text);
    //Params.Add('redirect=');
    //Params.Add('login = Anmelden');
    HTMLCode := IdHTTP1.Post('http://127.0.0.1/login.html', Params);

    if HTMLCode <> '' then
          ShowMessage('Login erfolgreich')
      else
        ShowMessage('Login fehlgeschlagen');

  finally
    Params.Free;
  end;
end;



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;
  stream: TStringList;
  begin
    try
    try
      Stream := TStringList.Create;
      Stream.Add('user'+Edit1.Text);
      Stream.Add('passwort'+Edit2.Text);
      s := idhttp1.Post('http://127.0.0.1/login.php',stream);
      if (Pos('Loggin_in',s) > 0then 
          ShowMessage('Login erfolgreich')
      else
        ShowMessage('Login fehlgeschlagen');
    finally
      Stream.Free;
    end;
  except on E: Exception do
    ShowMessage(E.Message);
  end;


Ich bitte euch daher um hilfe.

MFG Petros


BenBE - Mi 17.08.11 15:43

Beim Übergeben der Feld-Namen hast Du das = vergessen um Parameter-Name und Wert zu trennen. Zudem musst Du (laut deinem Script) ein Feld login übergeben. Zwischen Feldname = und Wert darf kein Leerzeichen sein.

Außerdem: Man prüft Booleans nicht mit == (und nur in Ausnahmefällen mit ===) auf ihren Wert. Mal ganz davon abgesehen, dass man Strings nicht mit !$var auf leer prüft: Dafür gibt's empty (sonst bekommst Du da sehr interessante Nebeneffekte rein, die Du sicherlich NICHT beabsichtigst)

Bliebe noch die Geschichte dass deine Redirects an einigen Stellen nicht ganz konsequent sind, wenn Du schon Konstanten/Variablen dafür hernimmst.