Php İle Xml Okuma

Php ile xml dosyasından veri okuma işlemi

   header('Content-Type: text/html; charset=utf-8');
 
    if (file_exists(__DIR__.'/conf.xml')) 
    {
        $xml = simplexml_load_file(__DIR__.'/conf.xml');
        $XmlServer = $xml->Server;
        $XmlData   = $xml->Database;
        $XmlUser   = $xml->Kullanici;
        $XmlSifre  = $xml->Sifre;      
    } 
    else
    {
        $XmlServer = '';
        $XmlData   = '';
        $XmlUser   = ''; 
        $XmlSifre  = '';
    }

örnek Xml Dosyası

<?xml version="1.0" encoding="iso-8859-9"?> 
<SQLSERVER>
		<Server>ServerAdi</Server>
		<Database>DatabaseAdi</Database>
		<Kullanici>Kullanıcı</Kullanici>
		<Sifre>Şifre</Sifre>
</SQLSERVER>

Delphi JSON Class Örnek

Delphi ile json işlemlerinde class oluşturarak uygulamaya dahil edilmesi ve kullanımı

öncelikle bir json formatında dosyaya ihtiyacımız var bunun https://www.json-generator.com/ adresinden bir json oluşturacağım

generate butonuna basarak json oluşturma işlemini tamamlıyorum ve dowloand JSON file butonu ile dosyayı indiriyorum

dosyamı indirdikten sonra https://jsontodelphi.com/ adresinden oluşturmus olduğum Json dosyama uygun bir şekilde class oluşturmasını istiyorum burada json verilerimizi ekliyoruz ve generate butonuna basıyoruz

Json class ımız oluşturduktan sonra aşağıdaki şekilde pencere açılıyor ve classlarımızı indiriyoruz

Dosyalarımızı indirip kaydettikden sonra Delphi de yeni bir uygulama oluşturup classlarımızı projemize ekliyoruz

projemize ekledikten sonra uses satırına bu iki class ı ekliyerek işlemlere başlıyabiliriz

unit AnaFormU;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm3 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;



implementation

{$R *.dfm}

uses Pkg.Json.DTO, RootUnit;

end.

projedeki kodlarımız bu şekilde olması gerekli dosyalarımızı ekledikten sonra

daha sonra forma bir adet memo ve bir adet buton ekliyorum. Bu kullanım isteğine göre direk dosyayı da okuyup alabilirsiniz farklı yöntemlerde kullanılabiliriz.

eklediğim memo nesnesine json verimi ekliyorum

procedure TForm3.Button1Click(Sender: TObject);
var
  JSonRoot : TRootDTO;
  I: Integer;
  Y: Integer;
begin
  JSonRoot := TRootDTO.Create;
  try
    JSonRoot.AsJson := Memo1.Text;
    For I := 0 to JSonRoot.Items.Count -1 do // ana root un altındaki veriler için kurulan döngü
    Begin
      ShowMessage(JSonRoot.Items[I].About);

      For Y := 0 to JSonRoot.Items[I].Friends.Count -1 do  // alt kırılımdaki veriler için kurulan döngü
      Begin
         ShowMessage(JSonRoot.Items[I].Friends.Items[Y].Name);
      End;
    End;
  finally
    JSonRoot.Free;
  end;
end;

butonumuz altında eklediğim kodlar ile json nesnelerine istediğimiz gibi ulaşabiliriz ve buradan sonra hangi işlemleri yaptırmak istiyorsak o kodları yazıp istediğimiz gibi kullanabiliriz.

Rest yönteminde de aynı yapı kullanılabilir.

örnek proje dosyalarını indirmek için : https://disk.yandex.com.tr/d/vNHwOxFThIMbgQ

Json Dosya

[
  {
    "_id": "609f90fdb6183a5e4b5f9c47",
    "index": 0,
    "guid": "52597634-ea2b-4977-a4cf-4ee6283cb035",
    "isActive": false,
    "balance": "$3,217.24",
    "picture": "http://placehold.it/32x32",
    "age": 33,
    "eyeColor": "blue",
    "name": "Cummings Mcgee",
    "gender": "male",
    "company": "FUELTON",
    "email": "cummingsmcgee@fuelton.com",
    "phone": "+1 (870) 434-2176",
    "address": "235 Linwood Street, Coloma, Northern Mariana Islands, 8966",
    "about": "Ut et dolor mollit aliquip et aute labore ea ut exercitation amet occaecat ex. Laboris sunt mollit nulla mollit est ea excepteur sint ex dolore id aliqua. Non laborum ipsum sit reprehenderit ullamco. Culpa velit ullamco aute dolor. Velit sunt incididunt amet elit consectetur excepteur amet ex mollit eu sunt eiusmod.\r\n",
    "registered": "2018-12-28T11:52:08 -03:00",
    "latitude": -44.755947,
    "longitude": 6.985219,
    "tags": [
      "labore",
      "eiusmod",
      "magna",
      "adipisicing",
      "occaecat",
      "consectetur",
      "id"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Taylor May"
      },
      {
        "id": 1,
        "name": "Zimmerman Conner"
      },
      {
        "id": 2,
        "name": "Casey Howell"
      }
    ],
    "greeting": "Hello, Cummings Mcgee! You have 5 unread messages.",
    "favoriteFruit": "apple"
  },
  {
    "_id": "609f90fd768c4ddf28327448",
    "index": 1,
    "guid": "bf240ca4-5264-4b98-8c83-1e1f2271022f",
    "isActive": true,
    "balance": "$2,203.26",
    "picture": "http://placehold.it/32x32",
    "age": 39,
    "eyeColor": "green",
    "name": "Chandler Richards",
    "gender": "male",
    "company": "LUNCHPAD",
    "email": "chandlerrichards@lunchpad.com",
    "phone": "+1 (863) 596-2946",
    "address": "842 Cumberland Walk, Barclay, Wisconsin, 5437",
    "about": "Ea eu ullamco nostrud laborum eu id elit sint velit. Aute cillum veniam sit sunt. Commodo do non adipisicing in duis minim ut ullamco. Dolore irure fugiat quis officia ad laboris quis incididunt. Id enim nisi irure Lorem. Sunt cillum minim ipsum consequat sunt voluptate ex ullamco ea fugiat labore commodo culpa. Magna nisi veniam non laborum dolore quis laboris amet proident ipsum amet est velit.\r\n",
    "registered": "2016-07-05T03:43:22 -03:00",
    "latitude": -78.387974,
    "longitude": 122.367721,
    "tags": [
      "pariatur",
      "est",
      "sint",
      "nisi",
      "ex",
      "proident",
      "ipsum"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Brandi Cervantes"
      },
      {
        "id": 1,
        "name": "Bird Taylor"
      },
      {
        "id": 2,
        "name": "Shields Lynch"
      }
    ],
    "greeting": "Hello, Chandler Richards! You have 4 unread messages.",
    "favoriteFruit": "banana"
  },
  {
    "_id": "609f90fd565c87fb4bc0cf08",
    "index": 2,
    "guid": "48d47780-50e6-40f7-be71-11288b87cd8f",
    "isActive": false,
    "balance": "$3,285.38",
    "picture": "http://placehold.it/32x32",
    "age": 31,
    "eyeColor": "blue",
    "name": "Noble Gallagher",
    "gender": "male",
    "company": "REALMO",
    "email": "noblegallagher@realmo.com",
    "phone": "+1 (880) 492-2817",
    "address": "946 Central Avenue, Blandburg, Michigan, 2916",
    "about": "Sunt officia qui nulla aute cillum. Irure aliqua do enim do irure dolor tempor. Aute aliquip consectetur deserunt sint tempor aute commodo ea consectetur pariatur adipisicing ullamco et velit. Qui aliqua aliqua minim elit est laboris veniam duis occaecat consectetur. Qui proident laborum culpa consequat nulla elit sit anim consequat. Ea excepteur elit nulla nisi est ipsum esse commodo Lorem voluptate. Incididunt nisi minim eiusmod aliqua.\r\n",
    "registered": "2014-02-04T01:52:38 -02:00",
    "latitude": -81.255892,
    "longitude": -125.918893,
    "tags": [
      "sunt",
      "magna",
      "sunt",
      "consequat",
      "pariatur",
      "esse",
      "non"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Petra Waters"
      },
      {
        "id": 1,
        "name": "Wiley James"
      },
      {
        "id": 2,
        "name": "Emerson Fulton"
      }
    ],
    "greeting": "Hello, Noble Gallagher! You have 3 unread messages.",
    "favoriteFruit": "strawberry"
  },
  {
    "_id": "609f90fd5f4cc2c9fa433416",
    "index": 3,
    "guid": "a2ee1e27-e694-414a-9197-1b0fc3f83e84",
    "isActive": true,
    "balance": "$1,092.75",
    "picture": "http://placehold.it/32x32",
    "age": 31,
    "eyeColor": "blue",
    "name": "Edna Head",
    "gender": "female",
    "company": "CALLFLEX",
    "email": "ednahead@callflex.com",
    "phone": "+1 (848) 598-3042",
    "address": "718 Crooke Avenue, Dargan, Montana, 4841",
    "about": "Eiusmod ut sunt duis reprehenderit velit id cillum minim. Commodo labore eu nulla ut proident dolor. Culpa reprehenderit elit proident eu officia anim dolore ut aute ipsum reprehenderit laborum enim. Nulla proident esse occaecat incididunt qui proident voluptate esse. Irure aliqua nisi in magna consectetur pariatur eiusmod aliquip est tempor. Lorem mollit eu reprehenderit nulla fugiat.\r\n",
    "registered": "2016-12-08T04:03:57 -03:00",
    "latitude": -55.840006,
    "longitude": 123.928552,
    "tags": [
      "ea",
      "nostrud",
      "occaecat",
      "occaecat",
      "laborum",
      "ipsum",
      "anim"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Norton Boyle"
      },
      {
        "id": 1,
        "name": "Gena Spears"
      },
      {
        "id": 2,
        "name": "Billie Franks"
      }
    ],
    "greeting": "Hello, Edna Head! You have 5 unread messages.",
    "favoriteFruit": "apple"
  },
  {
    "_id": "609f90fd8b0843359e1aec3d",
    "index": 4,
    "guid": "f6203fa2-8663-4839-8f6f-057b23666e66",
    "isActive": true,
    "balance": "$2,409.46",
    "picture": "http://placehold.it/32x32",
    "age": 31,
    "eyeColor": "brown",
    "name": "Holden Dale",
    "gender": "male",
    "company": "STRALOY",
    "email": "holdendale@straloy.com",
    "phone": "+1 (888) 536-3882",
    "address": "692 Russell Street, Canby, Wyoming, 8722",
    "about": "Est sint laboris labore et cillum velit Lorem excepteur id labore adipisicing incididunt. Mollit mollit aute ipsum exercitation exercitation elit non Lorem ipsum laborum anim. Non incididunt eu qui consequat elit ea cillum consectetur aute minim do cillum minim aute. Laborum incididunt id nisi voluptate in. Duis est esse mollit proident. Dolor consequat ut non magna dolore.\r\n",
    "registered": "2015-11-08T12:25:28 -03:00",
    "latitude": 78.775663,
    "longitude": -132.169324,
    "tags": [
      "consectetur",
      "commodo",
      "labore",
      "ea",
      "incididunt",
      "tempor",
      "excepteur"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Snider Koch"
      },
      {
        "id": 1,
        "name": "Nina Mcknight"
      },
      {
        "id": 2,
        "name": "Clay Bullock"
      }
    ],
    "greeting": "Hello, Holden Dale! You have 2 unread messages.",
    "favoriteFruit": "banana"
  },
  {
    "_id": "609f90fd7da5851dc6d4e963",
    "index": 5,
    "guid": "23d4bb4e-70ab-4c5e-99d0-98a7f9d25bce",
    "isActive": false,
    "balance": "$1,836.32",
    "picture": "http://placehold.it/32x32",
    "age": 28,
    "eyeColor": "green",
    "name": "Bradshaw Randall",
    "gender": "male",
    "company": "KENGEN",
    "email": "bradshawrandall@kengen.com",
    "phone": "+1 (955) 517-3942",
    "address": "485 Morgan Avenue, Brenton, Idaho, 4739",
    "about": "Labore voluptate cupidatat id ea Lorem dolore ipsum qui. Elit aute et dolore enim nulla eu nisi incididunt dolore officia tempor. Cillum veniam consequat cillum nisi in.\r\n",
    "registered": "2019-02-06T07:16:15 -03:00",
    "latitude": 75.626382,
    "longitude": -27.711717,
    "tags": [
      "labore",
      "consequat",
      "incididunt",
      "ex",
      "incididunt",
      "voluptate",
      "cupidatat"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Cooke Hancock"
      },
      {
        "id": 1,
        "name": "Suarez Hood"
      },
      {
        "id": 2,
        "name": "Bates Leblanc"
      }
    ],
    "greeting": "Hello, Bradshaw Randall! You have 7 unread messages.",
    "favoriteFruit": "apple"
  },
  {
    "_id": "609f90fd70cc6cec2e8ce707",
    "index": 6,
    "guid": "25feec15-c3f9-4a79-950b-88e76a78b675",
    "isActive": false,
    "balance": "$3,214.59",
    "picture": "http://placehold.it/32x32",
    "age": 24,
    "eyeColor": "green",
    "name": "Darlene Glover",
    "gender": "female",
    "company": "KROG",
    "email": "darleneglover@krog.com",
    "phone": "+1 (959) 522-2797",
    "address": "631 Gardner Avenue, Crisman, Louisiana, 3576",
    "about": "Quis pariatur cillum cillum sint et consectetur occaecat velit laboris elit et mollit. Veniam ut velit id enim consequat consequat id officia aliquip anim consequat qui. Quis cillum in ipsum consectetur aliqua exercitation voluptate laborum in laborum eu minim consequat. Nisi occaecat enim ad aute sit incididunt do ullamco et nulla. Nulla officia in mollit duis consectetur culpa excepteur. Dolor ullamco est commodo magna irure occaecat eu excepteur exercitation dolore duis officia. Cillum aliquip id sunt sunt in labore anim mollit laboris est dolor exercitation consectetur.\r\n",
    "registered": "2018-07-03T03:10:32 -03:00",
    "latitude": -42.579361,
    "longitude": 178.507411,
    "tags": [
      "ea",
      "do",
      "incididunt",
      "magna",
      "est",
      "ex",
      "reprehenderit"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Rosalie Knight"
      },
      {
        "id": 1,
        "name": "Mccoy King"
      },
      {
        "id": 2,
        "name": "Darla Morin"
      }
    ],
    "greeting": "Hello, Darlene Glover! You have 3 unread messages.",
    "favoriteFruit": "apple"
  }
]
SQl Kontrollü view ekleme scripti

Sql server da ekliyeceğimiz view kontrol eder var ise update satırının içinde view imizi oluşturur yok sa create view bloğundaki kodu çalıştırır ve view i database e ekler

IF NOT EXISTS(select * FROM sys.views where name = 'TEST')
BEGIN
    EXEC sp_executesql N'CREATE VIEW [dbo].[TEST]
AS
    SELECT * FROM TABLO WHERE ID > 100 '
END
ELSE
BEGIN
 
      EXEC sp_executesql N'  ALTER VIEW [dbo].[TEST] AS 
    SELECT * FROM TABLO WHERE ID > 100 '
 
END
SQL Kontollü Tabloya Index Ekleme

Sql Server da bir tabloda eklemek istediğimiz index yok ise index i oluşturur var ise herhangi bir işlem yapmaz

 IF NOT EXISTS( select * from sys.indexes where name = 'IND_CHAR_AKTARILDI')
BEGIN 
	EXEC sp_executesql N'CREATE NONCLUSTERED INDEX [IND_CHAR_AKTARILDI] ON [dbo].[CIHAZHAREKET] ([AKTARILDI])'
END

SQL Kontrollü tabloya alan ekleme

Sql server da tablo da alan yok ise alan ekleme var ise herhangi bir işlem yapmama scripti

IF NOT EXISTS(SELECT * FROM SYS.COLUMNS WHERE OBJECT_ID=OBJECT_ID('TABLOADI') AND NAME='ALANADI') 
BEGIN 
		ALTER TABLE TABLOADI  ADD ALANADI NVARCHAR(255)  
END

SQL Kontrollü tablo ekleme scripti

Sql server bir tablo database de yok ise tablo eklensin var ise eklenmesin işlemini yapmak için aşağıdaki script i kullanabiliriz

IF NOT OBJECT_ID('DATABASE.dbo.[TABLO]','U') IS NOT NULL
BEGIN
	CREATE TABLE [dbo].[TABLO](
		[ID] [int] NOT NULL,
		[ALAN1] [int] NULL,
		[ALAN2] [varchar](50) NULL,
				[OLTAR] [datetime] NULL,
		[OLUSER] [varchar](255) NULL,
			 CONSTRAINT [PK_PER_TRANSFER] PRIMARY KEY CLUSTERED 
	(
		[ID] ASC
	)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
	) ON [PRIMARY]
 
END 
Delphi Array Fonksiyon

Delphi ile array birden fazla veri döndürmeye yarar

type
  TMyArray = array[1..10] of string; // Genel bir array türü tanımlıyoruz bu türü göndereceğiniz bilgilere göre boyutunu ayarlıyabilirsiniz


Function TAnaF.Get_StokBilgi(StokKodu:String):TMyArray;
var
  Qry: TUniQuery;
Begin
  Qry := TuniQuery.Create(Self);
  Qry.Connection := EtaMasterDB;
  DataSetAcUnidac(Qry,'STKKART','STKKOD,STKCINSI,STKBIRIM,STKGENKDVNO','STKKOD = ' + QuotedStr(StokKodu));
  Result[1] := Qry.FieldByName('STKCINSI').AsString;
  Result[2] := Qry.FieldByName('STKBIRIM').AsString;
  Result[3] := Qry.FieldByName('STKGENKDVNO').AsString;

  Qry.Close;
  FreeAndNil(Qry);

End;

Kullanımı


procedure TAnaF.Button1Click(Sender: TObject);
var
   StokBilgi : TMyArray;
begin
  StokBilgi := Get_StokBilgi(Fatura_QStok_Kodu.AsString);
  ShowMessage(StokBilgi[1]);
  ShowMessage(StokBilgi[2]);
  ShowMessage(StokBilgi[3]);
end;

Delphi FTP dosya gönderme
function TAnaF.FtpDosyaGonder (IdFTP : TIdFTP; SrcDosya, DesDosya:TFileName; RemoteDir: String;FtpAdr,FtpUser,FtpSifre:String ):string;
var
  FtpC: TIdFTP;
  yil: Word;
  ay: Word;
  gun: Word;
begin
  DecodeDate(date,yil,ay,gun);
  FtpC := TIdFTP.Create(Self);
  Result := '';
  with FtpC do
  Begin
    Disconnect;

    AutoLogin     :=  IdFTP.AutoLogin;
    AutoIssueFEAT := IdFTP.AutoIssueFEAT;
    IPVersion     := IdFTP.IPVersion;
    TransferType  := IdFTP.TransferType;
    ReadTimeout   := IdFTP.ReadTimeout;
    ListenTimeout := IdFTP.ListenTimeout;
    Passive       := IdFTP.Passive;

    Host      := FtpAdr;
    Username  := FtpUser;
    Password  := FtpSifre;
    Connect;
  End;

     Application.ProcessMessages;
  If FtpC.Connected then
  begin
    FtpC.ChangeDir(RemoteDir);

     try
        FtpC.MakeDir(RemoteDir+'/'+yil.ToString);     // Klasör oluşturmayı dene
        FtpC.ChangeDir(RemoteDir+'/'+yil.ToString);  // oluşturulan klasöre bağlan
      except
        FtpC.ChangeDir(RemoteDir+'/'+yil.ToString); // eğer klasör varsa klasöre git 
      end;

    Try
      Application.ProcessMessages;
 //     FtpC.TransferType := ftBinary; // Uses kısmına IdFTPCommon
 eklenmeli
      FtpC.Put(DesDosya,SrcDosya, False);
    Finally
      Result := SiteURL.Text+'/'+yil.ToString+'/'+SrcDosya; //gönderilen yıl bazlı klasöre yükler
      FtpC.Quit;
    end;
        Application.ProcessMessages;
  end;
  FtpC.Disconnect;
  FreeAndNil(FtpC);


end;

Kullanımı

procedure TAnaF.Button1Click(Sender: TObject);
var
    dosya: string;
    Mesaj: string;
begin
  dosya :='0860472212.png';
  Mesaj := FtpDosyaGonder(FtpConnection,dosya,TempFileYolu + dosya,FtpYol.Text,FTPAdres.Text,FtpKullanici.Text,FtpSifre.Text);
  ShowMessage(Mesaj);
end;