Как использовать json_decode / json_encode в PHP? - PullRequest
0 голосов
/ 22 июня 2011

У меня проблема с PHP. Я пытаюсь передать имя пользователя / пароль от Android и проверяю значение в MySQL через PHP. При использовании json_decode и json_encode, json_decode работает, но json_encode не работает. Но когда я удаляю json_decode, json_encode работает, но я хочу, чтобы они оба работали в моей программе.

Вот мой код:

$a = $_POST['userpwd_value']; //Accesing the value from Android.

$b = json_decode($a); //Decoding android value using JSON.

$username = $b->{'username'}; //Assigning username from android to a variable.
$password = $b->{'password'}; //Assigning password from android to a variable.

echo $username.$password;

$check = mysql_query("select username,password from user where id=1");
$row = mysql_fetch_assoc($check);

//if($row['username']==$username && $row['password']==$password)
    $output[]=$row;
//else
    //$output[]=array("value"=>"false");
print(json_encode($output));

Где проблема?

Ответы [ 3 ]

3 голосов
/ 22 июня 2011

json_encode завершается ошибкой, если содержимое переменной не соответствует UTF-8. Если ваша база данных использует другую кодировку, переменные содержат специальные символы, тогда вы должны получить ошибку там. (поднимите уровень error_reporting или проверьте json_last_error, чтобы узнать)

Другая проблема с вашим конкретным кодом заключается в том, что вы сначала выводите что-то еще:

 echo $username.$password;

Это сделает недействительным вывод JSON в целом. Если у вас есть ведущий мусор, ваш браузер не будет правильно декодировать возвращаемые переменные. Также не забудьте отправить соответствующий заголовок с вашим результатом, используя header("Content-Type: application/json");


  $b=json_decode($_POST['userpwd_value']); 
  $username=$b->{'username'}; 
  $password=$b->{'password'};

  $check = mysql_query("select username,password from user where id=1");
  $row = mysql_fetch_assoc($check);
  $row = array_map("utf8_encode", $row);

  if ($row['username']==$username && $row['password']==$password) {
      $output[] = $row;
  } else {
      $output[] = array("value"=>"false");
  }
  header("Content-Type: application/json");
  print(json_encode($output));
0 голосов
/ 22 июня 2011

Заменить две нижеследующие строки на следующую.

Ваши оригинальные строки:

  $username=$b->{'username'};
  $password=$b->{'password'};

Новые строки:

  $username=$b->username;
  $password=$b->password;

После замены проверьте, работает или нет.

0 голосов
/ 22 июня 2011

Я думаю, что в данных в формате JSON может быть другой уровень ($a). Ваш эхо-оператор показывает правильное имя пользователя и пароль? Если нет, поставьте var_dump($b); после $b = json_decode($a); заявление.

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