Einzelnen Beitrag anzeigen

SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#1

in SQL Datenbank von extern schreiben mittels PHP

  Alt 15. Jun 2009, 12:08
Da ich nur Webspace besitzte, der auch über eine SQL Datenbank verfügt, ich aber in diese nicht von Extern Datensätze schreiben oder lesen kann, dies aber für Statistikführung meiner Programme muss, habe ich eine Klasse entworfen, mit welcher man trotzdem mit Hilfe von einem PHP Script in die Datenbank schreiben kann.

Hier erst einmal die Unit / Klasse:

Delphi-Quellcode:
unit MYSQLPHPTunnel;

interface

uses IdMultipartFormData, IDHTTP;

type THTTP_POST_VARS = record
      Variable : string;
      Inhalt : string;
      end;

type TmysqlphpTunnel = class
      private
      FTunnelScript : string;
      FHTTP_POST_VARS : TIdMultiPartFormDataStream;
      procedure SetHTTP_POST_VARS (AData : array of THTTP_POST_VARS);

      public
      constructor create;
      destructor destroy; override;
      procedure AccessDataBase (AData : array of THTTP_POST_VARS);

      property phpscript : string read fTunnelscript write ftunnelscript;
      end;

implementation


constructor TmysqlphpTunnel.create ;
begin
  inherited create;

  self.FTunnelScript := '';
end;

destructor TmysqlphpTunnel.destroy;
begin
  
  inherited destroy;
end;

procedure TmysqlphpTunnel.SetHTTP_POST_VARS(AData : array of THTTP_POST_VARS);
var i : integer;
    HTTP : TIDHTTP;
begin
  self.FHTTP_POST_VARS := TIdMultiPartFormDataStream.Create;

  if high(AData) >= 0 then
    for i := 0 to high(AData) do
      self.FHTTP_POST_VARS.AddFormField(Adata[i].variable,AData[i].Inhalt);

  HTTP := TIDHTTP.create(nil);
  HTTP.Post(self.FTunnelScript,self.FHTTP_POST_VARS);

  self.FHTTP_POST_VARS.free;
  HTTP.Free;
end;

procedure TmysqlphpTunnel.AccessDataBase (AData : array of THTTP_POST_VARS);
begin
  SetHTTP_POST_VARS(AData);
end;

end.
Wie verwendet man diese nun?

Zunächst braucht man ein PHP Srcipt auf dem eigenen Webspace welches die eigentliche Arbeit (Schreiben von Datensätzen in die DB) übernimmt.


Dies könnte z.B. so aussehen:

Code:
<?php
// HTTP_POST_VARS auslesen
$name = $HTTP_POST_VARS['Name'];
$VID = $HTTP_POST_VARS['VID'];
$TimeStamp = $HTTP_POST_VARS['TimeStamp'];
$ATC = $HTTP_POST_VARS['ATC'];
$allow_realname = $HTTP_POST_VARS['Allow_RealName'];

// define variables
$db_host = 'host';
$db_user = 'user';
$db_pass = 'password';
$db_name = 'dbname';

$db_add_value = 'INSERT INTO table VALUES ';

// db connection
$db = mysql_connect($db_host, $db_user, $db_pass);
if (!$db)
{
    die('Could not connect: ' . mysql_error());
}
else
{
   mysql_select_db($db_name);
   $anfrage = "INSERT INTO Livetrack VALUES ('".$Name."','".$VID."','".$TimeStamp."','".$allow_realname."','".$ATC."')";
   mysql_query($anfrage);
}

mysql_close($db);

?>

Die Klasse TmysqlphpTunnel übernimmt nun jediglich das Senden der HTTP_POST_VARS an das PHP Script auf dem Webspace.

Eine Anwendung könnte so aussehen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Postvars : array of THTTP_POST_VARS;
    Tunnel : TmysqlphpTunnel;
begin
  // Setzen der HTTP_POST_VARS Variablen und Inhalte
  setlength(Postvars,5);
  PostVars[0].Variable := 'Name';
  PostVars[0].Inhalt := 'Marco test';
  PostVars[1].Variable := 'VID';
  PostVars[1].Inhalt := '224003';
  PostVars[2].Variable := 'TimeStamp';
  PostVars[2].Inhalt := '123456';
  PostVars[3].Variable := 'Allow_RealName';
  PostVars[3].Inhalt := 'true';
  PostVars[4].Variable := 'ATC';
  PostVars[4].Inhalt := 'Observer';

  // TmysqlphpTunnel Object erzeugen
  Tunnel := TmysqlphpTunnel.create;

  // Vollständigen Pfad des PHP Scriptes setzen, welches das Schreiben in die DB übernimmt
  Tunnel.phpscript := 'Pfad zum PHP Script + PHP Script Angabe'; // 'www.mein-web-sapce.de/dbaccess.php'
  
  // Datensatz in DB Schreiben
  Tunnel.AccessDataBase(PostVars);
  Tunnel.Free;
end;

Zugrunde lag dieser Beitrag
  Mit Zitat antworten Zitat