3

I have my client app sending a json object to server which is in php.

Client side code:

 var jacc = JSON.stringify(acc);console.log(acc);
 $http.post($rootScope.url+'signup.php',jacc)
   .then(function(response){console.log(response.data);});

which works perfectly fine.

But at server side

 $acc = $_POST["jacc"];
  $code = $_POST["code"];//received later
  if($acc){
     echo 1;//this thing never echoed. 
 }
  elseif ($code  && matchCode($code)){
    if(addAcc($acc))
        echo 1;

}
else echo 0 ." failed";
die();

The output at the console will be always "0 failed". Tried changing the post request to httpbin.org/post which works well. so the problem is with my php script. Also tried a var_dump($_POST) which also returns null value.

Drew Gaynor
  • 8,292
  • 5
  • 40
  • 53
Sijin T V
  • 329
  • 2
  • 12
  • You have 2 echo's? echo echo 0? also elseif instead of else if? – Toza Sep 25 '15 at 18:38
  • ya i do have 2 echos.. but the program control is not entering to that loop at all.. i always get the last echo as output. and no parse error for my elseif. – Sijin T V Sep 25 '15 at 18:44
  • I guess you post a string. But you need to post an object with key:value. Can we see a `console.log(jacc)` ? – dievardump Sep 25 '15 at 18:58
  • @NemanjaT `elseif` is perfectly fine, according to the [PHP manual](http://php.net/manual/en/control-structures.elseif.php) and the [PSR-2 Coding Style Guide](http://www.php-fig.org/psr/psr-2/#5-1-if-elseif-else). – Jake Bathman Sep 25 '15 at 18:58
  • My bad on the elseif, I haven't used or seen it in a while, I guess, so I forgot. Shouldn't it go `$http.post({ url: $rootScope.url+'signup.php', data: jacc })...` though? Or `$http.post($rootScope.url+'signup.php', { jacc: jacc })...`, a reference from https://docs.angularjs.org/api/ng/service/$http – Toza Sep 25 '15 at 19:02
  • IIRC, AngularJS submits things differently than jQuery/regular XHR, and some people have found success reading values from `php://input` instead of `$_POST`. – Scott Sep 25 '15 at 19:04

2 Answers2

4

Your JavaScript code should be something like :

var params = { jacc : JSON.stringify(acc) };
// or var params = acc; if acc is already an object with the "jacc" property
$http.post($rootScope.url+'signup.php', params)
   .then(function(response){
       console.log(response.data);
   });

Your error is that you try to post a "string" when you need to post an object with key:value.

dievardump
  • 2,484
  • 17
  • 21
0

tiltem saved my day.. thanks to dievardump for help.. Finally i got the issue and able to fix it. When using JSON content-type the $_POST array will not populate. All i had to do to fix it was $rest_json = file_get_contents("php://input"); $_POST = json_decode($rest_json, true);

Sijin T V
  • 329
  • 2
  • 12