Как удалить данные из таблицы с помощью php и Json?

Я пытаюсь добавить опцию удаления учетной записи в свое приложение, однако, когда я пытаюсь удалить учетную запись, я не получаю ответа от веб-сервера.

Вместо этого я получаю сообщение об ошибке:

org.json.JSONException: End of input at character 0 of

Я попытался изменить метод запроса на DELETE, однако я не слишком хорошо знаком с Android и базами данных, поэтому я не уверен, что это сработает. Я не уверен, связана ли проблема с кодом php или java, когда я запускаю отладчик в студии Android, возвращается ответ String:

response: ""

php:

<?php

if ($_SERVER['REQUEST_METHOD']=='POST'){


$id = $_POST['id'];

require 'conn.php';


  $sql = "DELETE * FROM Patients WHERE patientID='$id'";

if (mysqli_query($conn, $sql)){

  $result['success'] = "1";
  $result['message'] = "success";
  echo json_encode($result);

  mysqli_close($conn);


} else {

  $result["success"] = "0";
  $result["message"] = "Error!";
  echo json_encode($result);
  mysqli_close($conn);

}
}
 ?>

Метод удаления Java:

 private void deleteAccount() {
        final String name = this.name.getText().toString().trim();
        final String lName = this.lName.getText().toString().trim();
        final String dob = this.dob.getText().toString().trim();
        final String email = this.email.getText().toString().trim();
        final String password = this.password.getText().toString().trim();
        final String passwordConf = this.cPassword.getText().toString().trim();


        final String id = getID;



        StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_DELETE,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            String success = jsonObject.getString("success");
                            if (success.equals("1")){

                                Toast.makeText(EditAccount.this, "Account Deleted", Toast.LENGTH_SHORT).show();

                            }


                        } catch (JSONException e) {
                            Toast.makeText(EditAccount.this, "Error: "+e.toString(), Toast.LENGTH_SHORT).show();
                            e.printStackTrace();
                        }

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(EditAccount.this, "Error: "+error.toString(), Toast.LENGTH_SHORT).show();

                    }
                })



        {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> params = new HashMap<>();
                params.put("id", id);

                return params;
            }
        };

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);

    }

}

Я ожидаю, что всплывет тост и скажет, что учетная запись удалена, но вместо этого я получаю сообщение об ошибке, указанное вверху.

p.s. это всего лишь прототип, поэтому на данный момент я не беспокоюсь о безопасности.

Спасибо!

Вы не определили $result = array() в коде PHP, что, скорее всего, вызывает недопустимый текст уведомления json..

Raymond Nijland 06.07.2019 17:45

Я добавил $result = array(); к моему коду, но, боюсь, не повезло, спасибо!

Jonathan James 06.07.2019 18:00

Запустив отладчик сейчас, теперь возвращается строка ответа: "{"success":"0","message":"Error!"}"

Jonathan James 06.07.2019 18:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Какой бы ни была проблема, я собираюсь предположить и сказать, что if ($_SERVER['REQUEST_METHOD']=='POST') является корнем вашей проблемы.

Ваш запрос может быть отправлен на сервер неправильно, и method не распознается как POST, что объясняет ответ "", поскольку вы не предлагаете альтернативы тому, что должно произойти при невыполнении условия.

Отправьте обратно неверный ответ на запрос (400), и вы сможете устранить эту проблему в своем Java-коде... С PHP все в порядке.

if ($_SERVER['REQUEST_METHOD']=='POST') { /* ... */ }
else {
  http_response_code(400);
  // exit('Bad request method.');
  // or for a json response:

  echo json_encode([
    'success' => "0",
    'message' => "Bad Request Method used."
  ]);
}

Кроме того, я должен сказать... Безопасность всегда должна быть проблемой... Требуется всего несколько строк кода, чтобы отфильтровать запрос пользователя и сделать ваш запрос немного более безопасным с помощью подготовленных операторов. Это скорее вопрос привычек; однажды вы можете забыть запрос здесь или там.

Другие вопросы по теме