【问题标题】:How to delete data from table using php and Json?如何使用 php 和 Json 从表中删除数据?
【发布时间】:2019-07-06 15:20:27
【问题描述】:

我正在尝试在我的应用程序中添加删除帐户选项,但是当我尝试删除帐户时,我没有从 Web 服务器获得响应。

相反,我得到了错误:

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

我尝试将请求方法更改为 DELETE,但是我对 android 和数据库不太熟悉,所以我不确定这是否可行。 我不确定问题出在 php 还是 java 代码上,当我在 android studio 中运行调试器时,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);

    }

}

我希望 toast 会弹出并说帐户已删除,但我却收到顶部说明的错误消息。

附言这只是一个原型,所以我暂时不担心安全性。

谢谢!

【问题讨论】:

  • 您没有在 PHP 代码中定义 $result = array(),这很可能导致通知文本无效 json..
  • 我已经添加了 $result = array();到我的代码,但恐怕没有运气,谢谢!
  • 现在运行调试器,响应字符串现在返回:"{"success":"0","message":"Error!"}"

标签: java php android mysql


【解决方案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."
  ]);
}

另外,我不得不说...安全应该始终是一个问题...只需要几行代码即可过滤用户请求,并通过准备好的语句使您的查询更加安全。这更多的是习惯问题。有一天你可能会在这里或那里忘记一个查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-16
    • 2011-10-26
    • 2021-12-08
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    相关资源
    最近更新 更多