Как я могу получить данные json в файле PHP? - PullRequest
1 голос
/ 26 апреля 2020

Я новичок в Xamarin и C#, я хочу из своего приложения вставить имя и автора книг в базу данных MySql, поэтому я создал класс с именем BooksInsert.cs:

using System;
using System.Collections.Generic;
using System.Text;

namespace NewTest.Model
{
    class BooksInsert
    {
        public string book_name { get; set; }
        public string book_auther { get; set; }
    }
}

затем другой класс с именем WebHelper.cs для GET и POST:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Linq;
using System.Net;

namespace NewTest.Model
{
    class WebHelper
    {
        public string Post(Uri url, string value)
        {
            var request = HttpWebRequest.Create(url);
            var byteData = Encoding.ASCII.GetBytes(value);
            request.ContentType = "application/json";
            request.Method = "POST";

            try
            {
                using (var stream = request.GetRequestStream())
                {
                    stream.Write(byteData, 0, byteData.Length);
                }
                var response = (HttpWebResponse)request.GetResponse();
                var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

                return responseString;
            }
            catch (WebException)
            {
                return null;
            }
        }

        public string Get(Uri url)
        {
            var request = HttpWebRequest.Create(url);
            request.ContentType = "application/json";
            request.Method = "GET";

            try
            {
                var response = (HttpWebResponse)request.GetResponse();
                var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

                return responseString;
            }
            catch (WebException)
            {
                return null;
            }
        }

    }
}

на странице добавления NewBookPage.xaml У меня есть это содержимое:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="NewTest.NewBookPage">

    <ContentPage.Content>
        <StackLayout>
            <Entry x:Name="b_name" Placeholder="Name of Book"/>
            <Entry x:Name="b_auther" Placeholder="auther of Book"/>
            <Button Text="Save"
                    Clicked="Button_Clicked"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

и NewBookPage.xaml.cs:

using NewTest.Model;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;


namespace NewTest
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class NewBookPage : ContentPage
    {
        public NewBookPage()
        {
            InitializeComponent();
        }

        private void Button_Clicked(object sender, EventArgs e)
        {
            WebHelper webHelper = new WebHelper();

            BooksInsert item = new BooksInsert();
            item.book_name= b_name.Text;
            item.book_auther = b_auther.Text;


            string request = JsonConvert.SerializeObject(item);

            Uri url = new Uri(string.Format("localhost/API/insert.php"));

            string response = webHelper.Post(url, request);

            if (response != null)
            {
                //Handle your reponse here
            }
            else
            {
                //No Response from the server

            }
        }
    }
}

Теперь я не знаю, как продолжить отправку json файла для вставки. php файл и вставки. php как я могу получить json данные, может ли кто-нибудь помочь мне

Ответы [ 3 ]

0 голосов
/ 26 апреля 2020

Я не знаю, как это правильно, но я попробовал простой способ вставить данные в MySql базу данных, я просто сделал это NewBookPage.xaml:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             x:Class="NewTest.NewBookPage">

    <ContentPage.Content>
        <StackLayout>
            <Entry x:Name="b_name" Placeholder="Name of Book"/>
            <Entry x:Name="b_auther" Placeholder="auther of Book"/>
            <Button Text="Save"
                    Clicked="Button_Clicked"/>
            <WebView x:Name="webView"
                WidthRequest="1000"
                HeightRequest="500"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

NewBookPage.xaml.cs:

using NewTest.Model;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;


namespace NewTest
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class NewBookPage : ContentPage
    {
        public NewBookPage()
        {
            InitializeComponent();
        }

        private void Button_Clicked(object sender, EventArgs e)
        {
            webView.Source = " https://Mywebsite/insert.php?bn=" + b_name.Text + "&ba=" + b_auther.Text;   
        }
    }
}

вставка. php

$bname=$_GET['bn'];
$bauthor=$_GET['ba'];
$query = "INSERT INTO books  VALUES ('','$bname','$bauthor')";
mysqli_query($berikane,$query);

данные вставлены правильно, как это решение возможно?

0 голосов
/ 29 апреля 2020

Наконец я отправил данные поста из Xamarin в файл PHP и получил их в качестве значения поста:

 private  void Button_Clicked(object sender, EventArgs e)
        {

            using (var client = new WebClient())
            {
                var values = new NameValueCollection();
                values["book_name"] = b_name.Text;
                values["book_auther"] = b_auther.Text;

                var response = client.UploadValues("https://MyWeb/insert.php", values);

                var responseString = Encoding.Default.GetString(response);

                if (response != null)
                {
                    DisplayAlert("Success" ,"Data Inserted Successfully" ,"OK");
                }
            }

        } 
0 голосов
/ 26 апреля 2020

Ваш метод Post в WebHelper.cs ожидает объект Uri в качестве первого аргумента, который будет передан HttpWebRequest.Create. Но, как говорится в документации , в качестве параметра ожидается string, а не класс Uri. Кроме того, HttpWebRequest устарел и не должен использоваться для новых разработок. MS утверждает, что вы должны использовать HttpClient.

Попробуйте использовать WebRequest.Create вместо этого, как в этом уроке от MS: https://docs.microsoft.com/en-us/dotnet/framework/network-programming/how-to-request-data-using-the-webrequest-class.

WebRequest request = WebRequest.Create("http://localhost/API/insert.php");

Если вы измените сигнатуру метода Post, вам не нужно использовать класс Uri в NewBookPage.xaml.cs, просто отправьте URI в виде строки на Post.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...