![]() |
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 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ş |