Autor Beitrag
Xiut
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Do 07.01.10 19:55 
Hallo zusammen!

Ich hätte mal eine Frage. Wie schaffe ich es ein Account System einzurichten mit Delphi, das übers Internet läuft?

Also ich meine das so:
Ein Benutzer Registriert sich auf meiner Webseite und kann dort seine Daten eingeben und z.B. seine To-Do Liste ausfüllen und Verwalten.
Auf seinem Laptop oder PC aber kann er sich mit dem Client in seinen Account einloggen und die Daten abrufen und hat dann noch mehr Funktionen zu verfügung.
Diese veränderten Daten soll man dann aber auch wieder übers Internet abrufen können.

Ich kenn mich schon recht gut mit Delphi und PHP (Also auch HTML, CSS und Javascript) aus, doch hab ich kaum möglichkeiten gefunden um dieses zu verwirklichen.
Klar könnte ich das irgendwie mit PHP scripten und GET machen, doch finde ich das sehr umständlich und unsicher.

Sicher gibt es da was, das so änlich wie MySQL ist. Oder?^^

Oder gibt es eine andere Art sowas zu verwirklichen?

Wäre nett wenn ihr mir helfen könntet =)

Danke =)
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Do 07.01.10 20:04 
naja, der Clou ist, die Daten NUR an dein Programm herauszurücken, also müsstest du für ein Sessionsystem sorgen. Das ganze kann man vereinfacht durch ein Zufallszahlensystem mit irgendwelchen hochgradig geheimen Algorithmen, die Client und Server bekannt sind, die dann ausgetauscht werden können machen. Der Server sendet eine Zufallszahl, der Client verwurstet die irgendwie (Datum, Vorname deiner Schwiegermutter XOR 25, Eingegebener Username), der Server selbstverständlich auf die gleiche Weise. Die Zahlen werden dann verglichen und im Erfolgsfalle wird vom Server eine SessionID zurückgesendet. Die wird ab nun immer vom Client mitgeschickt, dazu die abgestimmte Geheimzahl.

Viel Spaß
Xiut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Do 07.01.10 20:08 
Ok danke ich versuch das mal.

Dann muss ich nur noch schaffen, die Daten (Meist auch recht große Texte) geschickt auszulesen das ich dann mit Echo ausgeben oder gibt es da auch eine möglichkeit das zu vereinfachen?

Xiut
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Do 07.01.10 20:11 
naja, an die Seite POSTest du sie ja explizit mit Bezeichner über idHttp.Post(aURL : String;args : TStrings)Wiederkriegen kannst du sie dann a) über XML b) über eine art CSV Datei c) als Ini... Dir bleiben alle Möglichkeiten offen!

oder natürlich, man programmiert etwas mit TCP Server/Client und nem Terminatorzeichenprotokoll á la Narses (siehe Library)
Xiut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Do 07.01.10 20:17 
Also eine XML datei auf dem Server erstellen und dann abrufen und danach löschen?
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Do 07.01.10 20:22 
ich dachte mehr an: Via PHP XML-Datei postenechoen... ;)
Xiut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Do 07.01.10 20:26 
Achso. Eine XML Datei ausgeben und die dann mit Http.get auslesen?

Sieht das dann so aus? idhttp1.get(idhttp1.post('URL', 'PARAMETER'));


Hab das mal mit dem Post nur so versucht und es gibt immer eine Fehlermeldung. Lad das gleich mals als Bild hoch, versuch aber gerade es mal zu googln.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

In Projekt #Pfad zur datei# trat ein Problem mit folgender Meldung auf: 'access violation at 0x00403d98: read of address 0x51ec8b25'. Prozess angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
test : TStringlist;
begin
test.Create;
test.Add('ssg=DasisteinTest');
http.Post('http://127.0.0.1/index.php', test);  (Hab Xampp deswegen 127.0.0.1)

Das ist der Quellcode und die Fehlermeldung.
Mit dem übergebenen Daten soll nur ein Ordner erstellt werden und die übergebenen Daten sind der Name für den Ordner.
Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Do 07.01.10 20:36 
nö, eher so (ums mal komplett zu haben):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
try
  sl := TStringList.Create;
  sl.Add('meineZufallszahl=' + IntToStr(random(RANGE)));
  
  myRawXMLStr := idHttp1.Post('http://google.de',sl);
finally
  sl.Free;
end;


und dann halt PHPseitig sowas wie:

ausblenden C#-Quelltext
1:
2:
$rand = $_POST['meineZufallszahl'];
echo("<test rand='".$rand."' />");
Xiut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Do 07.01.10 20:44 
Ok vielen vielen dank =)
Xiut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Fr 08.01.10 18:48 
Ich hoffe einfach mal das hier noch mal wer rein schaut.

Wie kann ich es schaffen, einen String der so aufgebaut ist zu einer Inidatei zu machen, die aber nicht auf der Festplatte erstellt werden soll?

Also ich hab einen String. Dieser String soll wie eine Inidatei behandelt werden.

Ich benutze allgemein Tinifile oder wie das heißt. Also das was bei Delphi 2009 dabei ist.


Gibt es da eine möglichkeit?

data : String;
inidatei : Tinifile;

z.B. inidatei.create(data);

geht nicht =(
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 08.01.10 19:15 
Moin!

Das geht mit TIniFile gar nicht, diese Klasse ist auf die Bearbeitung einer Datei festgelegt und kann nix anderes. :nixweiss:

Du kannst dir aber TMemIniFile "zurechtbiegen": :idea:
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:
uses
  ..., IniFiles;

type
  TStrIniFile = class(TMemIniFile)
  public
    constructor Create;
    procedure LoadFromString(const AString: String);
    function SaveToString: String;
  end;

implementation

constructor TStrIniFile.Create;
begin
  inherited Create('');
end;

procedure TStrIniFile.LoadFromString(const AString: String);
  var
    List: TStringList;
begin
  List := TStringList.Create;
  try
    List.Text := AString;
    SetStrings(List);
  finally
    List.Free;
  end;
end;

function TStrIniFile.SaveToString: String;
  var
    List: TStringList;
begin
  List := TStringList.Create;
  try
    GetStrings(List);
    Result := List.Text;
  finally
    List.Free;
  end;
end;

Benutzung:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  var
    StrIni: TStrIniFile;
begin
  StrIni := TStrIniFile.Create;
  try
    StrIni.WriteInteger('Section','Key',12345);
    ShowMessage(StrIni.SaveToString);
  finally
    StrIni.Free;

Ausgabe:
ausblenden Quelltext
1:
2:
[Section]
Key=12345
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Xiut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Fr 08.01.10 19:22 
Cool =)

Vielen dank!

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Ok habs mal versucht, doch geht geht das irgendwie nicht =(

Gibt es vll eine möglichkeit z.B. einen string der so aufgebaut ist:

key1=asdh asdasd asdad
sdsa asdjlasd
asdhiashdiasdh
key2=asd asdsad asdd hjsd sdh asjd
s dhsd djsh

(sorry nichts besseres eingefallen ^^)

in ein Array zu laden, so das jeder Wert (hier nur 2 aber es soll variabel sein) einzelnt auch wieder aufrufbar ist?

Sprich: array[1] = asdh asdasd asdad
sdsa asdjlasd
asdhiashdiasdh
(also key 1)

array[2] = asd asdsad asdd hjsd sdh asjd
s dhsd djsh
(also key 2)

Und wenn das 3 wären, dass dann auch ein array[3] gefüllt sein würde mit dem was nach key3= stehen würde.

Hoffe das ist verständlich erklärt. =)

Eine Lösung wäre super!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 08.01.10 20:01 
Moin!

user profile iconXiut hat folgendes geschrieben Zum zitierten Posting springen:
Ok habs mal versucht, doch geht geht das irgendwie nicht
Die spannende Frage ist eigentlich immer: was genau geht nicht? :nixweiss:

user profile iconXiut hat folgendes geschrieben Zum zitierten Posting springen:
Gibt es vll eine möglichkeit
[...]
in ein Array zu laden, so das jeder Wert (hier nur 2 aber es soll variabel sein) einzelnt auch wieder aufrufbar ist?
Man kann unglaublich viele Sachen machen, wenn man weiß, was man tut. Die Frage ist hier eher: weißt du, was du da tust? :?

user profile iconXiut hat folgendes geschrieben Zum zitierten Posting springen:
z.B. einen string der so aufgebaut ist:
Sorry, ich kapiere dein String-Format nicht. Mach mal eine Delphi-kompatible Zuweisung an eine Beispielvariable, dann sehen wir weiter. Also sowas:
ausblenden Delphi-Quelltext
1:
StrVar := 'Hallo Welt!';					
cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Fr 08.01.10 20:12 
Ich denke er meint einen Array (von Strings) in beide Richtungen übertragen zu können. Antwort: siehe unten!

Grundsätzlich ist deine Idee ein Webservice und der endgülige Weg sollte auch in die Richtung gehen! Daher sollte man beim Aufbau bereits an den Austausch von XML-Daten denken, weil hierfür viele Frameworks und APIs bereits existieren und damit die Zuweisung der Daten recht einfach fällt. Hierbei kann man die Daten dann nicht nur wie bei Arrays über Zahlenwerte abrufen, sondern das ganze als assoziative Arrays verstehen.
Zudem kann man bei korrektem Einsatz von bekannten XML-Spezifikationen auch eine gute Sicherheit erreichen. =)

Für den Fall, dass du nicht auf XML setzt, müsstest du Arrays und andere Objekte serialisieren, was für komplexe Strukturen recht aufwändig wird.
Am Ende aller Ideen kann man immernoch eigene Protokolle auf TCP oder HTTP aufsetzen! :P
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 08.01.10 20:26 
Moin!

user profile iconSirke hat folgendes geschrieben Zum zitierten Posting springen:
Ich denke er meint einen Array (von Strings) in beide Richtungen übertragen zu können. Antwort: siehe unten!
Das ist uns beiden schon länger klar. ;) Ob es allerdings dem Fragesteller ausreichend klar ist... :nixweiss:

Sicher ist ein Webservice eine gute und standardisierte Lösung, das wird aber ausserhalb des Horizonts dieses Threads ablaufen, fürchte ich. :? Deshalb wollte ich mit problemorientierter Fragestellung erstmal den Weg ebnen. :)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Xiut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Fr 08.01.10 20:33 
Ja es geht halt darum, dass ich nicht weiß wie viele Texte oder Daten ausgegben werden.

Ein Beispiel(eine To-Do liste):
Jemand erstellt eine Todo liste und beim erstellen schreibe ich in die Datenbank z.B. bei Hausaufgaben
Aufgabe Rang Status
Hausaufgaben machen low 0 // 0 = noch nicht erledigt

so diese Daten möchte ich gerne so einfach wie möglich (Wer will das nicht ^^) auslesen und in Delphi z.B in ein Grid einlesen.

Also wird dann das ausgegeben wenn ich die Daten abrufe.
Aufgabe1= Hausaufgaben machen
Rang1= low
Status1= 0
Aufgabe2= Katze füttern
Rang2= High
Status2= 1

Und diese Daten sind ja nicht immer gleich.

Da ich nicht so ein totaler Profi in Delphi bin, hab ich gehoft, es gäbe da eine praktische Lösung, dies auszulesen.
Sowas wie eine Datei art mit einer Funktion, die dann alle Daten in Arrays laden, die ich wiederrum mit einer For Schleife oder sowas auslese und ins Grid schreibe.


Hoffe das hilft weiter und sorry wenn ich mich vielleicht da zu doof anstelle =(
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Fr 08.01.10 21:32 
Für dein einfaches Beispiel kann man viele Lösungen finden: Es geht ja darum viele Datensätze der gleichen Form auszutauschen. Daher gibt es eine nicht sehr elegante, aber mögliche Lösung, indem du die Datensätze aneinander hängst und mit einem festgelegten String trennst und die Daten der Datensätze untereinander ebenfalls. Diese Lösung ist jedoch dann nur für diesen einen Datensatz möglich:

Beispiel für drei Aufgaben:
Aufgabe1= Hausaufgaben machen
Rang1= low
Status1= 0
Aufgabe2= Katze füttern
Rang2= High
Status2= 1
Aufgabe2= Einkaufen
Rang2= High
Status2= 0
Als Trennungsstring für die Datensätze wähle "#" und für die Daten der Datensätze ":". Damit bekommst du dann folgenden String:
Hausaufgaben machen:low:0#Katze füttern:High:1#Einkaufen:High:0#
Diesen String kann man Zeichen für Zeichen durchgehen, verarbeiten und bei den entsprechenden Trennern ein neuen Datensatz oder ein eben ein Wert im Datensatz beginnen.

Wie gesagt: Mögliche, aber nicht elegante, und vorallem schwer erweiterbare Lösung!
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Fr 08.01.10 21:37 
für die Lösung mit dem besten "Preis/Leistungsverhältnis" halte ich nach wie vor ein XML-"Protokoll".

Da gibt es sowohl für PHP als auch für Delphi vorgefertigte Klassen und du könntest deine Datein in etwa so gestalten:

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<Datensatz id="1">
  <Aufgabe>Hausaufgaben machen!</Aufgabe>
  <Rang>low</Rang>
  <Status>1</Status>
</Datensatz>

<Datensatz id="32">
  <Aufgabe>Bananenschalen nach Farbe sortieren</Aufgabe>
  <Rang>high</Rang>
  <Status>0</Status>
</Datensatz>
Xiut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Fr 08.01.10 21:56 
OK vielen dank.
Ich werde mich dann mit XML und co. noch intensiver beschäftigen.