Delphi Can
NetHTTPClient.Post - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: NetHTTPClient.Post (/showthread.php?tid=7668)



NetHTTPClient.Post - guvenlik - 30-03-2024

iyi günler hayırlı ramazanlar. bir konuda yardımınıza ihtiyacım old. bir projem var. başlıktanda anlaşıldığı gibi http post işlemleri kodları burayada yazacağım belki birinin de işini görür. yada ilham veriri.

php tadafı


<?php
try {
     $db = new PDO("mysql:host=localhost;dbname=database", "user", "password+");
     $db->exec("SET NAMES 'utf8'; SET CHARSET 'utf8'");
} catch ( PDOException $e ){
     print $e->getMessage();
}

if($_POST){
    $veri = json_decode($_POST['json'], true);
    //echo $veri["kuladi"];
    //echo $veri["sifre"];
   
    switch($veri["islem"])
    {
        case 'kontrol':{
            $query = $db->query("SELECT * FROM kullanici WHERE kuladi = '{$veri["kuladi"]}' and sifre = {$veri["sifre"]}")->fetch(PDO::FETCH_ASSOC);
            if ( $query ){
                echo "Dogru";
            } else {
                echo "yanlis";
            }
        }
        break;
        case 'kayit':{

            $query = $db->prepare("INSERT INTO kasa SET
                islem = ?,
                aciklama = ?,
                tarih = ?,
                tutar = ?");
                $insert = $query->execute(array(
                    $veri["tip"], $veri["MesajTxt"], date('Y-m-d',strtotime($veri["TarihTxt"])), floatval($veri["TutarTxt"])
                ));
                if ( $insert ){
                    $last_id = $db->lastInsertId();
                    print "insert işlemi başarılı!";
                }
        }
        break;

        case 'getir':{
            $query = $db->query("SELECT * FROM kasa ORDER BY Id ASC",PDO::FETCH_ASSOC);
            $data = $query->fetchAll(PDO::FETCH_ASSOC);
           
            echo json_encode($data, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT)
          
        }
        break;
        default;
           
            break;
    }
}
?>


delphi tarafı


procedure TForm7.FormShow(Sender: TObject);
var
  NetHTTPClient : TNetHTTPClient;
  parametres : TStringStream;
  jsons : TStringList;
  jValue : TJSonValue;
  jArray : TJSONArray;
  cevap : string;
begin
  NetHTTPClient := TNetHTTPClient.Create(nil);
  try
    NetHTTPClient.ContentType := 'application/json';
    NetHTTPClient.AcceptEncoding := 'UTF-8';

    jsonS := TStringList.create;
   jsonS.Text := 'json={"islem":"getir"}';


    try
      cevap := NetHTTPClient.Post('https://www.palagame.biz.tr/index.php', jsonS).ContentAsString(TEncoding.UTF8);
      memo1.Lines.Add(cevap);
      jValue := TJSONObject.ParseJSONValue(memo1.Text);
      memo1.Lines.Add(jValue.GetValue<string>('islem'));
    finally
      jsonS.Free;
    end;
  finally
    NetHTTPClient.Free;

  end;
end;



hata mesajı olarakta (-- Value "islem" not found --)

gelen veri şu

Array
(
    [0] => Array
        (
            [Id] => 9
            [kulid] =>
            [islem] => Giriş
            [aciklama] => Fitre Giriş ilhami pala
            [tutar] => 200.00
            [tarih] => 2024-03-29
        )

    [1] => Array
        (
            [Id] => 10
            [kulid] =>
            [islem] => Giriş
            [aciklama] => Zekat Giriş ilhami pala
            [tutar] => 300.00
            [tarih] => 2024-03-29
        )

    [2] => Array
        (
            [Id] => 11
            [kulid] =>
            [islem] => Giriş
            [aciklama] => Fitre Giriş sinem pala
            [tutar] => 400.00
            [tarih] => 2024-03-29
        )

    [3] => Array
        (
            [Id] => 12
            [kulid] =>
            [islem] => Giriş
            [aciklama] => Fitre Giriş elif pala
            [tutar] => 600.00
            [tarih] => 2024-03-29
        )

    [4] => Array
        (
            [Id] => 13
            [kulid] =>
            [islem] => Giriş
            [aciklama] => Zekat Giriş  sinem pala
            [tutar] => 400.00
            [tarih] => 2024-03-29
        )

    [5] => Array
        (
            [Id] => 14
            [kulid] =>
            [islem] => Giriş
            [aciklama] => Zekat Giriş  elif pala
            [tutar] => 500.00
            [tarih] => 2024-03-29
        )

    [6] => Array
        (
            [Id] => 15
            [kulid] =>
            [islem] => Çıkış
            [aciklama] => Fitre Çıkış dsadsa
            [tutar] => 100.00
            [tarih] => 2024-03-29
        )

    [7] => Array
        (
            [Id] => 16
            [kulid] =>
            [islem] => Çıkış
            [aciklama] => Fitre Çıkış rrewr
            [tutar] => 200.00
            [tarih] => 2024-03-29
        )

    [8] => Array
        (
            [Id] => 17
            [kulid] =>
            [islem] => Giriş
            [aciklama] => Zekat Çıkış cxx
            [tutar] => 50.00
            [tarih] => 2024-03-29
        )

    [9] => Array
        (
            [Id] => 18
            [kulid] =>
            [islem] => Giriş
            [aciklama] => Zekat Çıkış ggggg
            [tutar] => 150.00
            [tarih] => 2024-03-29
        )

)


Burada bir parse işlemi yapmam gerekiyor lakin hata mesajı alıyorum. bir yerde bir hatam var bulamadım. acil olmasa buraya yazmam araştırır bulur yaparım.


Cvp: NetHTTPClient.Post - delphi.developer - 30-03-2024

jValue := TJSONArray(TJSONObject.ParseJSONValue)(memo1.Text);
TJSONObject.ParseJSONValue, TJSONValue tipinde bir referans geri döndürür. Bu nedenle onu TJSONObject yahut TJSONArray tipine dönüştürmelisiniz. Sizin veri örneğinize göre TJSONArray olması gerekir. Sonrasında jValue için iterasyonla okuma yapabilirsiniz.
Yanılıyor olabilirim ama veri örneğine baktığımda php 'de var_dump gibi fonksiyonla elde edilmiş gibi. Bu ifade Delphi tarafında Parse edildiğinde geçerli bir JSON dizesi sayılmayacaktır.


NetHTTPClient.Post - mrmarman - 30-03-2024

Aşağıdaki gibi denemek isteyebilirsiniz.


var
  NetHTTPClient : TNetHTTPClient;
  jsons         : TStringList;
  jArray        : TJSONArray;
  cevap         : string;
  i : Integer;
begin
  NetHTTPClient := TNetHTTPClient.Create(nil);
  try
    NetHTTPClient.ContentType     := 'application/json';
    NetHTTPClient.AcceptEncoding  := 'UTF-8';

    jsonS := TStringList.create;
    try
       jsonS.Text := 'json={"islem":"getir"}';
       cevap := NetHTTPClient.Post('https://www.palagame.biz.tr/index.php', jsonS).ContentAsString(TEncoding.UTF8);
    finally
      jsonS.Free;
    end;

    jArray := TJSONArray( TJSONObject.ParseJSONValue(cevap) );
    if jArray <> nil then
    try
      for i := 0 to jArray.Count-1 do
      begin
        with TJSONObject( jArray.Items[i] ) do
        begin
          memo1.Lines.Add(
            System.Sysutils.Format( '%.2d - [%s] %s : %6s',
              [
                TJSONNumber(FindValue('Id')).AsInt,
                FindValue('tarih').Value,
                FindValue('islem').Value,
                FindValue('tutar').Value
              ]) );
        end;
      end;
    finally
      freeandnil(jArray);
    end;
  finally
    NetHTTPClient.Free;
  end;
end;



Sonuç :
Kod:
09 - [2024-03-29] Giriş : 200.00
10 - [2024-03-29] Giriş : 300.00
11 - [2024-03-29] Giriş : 400.00
12 - [2024-03-29] Giriş : 600.00
13 - [2024-03-29] Giriş : 400.00
14 - [2024-03-29] Giriş : 500.00
15 - [2024-03-29] Çıkış : 100.00
16 - [2024-03-29] Çıkış : 200.00
17 - [2024-03-29] Giriş :  50.00
18 - [2024-03-29] Giriş : 150.00



NetHTTPClient.Post - guvenlik - 31-03-2024

Muharrem ARMAN hocam teşekkürler ama elim ayağım yine durmadı kendimce bir çözüm ürettim belki senin ki kadar kullanışlı değil ama benim çözümde beni idare edecek gibi. yazacağım çözümü buraya. Cevap verdiğin için TEŞEKKÜRLER hocam.


NetHTTPClient.Post - guvenlik - 31-03-2024

Muharrem ARMAN Hocam Çok Teşekkürler sizin verdiğiniz örnek çok işime yaradı. Elleriniz dert görmesin. Bu projede sizinde isminiz geçecek inşallah


NetHTTPClient.Post - mrmarman - 31-03-2024

Rica ederim numara formatına çevirip okuma, json array, json object
konuları için iyi bir örnek veemişsiniz. Değerlendirmek bize düştü.

kodda free edilen blokta karışıklık olmuş yeniden inceleyin isterseniz.
jarray free olacak yerde copy/paste kazası olmuş