0

So I have a C# script which stores data to a database through my PHP script. My C# script uses WebClient to achieve this effect. But sadly my C# script doesn't send POST data to my PHP script and I don't know why. This is what I have so far:

C#

json = "{\"bedrijfsNaam\":\"" + bedrijfsNaam + "\"," +
       "\"ContPers\":\"" + ContPers + "\"," +
       "\"TelNum\":\"" + TelNum + "\"," +
       "\"email\":\"" + email + "\"," +
       "\"Land\":\"" + Land + "\"," +
       "\"Plaats\":\"" + Plaats + "\"," +
       "\"PostCode\":\"" + PostCode + "\"}";

var b64bytes = System.Text.Encoding.UTF8.GetBytes(json);
b64encode = System.Convert.ToBase64String(b64bytes);

using (WebClient client = new WebClient())
{
    byte[] sendB64 = client.UploadData("http://" + ConfigurationManager.AppSettings["scripturi"].ToString() + "SalesKicker.php", "POST",
    System.Text.Encoding.ASCII.GetBytes("b64string=" + b64encode + "&filename=" + dt.bedrijfsNaam));
    MessageBox.Show(Encoding.UTF8.GetString(sendB64));
}

PHP

if($link ->connect_errno) 
{
    echo 'ERROR: no connection!';
}
else 
{
    if(isset($_POST['b64string']))
    {
        $jsonstring = base64_decode($_POST['b64string']);

        $obj = json_decode($jsonstring);

        $query_opslaan = "INSERT INTO SalesKicker (BedrijfsNaam, ContPers, TelNr, Email, Land, Plaats, POC) VALUES ('". $obj->bedrijfsNaam ."' , '". $obj->ContPers ."', '". $obj->TelNum ."', '". $obj->email ."', '". $obj->Land ."', '". $obj->Plaats ."', '". $obj->PostCode ."')";         

        mysqli_query($link, $query_opslaan) or die(mysqli_error($query_opslaan));
    }
    else
    {
        echo 'ERROR: no data!';
    }

}

The problem is is that my PHP script returns

"ERROR: no data!"

This should obviously not happen. What should happen is that the PHP gets the POST data and saves it to my Database. Can someone please tell me why this isn't working correctly?

Failed Scientist
  • 1,970
  • 3
  • 29
  • 47
B. Hulshof
  • 1,049
  • 1
  • 14
  • 34
  • I'm not sure but it looks like you're sending via GET, not POST – Phiter Jun 23 '16 at 11:52
  • Take a good look at the C# code. It clearly says that it sends data via POST – B. Hulshof Jun 23 '16 at 11:53
  • Yeah but the way you create the URL, it's GET. When you add variables to the url. Check [this answer](http://stackoverflow.com/a/26143325/4802649) and see if it helps. – Phiter Jun 23 '16 at 11:53
  • No it's clearly POST, look up MSDN. The code clearly states POST and not GET. GET is not possible with the method I'm using.... – B. Hulshof Jun 23 '16 at 11:55
  • Well, I don't know. Never done this kind of job. But try looking at the answer maybe you find a different approach. – Phiter Jun 23 '16 at 11:56
  • 1
    Well you atleast the question you linked me had the correct answer. Thank you anyways! – B. Hulshof Jun 23 '16 at 12:07

1 Answers1

1

I should use the following c# method except of my current one:

             var data = new NameValueCollection();
            data["b64string"] = b64encode;
            data["filename"] = dt.bedrijfsNaam;

            using (WebClient client = new WebClient())
            {
                var uploadData = client.UploadValues("http://" + ConfigurationManager.AppSettings["scripturi"].ToString() + "SalesKicker.php", "POST",
                data);
                response = Encoding.UTF8.GetString(uploadData);
            }

I should've been using the NameValueCollection instead of just a string.

B. Hulshof
  • 1,049
  • 1
  • 14
  • 34