【问题标题】:PHP webpage shows empty string after passing Json through c# RESI APIPHP网页通过c#RESI API传递Json后显示空字符串
【发布时间】:2019-03-06 11:49:51
【问题描述】:

我已经问过这个问题,但需要进一步的帮助。 c# is not sending json request to PHP

我正在尝试使用 JSON 和 REST API HTTP 请求将数据从 c# 发送到 PHP 网页。

在 PHP 页面上我看到“字符串 (0)”

c#代码

user user = new user();
    {
        user.firstname = "aaaa";
        user.secondname = "aaaaaaaaaaa";
        user.email = "aaa";
        user.phonenumber = "aaa";
    };
    string json = JsonConvert.SerializeObject(user);
    HttpWebRequest request = WebRequest.Create("https://scs.agsigns.co.uk/test.php") as HttpWebRequest;
    request.ContentType = "application/json";
    //request.Accept = "application/json, text/javascript, */*";
    request.Method = "POST";
    using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
    {
        writer.Write(json);
    }
    HttpWebResponse response = request.GetResponse() as HttpWebResponse;
    Stream stream = response.GetResponseStream();

    string json1 = "";

    using (StreamReader reader = new StreamReader(stream))
    {
        while (!reader.EndOfStream)
        {
            json1 += reader.ReadLine();
        }
    }
    DisplayAlert("Alert", json1, "OK");

PHP

$content = file_get_contents("php://input");

var_dump($content);

在 c# 中我收到此警报

c# display alert message

在 PHP 网页中,我看到以下内容

PHP page shows string(0)

我想获取应用程序发送并保存到 MySql 的数据。

编辑

我已修改 PHP 文件代码以在 MySQL 中保存数据。

我遇到错误

注意:尝试在第 16 行的 C:\inetpub\scs\test.php 中获取非对象的属性“名称”

这是我的 PHP 代码。

//Receive the RAW post data.
$content = file_get_contents("php://input");

$obj = json_encode($content);

$insert_stmt = $mysqli->prepare("INSERT INTO test (name,address) VALUES (?,?)");
$name =$obj->{'name'};
$address = $obj->{'address'};


$insert_stmt->bind_param("ss", $name, $address);
//Execute the statement
$insert_stmt->execute();

【问题讨论】:

  • 如果您重新加载页面,页面将始终显示为空,因为在页面重新加载时尚未发送任何内容。要查看它是否正常工作,请返回响应 exit(json_encode(['success' => true])); 并在您的 C# 中选择它。
  • 所以当app向PHP发送数据时;我如何在 PHP 中使用该数据,因为我想将该数据保存在 MySQL 中
  • 当app发出请求时,如果一切正常,那么你可以在PHP中使用它。因此,只需编写 PHP 代码的其余部分,就好像数据已达到正常水平并测试行是否出现在 db 中。

标签: c# php mysql json


【解决方案1】:

你应该使用HttpClient 而不是HttpWebRequest

使用 HttpClient 您的请求将如下所示

public async void SendUserDataToServer()
{
    user user = new user();
    {
        user.firstname = "aaaa";
        user.secondname = "aaaaaaaaaaa";
        user.email = "aaa";
        user.phonenumber = "aaa";
    };
    string json = JsonConvert.SerializeObject(user);
    using (var client = new HttpClient())
    {
        var response = await client.PostAsync(
            "https://scs.agsigns.co.uk/test.php", 
             new StringContent(json, Encoding.UTF8, "application/json"));
    }
    DisplayAlert("Alert", json, "OK");
}

参考this

【讨论】:

  • 谢谢,@Mihir Dave。我最初的问题仍然存在。 c# "DisplayAlert" 显示发送到 PHP 的 Json 字符串。我只是试图在 PHP 中输​​出结果,但仍然显示为 NULL。如何在 PHP 页面上回显数据。
  • 这是因为两个网页都有不同的会话,为了在您的 php 页面上查看这些数据,您必须将数据存储在 scs.agsigns.co.uk/test.php 上接收到的某个位置,然后在您的 php 页面上获取它
  • 什么是存储数据的最佳方式。我尝试将数据存储在局部变量中,但我相信它们会在页面重新加载时被清除。
  • 明白这一点,网页是无状态的,并且会使用新请求创建新实例,因此局部变量不是实现您想要的方式的方法。在您的scs.agsigns.co.uk/test.php 页面上,您必须编写将传入的帖子数据存储到数据库的逻辑。然后把它拉回任何你想要的地方
  • 我已经添加了 SQL 部分来将数据保存到 MYSQL 中。获取错误无法从对象获取属性。我已经用新代码编辑了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 2014-08-11
  • 2017-07-25
  • 2016-07-05
  • 2019-11-27
相关资源
最近更新 更多