お世話になっております。
WPFを使って情報をJSON形式でWeb側にPOSTしてそれをWEB側であるPHPを使って
Linuxのサーバー上にあるデータベース保存したいのですがうまくいかないです
挙動としてはINSERT自体は成功するのですが値がNULLになってしまいます
xaml
1 <Button Content="Button" HorizontalAlignment="Left" Margin="58,42,0,0" VerticalAlignment="Top" Width="75" Click="btnApi_Click"/>
xaml.cs
1private async void btnApi_Click(object sender, RoutedEventArgs e) 2 3 { 4 5 var client = new HttpClient(); 6 var json = "{ \"age\" : 20, \"name\" : \"太郎\" }"; 7 var content = new StringContent(json, Encoding.UTF8, "application/json"); 8 var response = await client.PostAsync("http://localhost/jsonDebug.php/",content); 9 10 11 }
php
1<?php 2 3try{ 4 require "./private/database.php"; 5 $DBH->beginTransaction(); 6 7 8$url = $_SERVER['REQUEST_URI']; 9 10$json = $url; 11$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 12$arr = json_decode($json,true); 13$FirstIndex = $arr["age"]; 14$SecondIndex = $arr["name"]; 15 16$STMT = $DBH->prepare('INSERT INTO debug(Age,Name) VALUE(?,?)'); 17 $STMT->bindValue(1,$FirstIndex,PDO::PARAM_INT); 18 $STMT->bindValue(2,$SecondIndex,PDO::PARAM_STR); 19$STMT->execute(); 20 21 22 23 24 25 26$DBH->commit(); 27}catch(Exception $ERROR){ 28 $DBH->rollBack(); 29 print $ERROR; 30 exit(); 31} 32 33 34?>
PHP側の処理が提示されないままではなんとも言えませんし、タイトルと中身が合ってません。
APIなら「表示」という概念はありません。
お世話になっております。
不足していたのに気ずきPHPのコード
も追加させていただきました
なおデーター接続部分は省略しております
渡されたJSONを受け取る処理がどこにもありませんね。
というかWebAPIならGETかPOSTでリクエストしないといけないのでは。
PHP側も何かしらのレスポンスは返さないとC#側で実行結果どうなったか受け取れないのでは。
設計どうなってます?
PostAsync関数でPOSTリクエストしているという事ではないのでしょうか...
でもPHP側では何も受け取ってないですよね
そうでうね...
例えばどういった感じでPHP側で受け取れるのでしょうか
file_get_contents関数など色々試してみたのですがうまくいかず
ぜひおすすめの参考サイトなどを教えていただけると幸いです
試したけど出来なかったコード
①$json = $_POST[$_SERVER['http://localhost/Debug.php']];
$json = file_get_contents('http://localhost/Debug.php');
XAML側のボタンのname属性をPHPのPOSTに指定するのでしょうか
https://teratail.com/questions/349677 ←これを放置しておかないでクローズしてください。
WPFアプリのことは考えず、まずはサーバー側(PHP)のPostリクエストに相当するURLをURLバーから手打ちで入力してみて、データベースにデータが追加されることを確認してみてはどうでしょうか。
また、そもそも設計がよくわかりませんでした。WPFのクライアントがいて、PHPを埋め込んだHTMLのページとPHPのサーバーがあって、WPFのクライアントがPHPを埋め込んだHTMLのページのURLをリクエストしている(?)ように見えますが、もしそうであれば直接PHPのサーバーにリクエストを送れば良いのではないかと思いました。
ご返信のほう、ありがとうございます。
PHPを少し改造してPHP単体でデーターベースに追加できるか確認したところ
問題なく成功しました
やりたい事としてはWPFクライアント側で入力したIDに基づきPOSTでPHP(サーバー)側にリクエスト
したIDをPHPが処理してそのIDの情報だけSELECTした情報をWPFのクライアントに返してあげたいです
以前の質問 https://teratail.com/questions/349677 の SurferOnWww さんが紹介した記事 ( http://surferonwww.info/BlogEngine/post/2019/09/29/call-aspnet-web-api-from-httpclien.aspx ) は、サーバーからのコンテンツを取得する処理が書かれており、参考になると思います。
参考にしているページやドキュメントなどはあるでしょうか。もしあれば記載していただきたいです。
もし無ければご自身の力でもう少し調べてもらうか、調べ方が分からない旨を質問に記載しましょう。