Um problema que me deparei ,foi enviar os dados do meu programa desenvolvido em radstudio para um servidor através que uma pagina php.
Depois de resolver o primeiro problema ,surgiu outro enviar uma imagem e ainda enviar os dados redigidos em formato utf8.
Deixo aqui um pequeno exemplo .
// Rad Studio (Delphi)
procedure TFrmPrincipal.enviardados_servidor;
var
Response : String;
params : TIdMultipartFormDataStream;
assinatura : string;
sqlinsert : string;
begin
// Aqui estou a abrir a minha base de dados Sqlite ;
qryFrente.SQL.Clear;
qryFrente.SQL.Add('select * from tabela where id="'+id.Text+'"');
qryFrente.Open();
//criando os parametros
params := TIdMultiPartFormDataStream.Create;
// nesta função vou buscar o nome da imagem que tenho na base de dados ,que foi guardada posteriormente , no directório respectivo.
{$IFDEF ANDROID}
assinatura := TPath.Combine( Tpath.GetDocumentsPath,qryFrente.FieldByName('assinatura').Text);
{$ENDIF}
{$IFDEF IOS}
assinatura := GetHomePath+ PathDelim +'Documents'+PathDelim+qryFrente.FieldByName('assinatura').Text';
{$ENDIF}
{$IFDEF MSWINDOWS}
assinatura := 'C:\....\imagens \'+qryFrente.FieldByName('assinatura').Text;
{$ENDIF};
// aqui abro outra tabela de dados e crio um insert
qryFrente.SQL.Clear;
qryFrente.SQL.Add('select * from verificacoes where id="'+idText+'"');
qryFrente.Open();
// vou atribuir o campo nome ao sqlinsert apenas para exemplo, para não ficar muito comprida a string de envio,
sqlinsert:= qryFrente.FieldByName('nome').Text';
// Desta forma os dados serão enviados em utf8
params.AddFormField('nome', UTF8Encode(sqlinsert),'utf-8').ContentTransfer := '8bit';
params.AddFormField('titulo', titulo.text);
//Aqui envio o ficheiro imagem que esta no directorio definido
params.AddFile('assinatura', assinatura, 'image/jpg');
// configuração do header
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.Clear;
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
IdHTTP1.Request.ContentEncoding := 'multipart/form-data';
// enviar para o php
Response := IdHTTP1.Post('http://localhost/gravadados.php',params);
if Response='OK' then
begin
showmessage('Gravação concluida !');
end
else
begin
showmessage('Ocorreu um erro !');
end;
// PHP gravadados.php
<?php
//ligação a base de dados (já esta descontinuada, deve utilizar outro tipo de ligação ,mas para o exemplo serve
$connection = mysql_connect(base64_decode($dbhost),base64_decode($user),base64_decode( $pw)) or
die("Could not connect (1): " . mysql_error());
mysql_select_db($dbname) or die("Could not select database");
// crio um valor unico para essa imagem (opcional)
$adata = date( "YmdHis");
$directorio='imagens/';
$ext=substr($_FILES["assinatura"]["name"], -4); // vou buscar a extenção
// Movo a imagem para o directório definido
move_uploaded_file($_FILES["assinatura"]["tmp_name"], $directorio."/imagem_". $adata.$ext);
// inserir na base de dados (mysql descontinuado)
$sql="insert into tabela(nome,assinatura) VALUES
('".$_POST[nome']."',"','$assinatura','"."')" ;
mysql_query($sql);
echo 'OK;
?>
Espero que o exemplo ajude.
Sem comentários:
Enviar um comentário