| 
| Autor | Beitrag |  
| matze.de 
          Beiträge: 576
 
 Win95, Win98 SE, WinXp Prof SP2
 D7P, D8P, FPC2.0
 
 | 
Verfasst: Fr 10.06.05 17:53 
 
Hi,
 Ich werde nun versuchen euch zu erklären, wie man Daten mittels HTTP-Post an einen Webserver senden kann und wie der Server diese dann verarbeiten kann.
 Als erstes benötigen wir dazu ein PHP-Skript auf dem Webserver, welches unsere Daten empfängt und dann auch verarbeitet.
 Fangen wir mit dem empfangen der Post Daten an:
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 
 | <?php//POST Daten ermitteln und in eine Variable(hier in einem Array) speichern
 $MyData[0] = $_POST["code"]; // Mit $_POST fragt man die Post-Daten ab.
 ?>
 |  Im Grunde hat das Script die gesendeten Daten nun schon in einer Variable gespeichert, doch diese verfallen wieder bei Scriptende, daher wollen wir die Daten in einer *.txt Datei speichern. Wir ergänzen unser Script nun um ein paar weitere Zeilen:
 												| 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:
 
 | <?php//Datei
 $File = getcwd()."/code.txt"; // Datei liegt immer im selben verzeichnis wie das PHP-Skript.
 
 //POST Daten ermitteln und in eine Variable speichern
 $MyData[0] = $_POST["code"]; // Mit $_POST fragt man die Post-Daten ab.
 
 
 Function write($Datei, $Daten){
 $Error = False; // Unsere ErrorVariable :)
 If (!is_file($Datei)){ // Wenn die Datei nicht exisitiert -> erstellen
 $FilePointer = @fopen($Datei, "w+");
 @fclose($FilePointer);
 @chmod($Datei, 0777);
 }
 If(!is_writeable($Datei)){ // Wenn die Datei nicht schreibbar -> schreibbar machen
 If(!@chmod($Datei, 0777)){
 $Error = True;
 }
 }
 If(!$Error){
 $FilePointer = @fopen($Datei, "w"); // Filepointer setzen und Datei öffnen im "Write Modus"("w")
 
 If(!$FilePointer) $Error = True; // FilePointer auf Gültigkeit prüfen
 If(!@flock($FilePointer, 2)) $Error = True; // Wir holen uns eine exklusive, nur schreibende Verriegelung
 If(!@fwrite($FilePointer, $Daten)) $Error = True; // Wir schreiben in die Datei die Daten
 If(!@flock($FilePointer, 3)) $Error = True; // Wir geben unsere Verriegelung wieder frei
 If(!@fclose($FilePointer)) $Error = True; // Wir schließen die Datei wieder
 }
 Return !$Error;
 }
 |  So nun haben wir auch schon die Funktion fertig, um in eine Datei zu schreiben.
 Da ja nun nicht umbedingt jeder Zugriff auf dieses Scriopt haben soll, bauen wir nun noch einen Passwortschutz ein. Wir basteln uns nun erstmal eine Funktion um die Gültigkeit des Logins zu ermitteln:
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 
 | //Benutzer Setzen$Users[0] = "Testperson"; // Nehmen hierzu ein Array, falls jemand mehrere Benutzer anlegen möchte.
 $Pws[0] = "123"; //Besser wäre hier natürlich ein Hash Wert(Am einfachsten mit md5();)
 
 Function is_login($User, $Password){
 Global $Users, $Pws;
 For($I = 0; $I <= (Count($Users)-1); $I++){
 If(($User == $Users[$I]) && ($Password == $Pws[$I])) { $Login = True; Break; } Else { $Login = False; }
 }
 Return $Login;
 }
 // Diese Variante von Christian S. ist eleganter als die obere, macht aber im Grunde das Selbe, nur das wahrscheinlich etwas schneller ;)
 Function is_login($User, $Password){
 Global $Users, $Pws;
 Return ((($I = array_search($User, $Users)) !== False) && ($Pws[$I] == $Password));
 }
 |  So nun sieht der code schon so aus:
 												| 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:
 
 | <?php//Datei
 $File = getcwd()."/code.txt"; // Datei liegt immer im selben verzeichnis wie das PHP-Skript.
 
 //Benutzer Setzen
 
 $Users[0] = "Testperson"; // Nehmen hierzu ein Array, falls jemand mehrere Benutzer anlegen möchte.
 $Pws[0] = "123"; //Besser wäre hier natürlich ein Hash Wert(Am einfachsten mit md5();)
 
 //POST Daten ermitteln und in eine Variable speichern
 $MyData[0] = $_POST["code"]; // Mit $_POST fragt man die Post-Daten ab.
 $MyData[1] = $_POST["user"]; // Diese Zeile muss ergänzt werden, wegen unserer Benutzerabfrage.
 $MyData[2] = $_POST["pw"]; // Diese Zeile muss ergänzt werden, wegen unserer Benutzerabfrage.
 
 Function is_login($User, $Password){
 Global $Users, $Pws;
 Return ((($I = array_search($User, $Users)) !== False) && ($Pws[$I] == $Password));
 }
 
 Function write($Datei, $Daten, $User, $Pw){// Diese Zeile muss ergänzt werden, wegen unserer Benutzerabfrage.
 $Error = False; //Unsere ErrorVariable :)
 If(is_login($User, $Pw)){
 If (!is_file($Datei)){ // Wenn die Datei nicht exisitiert -> erstellen
 $FilePointer = @fopen($Datei, "w+");
 @fclose($FilePointer);
 @chmod($Datei, 0777);
 }
 If(!is_writeable($Datei)){ // Wenn die Datei nicht schreibbar -> schreibbar machen
 If(!@chmod($Datei, 0777)){
 $Error = True;
 }
 }
 If(!$Error){
 $FilePointer = @fopen($Datei, "w"); // Filepointer setzen und Datei öffnen im "Write Modus"("w")
 
 If(!$FilePointer) $Error = True; // FilePointer auf Gültigkeit prüfen
 If(!@flock($FilePointer, 2)) $Error = True; // Wir holen uns eine exklusive, nur schreibende Verriegelung
 If(!@fwrite($FilePointer, $Daten)) $Error = True; // Wir schreiben in die Datei die Daten
 If(!@flock($FilePointer, 3)) $Error = True; // Wir geben unsere Verriegelung wieder frei
 If(!@fclose($FilePointer)) $Error = True; // Wir schließen die Datei wieder
 }
 }Else{// Diese Zeile muss ergänzt werden, wegen unserer Benutzerabfrage.
 $Error = True; // Fehlervariable zurückgeben, für eventuelles Fehlerhandling. Diese Zeile muss ergänzt werden, wegen unserer Benutzerabfrage.
 }// Diese Zeile muss ergänzt werden, wegen unserer Benutzerabfrage.
 Return !$Error;
 }
 |  Nun fehlt nur noch eine Read-Funktion, Ausgabe-Funktion und eine Switch-Anweisung, um die verschiedenen Funktionen zu verwalten.
 												| 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:
 
 | Function read($Datei, &$Content){$Error = False;
 If(file_exists($Datei)){
 If(!is_readable($Datei)){
 If(!@chmod($Datei, 0777)){
 $Error = True;
 }
 }
 $FilePointer = @fopen($Datei, "r"); // Filepointer setzen und Datei öffnen im "Read Modus"("r")
 $Buffer = filesize($Datei); // Wir speichern die gesammte größe der Datei in einer Variable
 If(!$FilePointer) $Error = True;
 If(!@flock($FilePointer, 1)) $Error = True; // Wir holen uns eine exklusive, nur lesende Verriegelung
 If($Buffer > 0){
 $Content = @fread($FilePointer, $Buffer); // Wir lesen die ganze Datei aus und speichern die gelesenen Daten in einer Variable
 }Else{
 $Content = "";
 }
 If(!@flock($FilePointer, 3)) $Error = True; // Wir geben unsere Verriegelung wieder frei
 If(!@fclose($FilePointer)) $Error = True; // Wir schließen die Datei
 }Else{
 $Error = True; // Bei Fehler false zurückgeben für eventuelles Fehlerhandling
 }
 Return !$Error;
 }
 
 Function show(){
 Global $File; // Variable für Funktion zugänglich machen
 If(!read($File, $Code)){  // Beispiel für ein Fehlerhandling
 die("Fehler beim Lesen der Datei!");
 }
 Echo $Code; // Inhalt von $code ausgeben
 }
 
 if(!isset($_POST["mode"])) $_POST["mode"]=""; // Wenn "mode" nicht gesetzt dann default nehmen
 switch($_POST["mode"]){ // Modi unterscheiden, ob Delphi Programm Daten sendet, oder nur ein User mit dem Browser die page besucht.
 default:
 show();
 break;
 
 case "write":
 If( !write($File, $MyData[0], $MyData[1], $MyData[2]) ) die("Fehler beim Schreiben der Datei!");
 break;
 }
 |  So, nun ist unser PHP-Skript fertig und im ganzen sieht es so aus:
 												| 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:
 
 | <?php$File = getcwd()."/code.txt";
 
 $Users[0] = "Testperson";
 $Pws[0] = "123";
 
 $MyData[0] = $_POST["code"];
 $MyData[1] = $_POST["user"];
 $MyData[2] = $_POST["pw"];
 
 Function is_login($User, $Password){
 Global $Users, $Pws;
 Return ((($I = array_search($User, $Users)) !== False) && ($Pws[$I] == $Password));
 }
 
 Function write($Datei, $Daten, $User, $Pw){
 $Error = False;
 If(is_login($User, $Pw)){
 If (!is_file($Datei)){
 $FilePointer = @fopen($Datei, "w+");
 @fclose($FilePointer);
 @chmod($Datei, 0777);
 }
 If(!is_writeable($Datei)){
 If(!@chmod($Datei, 0777)){
 $Error = True;
 }
 }
 If(!$Error){
 $FilePointer = @fopen($Datei, "w");
 
 If(!$FilePointer) $Error = True;
 If(!@flock($FilePointer, 2)) $Error = True;
 If(!@fwrite($FilePointer, $Daten)) $Error = True;
 If(!@flock($FilePointer, 3)) $Error = True;
 If(!@fclose($FilePointer)) $Error = True;
 }
 }Else{
 $Error = True;
 }
 Return !$Error;
 }
 
 Function read($Datei, &$Content){
 $Error = False;
 If(file_exists($Datei)){
 If(!is_readable($Datei)){
 If(!@chmod($Datei, 0777)){
 $Error = True;
 }
 }
 $FilePointer = @fopen($Datei, "r");
 $Buffer = filesize($Datei);
 If(!$FilePointer) $Error = True;
 If(!@flock($FilePointer, 1)) $Error = True;
 If($Buffer > 0){
 $Content = @fread($FilePointer, $Buffer);
 }Else{
 $Content = "";
 }
 If(!@flock($FilePointer, 3)) $Error = True;
 If(!@fclose($FilePointer)) $Error = True;
 }Else{
 $Error = True;
 }
 Return !$Error;
 }
 
 Function show(){
 Global $File;
 If(!read($File, $Code)){
 die("Fehler beim Lesen der Datei!");
 }
 Echo $Code;
 }
 
 If(!Isset($_POST["mode"])) $_POST["mode"] = "";
 Switch($_POST["mode"]){
 Default:
 show();
 Break;
 
 Case "write":
 If( !write($File, $MyData[0], $MyData[1], $MyData[2]) ) die("Fehler beim Schreiben der Datei!");
 Break;
 }
 ?>
 |  Kommen wir nun zu unserem Delphi Programm:
 Wir starten ein neues Programm und setzen auf die Form ein TIdHTTP. Dann brauchen wir noch 2 TEdits, für den Login, und 1 TMemo für den Inhalt den wir auf den Server bringen wollen   . Wenn das geschafft ist, setzen wir noch einen Button auf die Form und schreiben ins OnClick:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 
 | procedure TSubmitForm.Button1Click(Sender: TObject);var Strings: TStringList;
 begin
 Strings := TStringList.Create;
 Button1.Enabled := False;
 try
 Strings.Add('mode=write');
 Strings.Add('user='+Edit1.Text);
 Strings.Add('pw='+Edit2.Text);
 Strings.Add('code='+Memo1.Lines.Text);
 try
 HTTP.Post('http://www.deinhost.de/interface.php', Strings);
 except
 on E: Exception do
 showmessage('Error encountered during POST: ' + E.Message);
 end;
 finally
 Strings.Free;
 end;
 Button1.Enabled := True;
 end;
 |  So und im Großen und Ganzen wars das auch schon    . Ich hoffe ich kann euch hiermit helfen. Es ist mein erstes Tutorial und wenn ihr Fehler findet meldet sie mir bitte direkt.
 mfg matze
 !!Wichtig: Auf vielen Webservern lassen sich Dateien nicht per PHP-Skript erstellen, daher ist es besser ihr ladet die *.txt Datei vorher auf den Server und gebt ihr den CHMOD 777!!
 P.S.:Das "@" Unterdrückt die Fehlerausgabe, falls ein Fehler auftritt.
 //Edit: Paar Bugfixes
 //Edit2: LoginFix + 2 Varianten
 //Edit3: Return $Error in Return !$Error geändert, da funktionen wenn sie nciht funktioniert haben ja False und nicht True zurückgeben!  _________________ si tacuisses, philosophus mansisses.
 
 Zuletzt bearbeitet von matze.de am Do 15.06.06 08:30, insgesamt 15-mal bearbeitet
 |  |  |  
| WeBsPaCe 
          Beiträge: 2322
 Erhaltene Danke: 1
 
 FireFox 3, Internet Explorer 6 SP1
 D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
 
 | 
Verfasst: Fr 10.06.05 18:16 
 
	  |  matze.de hat folgendes geschrieben: |  	  | 		                       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:
 
 | <?php//Datei
 $file = getcwd().'/code.txt'; // Datei liegt immer im selben verzeichnis wie das PHP-Skript.
 
 //POST Daten ermitteln und in eine Variable speichern
 $MyData[0] = $_REQUEST['code']; // Mit $_REQUEST fragt man die Post-Daten ab.
 
 function write($Datei, $Daten, $User, $Pw){
 $Error=false; //Unsere ErrorVariable :)
 // Wenn die Datei nicht exisitiert -> erstellen
 if (!is_file(Datei))
 {
 $FilePointer=@fopen($Datei, 'w+');
 @fclose($FilePointer);
 @chmod(Datei, 0777);
 }
 $FilePointer=@fopen(Datei, 'w'); // Filepointer setzen und Datei im "Write Modus"("w") öffnen
 
 if (!$FilePointer) $Error=true; // FilePointer auf Gültigkeit prüfen
 if (!@flock($FilePointer, 2)) $Error=true; // Wir holen uns eine exklusive, nur schreibende Verriegelung
 if (!@fwrite($FilePointer, $Daten)) $Error=true; // Wir schreiben in die Datei die Daten
 if (!@flock($FilePointer, 3)) $Error=true; // Wir geben unsere Verriegelung wieder frei
 if (!@fclose($FilePointer)) $Error=true; // Wir schließen die Datei wieder
 return $Error // Fehlervariable zurückgeben, für eventuelles Fehlerhandling
 }
 |  
 | 
 Wieso diese IF-Abfrage da? Laut PHP-Referenz  reicht ein w+ beim fopen zum erstellen. Also wieso nochmal eine Abfrage?    PS.:
 Bin noch nicht ganz durch. Werd später (nachm Essen) weiterlesen...   |  |  |  
| matze.de  
          Beiträge: 576
 
 Win95, Win98 SE, WinXp Prof SP2
 D7P, D8P, FPC2.0
 
 | 
Verfasst: Fr 10.06.05 18:27 
 
	  |  WeBsPaCe hat folgendes geschrieben: |  	  | 	  |  matze.de hat folgendes geschrieben: |  	  | 		                       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:
 
 | <?php//Datei
 $file = getcwd().'/code.txt'; // Datei liegt immer im selben verzeichnis wie das PHP-Skript.
 
 //POST Daten ermitteln und in eine Variable speichern
 $MyData[0] = $_REQUEST['code']; // Mit $_REQUEST fragt man die Post-Daten ab.
 
 function write($Datei, $Daten, $User, $Pw){
 $Error=false; //Unsere ErrorVariable :)
 // Wenn die Datei nicht exisitiert -> erstellen
 if (!is_file(Datei))
 {
 $FilePointer=@fopen($Datei, 'w+');
 @fclose($FilePointer);
 @chmod(Datei, 0777);
 }
 $FilePointer=@fopen(Datei, 'w'); // Filepointer setzen und Datei im "Write Modus"("w") öffnen
 
 if (!$FilePointer) $Error=true; // FilePointer auf Gültigkeit prüfen
 if (!@flock($FilePointer, 2)) $Error=true; // Wir holen uns eine exklusive, nur schreibende Verriegelung
 if (!@fwrite($FilePointer, $Daten)) $Error=true; // Wir schreiben in die Datei die Daten
 if (!@flock($FilePointer, 3)) $Error=true; // Wir geben unsere Verriegelung wieder frei
 if (!@fclose($FilePointer)) $Error=true; // Wir schließen die Datei wieder
 return $Error // Fehlervariable zurückgeben, für eventuelles Fehlerhandling
 }
 |  
 | 
 Wieso diese IF-Abfrage da? Laut PHP-Referenz reicht ein w+ beim fopen zum erstellen. Also wieso nochmal eine Abfrage?
   
 
 PS.:
 Bin noch nicht ganz durch. Werd später (nachm Essen) weiterlesen...
  | 
 Hab ich gemacht um den CHMOD direkt einzustellen.
 mfg matze_________________ si tacuisses, philosophus mansisses.
 |  |  |  
| WeBsPaCe 
          Beiträge: 2322
 Erhaltene Danke: 1
 
 FireFox 3, Internet Explorer 6 SP1
 D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
 
 | 
Verfasst: Fr 10.06.05 19:03 
 
Muss ich das jetzt verstehen? CHMOD weißt Zugriffsrechte zu. Mit is_file überprüfst du doch nicht, ob du schreiben kannst. Oder wie? |  |  |  
| matze.de  
          Beiträge: 576
 
 Win95, Win98 SE, WinXp Prof SP2
 D7P, D8P, FPC2.0
 
 | 
Verfasst: Fr 10.06.05 19:05 
 
Ja, ist eigentlich egal, außer, dass das Script so nicht ständig den CHMOD ausführt.
 mfg matze
 _________________ si tacuisses, philosophus mansisses.
 |  |  |  
| WeBsPaCe 
          Beiträge: 2322
 Erhaltene Danke: 1
 
 FireFox 3, Internet Explorer 6 SP1
 D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
 
 | 
Verfasst: Fr 10.06.05 19:26 
 
Bin jetzt durch.    Ich hab keine "Fehler" gefunden. Verständlich ist auch alles.
 Nur vielleicht ein kleiner Kommentar. Und zwar die Sicherheit eines solchen Skripts betreffend.    Wenn irgendjemand dein Delphi-Programm so nimmt, wie's grad ist benutzt, dann wird das Passwort und der dazugehörige Username als Plain/Text gesendet. Heißt "im Klartext". Jeder, der z.B. mit ethereal rumsnifft fängt das dann auf. Ziemlich unpraktisch. Deshalb entweder dieses Skript nicht für "wichtige" Sachen benutzen. Obwohl Dateien speichern ja wohl immer was wichtiges ist. Grad wenn das dann "jeder" machen kann. Lösung wäre wie schon angesprochen nur Hash-Werte zu senden und auch solche als "Parameter" zu erwarten.    Ansonsten wirklich gutes Tut.   |  |  |  
| matze.de  
          Beiträge: 576
 
 Win95, Win98 SE, WinXp Prof SP2
 D7P, D8P, FPC2.0
 
 | 
Verfasst: Sa 11.06.05 12:10 
 
Joa in Hinsicht auf Sicherheit kann man da schon noch bischen was machen, aber dieses tutorial sollte ja nur eine Basis darstellen. Erweitern kann dies jeder wie er will.    mfg matze_________________ si tacuisses, philosophus mansisses.
 |  |  |  
| Hannes Peter Hält's aus hier
 Beiträge: 1
 
 
 
 
 | 
Verfasst: Mi 20.07.05 11:22 
 
Ich kann zwar kein PHP,
 sehe aber einige Flüchtigkeitsfehler in der syntax.
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 
 | function write($Datei, $Daten, $User, $Pw){if(is_login($User, $Pw)){
 $Error=false;
 if (!is_file(Datei))
 {
 $FilePointer=@fopen($Datei, 'w+');
 @fclose($FilePointer);
 @chmod(Datei, 0777);
 }
 $FilePointer=@fopen(Datei, 'w');
 
 if (!$FilePointer) $Error=true;
 if (!@flock($FilePointer, 2)) $Error=true;
 if (!@fwrite($FilePointer, $Daten)) $Error=true;
 if (!@flock($FilePointer, 3)) $Error=true;
 if (!@fclose($FilePointer)) $Error=true;
 return $Error
 }[highlight]
 }
 |  Sollte in 
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 
 | function write($Datei, $Daten, $User, $Pw){if(is_login($User, $Pw)){
 $Error=false;
 if (!is_file($Datei)){<----- Änderung}
 {
 $FilePointer=@fopen($Datei, 'w+');
 @fclose($FilePointer);
 @chmod($Datei, 0777);{<----- Änderung}
 }
 $FilePointer=@fopen(Datei, 'w');
 
 if (!$FilePointer) $Error=true;
 if (!@flock($FilePointer, 2)) $Error=true;
 if (!@fwrite($FilePointer, $Daten)) $Error=true;
 if (!@flock($FilePointer, 3)) $Error=true;
 if (!@fclose($FilePointer)) $Error=true;
 return $Error; {<----- Änderung}
 }{<----- Änderung}
 }
 |  geändert werden. |  |  |  
| matze.de  
          Beiträge: 576
 
 Win95, Win98 SE, WinXp Prof SP2
 D7P, D8P, FPC2.0
 
 | 
Verfasst: Mi 20.07.05 12:02 
 
Habs geändert, danke.
 mfg matze
 _________________ si tacuisses, philosophus mansisses.
 |  |  |  
| wolle- 
          Beiträge: 128
 
 XP Prof, Suse 9.2
 D7
 
 | 
Verfasst: Mi 20.07.05 21:21 
 
Bei mir gehtsnicht :/
 												| 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 Unit1;
 interface
 
 uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, XPMenu, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
 IdTCPClient, IdHTTP, OleCtrls, SHDocVw;
 
 type
 TForm1 = class(TForm)
 HTTP: TIdHTTP;
 Edit1: TEdit;
 Edit2: TEdit;
 Button1: TButton;
 XPMenu1: TXPMenu;
 Memo1: TMemo;
 WebBrowser1: TWebBrowser;
 procedure Button1Click(Sender: TObject);
 procedure FormCreate(Sender: TObject);
 private
 
 public
 
 end;
 
 var
 Form1: TForm1;
 
 implementation
 
 {$R *.dfm}
 
 procedure TForm1.Button1Click(Sender: TObject);
 var Strings: TStringList;
 begin
 Strings := TStringList.Create;
 Button1.Enabled := False;
 try
 Strings.Add('mode=write');
 Strings.Add('user='+Edit1.Text);
 Strings.Add('pw='+Edit2.Text);
 Strings.Add('code='+Memo1.Lines.Text);
 try
 HTTP.Post('http://meinhost/interface.php', Strings);
 except
 on E: Exception do
 showmessage('Error encountered during POST: ' + E.Message);
 end;
 finally
 Strings.Free;
 end;
 Button1.Enabled := True;
 end;
 
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 Webbrowser1.Navigate('http://Meinhost.de/interface.php');
 end;
 
 end.
 |  und der PHP code:
 												| 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:
 
 | <?php  $file = getcwd().'/code.txt';
 
 
 $users[0] = 'test';
 $pws[0] = 'test';
 
 
 $MyData[0] = $_REQUEST['code'];
 $MyData[1] = $_REQUEST['user'];
 $MyData[2] = $_REQUEST['pwd'];
 
 
 function is_login($User, $Password){
 global $users, $pws;
 if((in_array($User, $users)) AND (in_array($Password, $pws))) { Return true; } else { Return false; }
 }
 
 function write($Datei, $Daten, $User, $Pw){
 if(is_login($User, $Pw)){
 $Error=false;
 if (!is_file($Datei))
 {
 $FilePointer=fopen($Datei, 'w+');
 fclose($FilePointer);
 chmod($Datei, 0777);
 }
 $FilePointer=fopen(Datei, 'w');
 
 if (!$FilePointer) $Error=true;
 if (!flock($FilePointer, 2)) $Error=true;
 if (!fwrite($FilePointer, $Daten)) $Error=true;
 if (!flock($FilePointer, 3)) $Error=true;
 if (!fclose($FilePointer)) $Error=true;
 return $Error;
 }
 }
 
 function read($file, &$content){
 $Error = false;
 if(file_exists($file)){
 $filepointer = fopen($file, "r");
 $buffer = filesize($file);
 if(!$filepointer) $Error = true;
 if (!flock($FilePointer, 1)) $Error=true;
 $content = fread($filepointer, $buffer);
 if (!flock($FilePointer, 3)) $Error=true;
 if(!fclose($filepointer)) $Error = true;
 }else{
 $Error = true;
 }
 Return $Error;
 }
 
 
 function show(){
 global $file;
 read($file, $code);
 echo $code;
 }
 
 
 if(!isset($_REQUEST['mode'])) $_REQUEST['mode']='';
 switch($_REQUEST['mode']){
 default:
 show();
 break;
 
 
 case 'write':
 write($file, $MyData[0], $MyData[1], $MyData[2]);
 break;
 }
 ?>
 | _________________ Don`t eat yellow snow   !!
 |  |  |  
| JayEff 
          Beiträge: 2971
 
 Windows Vista Ultimate
 D7 Enterprise
 
 | 
Verfasst: Mi 20.07.05 22:01 
 
"Bei mir gehts nicht" ist wieder so ne aussage... Beschreib mal, WAS nicht geht! Wenns nicht im PHP code stehn würde, würde ich sagen, es läge am CHMOD... Aber meine Kristallkugel hat letztens nen Sprung bekommen, als so n neuer unbedingt wissen wollte, warum StringTuInteger[xy] nicht klappt... _________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
 [>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
 |  |  |  
| wolle- 
          Beiträge: 128
 
 XP Prof, Suse 9.2
 D7
 
 | 
Verfasst: Do 21.07.05 10:07 
 
Sorry
 der Delphi code funktioniert ich schreibe dann username und password in die Edits und ins Memo einen Text, die code.txt bleibt einfach leer und im Browser sagt er bei der php:
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 5:
 
 | Warning: flock(): supplied argument is not a valid stream resource in /home/wolle/public_html/interface.php on line 45
 Warning: fread(): Length parameter must be greater than 0. in /home/wolle/public_html/interface.php on line 46
 
 Warning: flock(): supplied argument is not a valid stream resource in /home/wolle/public_html/interface.php on line 47
 |  Was ich aber nicht verstehe
 Daher hoffe ich deine Kristall Kugel ist wieder gefüllt    Danke
 Wolle_________________ Don`t eat yellow snow   !!
 |  |  |  
| matze.de  
          Beiträge: 576
 
 Win95, Win98 SE, WinXp Prof SP2
 D7P, D8P, FPC2.0
 
 | 
Verfasst: Do 21.07.05 13:45 
 
Ist der CHMOD auf 777 gesetzt bei der code.txt? Manche webserver unterstützen es nicht den CHMOD von nem PHP-Skript(Wie bei mir mit chmod();) ändern zu lassen....
 mfg matze
 _________________ si tacuisses, philosophus mansisses.
 |  |  |  
| wolle- 
          Beiträge: 128
 
 XP Prof, Suse 9.2
 D7
 
 | 
Verfasst: Do 21.07.05 14:04 
 
Jawoll dachte erst es liegt daran aber nein! Chmod 777
 Ich hänge mal die php an und das delphi teil von mir auch   !
Einloggen, um Attachments anzusehen!
 
_________________ Don`t eat yellow snow   !!
 |  |  |  
| matze.de  
          Beiträge: 576
 
 Win95, Win98 SE, WinXp Prof SP2
 D7P, D8P, FPC2.0
 
 | 
Verfasst: Do 21.07.05 15:00 
 
@Wolle: Hab den Fehler gefunden... Sorry, mea culpa. Im PHP-Skript steht $MyData[2] = $_REQUEST["pwd"]; aber in Delphi wird es als "pw" gesendet also änder in deinem PHP-Skript:
 		                       Quelltext 
 									| 1:2:
 3:
 
 | $MyData[2] = $_REQUEST["pwd"];IN
 $MyData[2] = $_REQUEST["pw"];
 |  mfg matze
 P.S.: Das Tutorial hab ich ein wenig ergänzt und der Fehler ist schon behoben!_________________ si tacuisses, philosophus mansisses.
 |  |  |  
| wolle- 
          Beiträge: 128
 
 XP Prof, Suse 9.2
 D7
 
 | 
Verfasst: Do 21.07.05 19:14 
 
		                       Quelltext 
 									| 1:2:
 3:
 4:
 5:
 
 | Warning: flock(): supplied argument is not a valid stream resource in /home/wolle/public_html/interface.php on line 45
 Warning: fread(): Length parameter must be greater than 0. in /home/wolle/public_html/interface.php on line 46
 
 Warning: flock(): supplied argument is not a valid stream resource in /home/wolle/public_html/interface.php on line 47
 |  erhalte ich immernoch
 Dabei sieht die php so aus:
 												| 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:
 
 | <?php  $file = getcwd().'/code.txt';
 
 
 $users[0] = 'test';
 $pws[0] = 'test';
 
 
 $MyData[0] = $_REQUEST['code'];
 $MyData[1] = $_REQUEST['user'];
 $MyData[2] = $_REQUEST["pw"];
 
 
 function is_login($User, $Password){
 global $users, $pws;
 if((in_array($User, $users)) AND (in_array($Password, $pws))) { Return true; } else { Return false; }
 }
 
 function write($Datei, $Daten, $User, $Pw){
 if(is_login($User, $Pw)){
 $Error=false;
 if (!is_file($Datei))
 {
 $FilePointer=fopen($Datei, 'w+');
 fclose($FilePointer);
 chmod($Datei, 0777);
 }
 $FilePointer=fopen(Datei, 'w');
 
 if (!$FilePointer) $Error=true;
 if (!flock($FilePointer, 2)) $Error=true;
 if (!fwrite($FilePointer, $Daten)) $Error=true;
 if (!flock($FilePointer, 3)) $Error=true;
 if (!fclose($FilePointer)) $Error=true;
 return $Error;
 }
 }
 
 function read($file, &$content){
 $Error = false;
 if(file_exists($file)){
 $filepointer = fopen($file, "r");
 $buffer = filesize($file);
 if(!$filepointer) $Error = true;
 if (!flock($FilePointer, 1)) $Error=true;
 $content = fread($filepointer, $buffer);
 if (!flock($FilePointer, 3)) $Error=true;
 if(!fclose($filepointer)) $Error = true;
 }else{
 $Error = true;
 }
 Return $Error;
 }
 
 
 function show(){
 global $file;
 read($file, $code);
 echo $code;
 }
 
 
 if(!isset($_REQUEST['mode'])) $_REQUEST['mode']='';
 switch($_REQUEST['mode']){
 default:
 show();
 break;
 
 
 case 'write':
 write($file, $MyData[0], $MyData[1], $MyData[2]);
 break;
 }
 ?>
 | _________________ Don`t eat yellow snow   !!
 |  |  |  
| JayEff 
          Beiträge: 2971
 
 Windows Vista Ultimate
 D7 Enterprise
 
 | 
Verfasst: Do 21.07.05 22:55 
 
Ich hoffe doch, die code.txt existiert?    Fehler gefunden: Auf Linuxservern (fast alle Webserver sind solche) ist alles Casesensitive. => Schreibe FilePointer statt filepointer!!!
 Zeilen 42-44:
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 
 |    $filepointer = fopen($file, "r");     $buffer = filesize($file);
 if(!$filepointer) $Error = true;
 if (!flock($FilePointer, 1)) $Error=true;
 | _________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
 [>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
 |  |  |  
| wolle- 
          Beiträge: 128
 
 XP Prof, Suse 9.2
 D7
 
 | 
Verfasst: Fr 22.07.05 08:31 
 
Danke, die Code.txt existiert natürlich
 bekomme nurnoch:
 		                       Quelltext 
 									| 1:
 | Warning: fread(): Length parameter must be greater than 0. in /home/wolle/public_html/interface.php on line 46					 | _________________ Don`t eat yellow snow   !!
 |  |  |  
| JayEff 
          Beiträge: 2971
 
 Windows Vista Ultimate
 D7 Enterprise
 
 | 
Verfasst: Fr 22.07.05 10:43 
 
Kein Problem, auch hier weis ich Abhilfe:
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 
 |    $buffer = filesize($file);     if(!$filepointer) $Error = true;
 if (!flock($FilePointer, 1)) $Error=true;
 $content = fread($filepointer, $buffer);
 |  Die Variable $buffer wird mit der größe der Datei gefüllt. Die Datei ist aber neu erstellt worden, und desshalb LEER!!!!!
 Besser:
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 
 |    $buffer = filesize($file);     if(!$filepointer) $Error = true;
 if (!flock($FilePointer, 1)) $Error=true;
 if ($buffer>0){
 $content = fread($filepointer, $buffer);
 }else{
 $Error=true;
 }
 |  Das sollte solche Probleme beheben._________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
 [>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
 |  |  |  
| wolle- 
          Beiträge: 128
 
 XP Prof, Suse 9.2
 D7
 
 | 
Verfasst: Fr 22.07.05 15:07 
 
Warum bin ich der einzigste mit den Fehlern? immer funktioniert bei mir was nicht...
 Danke für deine Hilfe
 		                       Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 
 | function read($file, &$content){  $Error = false;
 if(file_exists($file)){
 $FilePointer = fopen($file, "r");
 $buffer = filesize($file);
 if(!$filepointer) $Error = true;
 if (!flock($FilePointer, 1)) $Error=true;
 if ($buffer>0){
 $content = fread($filepointer, $buffer);
 }else{
 $Error=true;
 }
 |  		                       Quelltext 
 									| 1:
 | Parse error: parse error, unexpected $ in /home/wolle/public_html/interface.php on line 72					 |  ?????_________________ Don`t eat yellow snow   !!
 |  |  |  |