【问题标题】:How to get SPECIFIC elements from a mysql database as Json如何从 mysql 数据库中获取特定元素作为 Json
【发布时间】:2015-11-10 21:09:09
【问题描述】:

我正在尝试从 mysql 数据库中获取所有姓名和姓氏列表,但仅针对用户访问服务所使用的特定用户名和密码。 我尝试使用下面的代码,但似乎不起作用。实际上我得到的 JSONArray 是空的。 这是我的 java 代码和 Php 代码(在服务器上)。 如果我不按用户名和密码过滤,整个代码运行良好,所以实际上我收到了列表。但是当我尝试按用户名和密码过滤时,JsonArray 为空。 如有任何线索,我将不胜感激!

    public class ApiConnector {  
    public JSONArray GetAllCustomers(User user){
    String url = "http://giacomoci.co.uk/FetchallDataList.php";

    ArrayList<NameValuePair> dataToSend = new ArrayList<>();
    dataToSend.add(new BasicNameValuePair("username", user.username));
    dataToSend.add(new BasicNameValuePair("password", user.password));


    HttpParams httpRequestParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT);
    HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT);

    DefaultHttpClient httpClient = new DefaultHttpClient(httpRequestParams);
    HttpPost post = new HttpPost(url);

    JSONArray jsonArray = null;

    try {


        //DefaultHttpClient httpClient = new DefaultHttpClient();
        //HttpGet httpGet = new HttpGet(url);
        post.setEntity(new UrlEncodedFormEntity(dataToSend));


        HttpResponse httpResponse = httpClient.execute(post);

        HttpEntity httpEntity = httpResponse.getEntity();

        if(httpEntity != null){

            try {

                String entityResponse = EntityUtils.toString(httpEntity);
                Log.e("Entity Response : ", entityResponse);

                jsonArray = new JSONArray(entityResponse);
            }catch (JSONException e){
                e.printStackTrace();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    } catch (ClientProtocolException e){
        e.printStackTrace();
    } catch (IOException e){
        e.printStackTrace();
    }

    return jsonArray;
}
    }

这里是我的 PHP 代码

$username = $_POST["username"];
$password = $_POST["password"];


$statement = mysqli_prepare($con, "SELECT name, surname FROM Contacts WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($statement, "ss", $username, $password);

$user[] = array();

while($row = mysqli_fetch_assoc($statement)){

    $user[] = $row;

}


echo json_encode($user);

mysqli_close($con);

所以如果我删除“用户名 = ?和密码 = ?”以下行一切正常,但我得到了所有用户名和密码的姓名和姓氏,因为我不想要。这段代码有什么问题?

【问题讨论】:

  • 你真的应该使用 PHP 的 built-in functions 来处理密码安全问题。如果您使用的 PHP 版本低于 5.5,则可以使用 password_hash() compatibility pack
  • 单独访问 URL 会产生 JSON 字符串,因此如果将 POST 值传递给它不会产生 JSON 字符串,那么您应该尝试使用 MySQL Workbench 直接针对 MySQL 数据库运行 SQL。
  • 如果密码已编码(确实应该如此),您的简单脚本将找不到您要查找的记录。检查数据库中的数据。如果密码被编码,你需要找到它有什么样的编码,并弄清楚如何在你的 php 代码中应用相同的编码来比较密码值。
  • 感谢大家的回复,实际上我没有对密码应用任何编码,因为我想首先测试我的应用程序的所有基本服务,但我知道出于安全原因我需要执行一些编码.所以我使用的密码只是一个字符串。我正在使用相同的密码在服务器上执行其他过滤,它实际上效果很好。然后我只使用服务器上的“用户名”来测试服务以选择某些名称和姓氏,但仍然无法正常工作!所以看起来它并不真的取决于我传递的“密码”

标签: php android mysql json database


【解决方案1】:
$username = $_POST["username"];
$password = $_POST["password"];

_GET替换那些_POST

$username = $_GET["username"];
$password = $_GET["password"];

【讨论】:

  • 感谢您的提示!我刚刚测试了它,但不幸的是结果是一样的。我得到的 Json 是空的,所以过滤器没有效果
  • 通常我出于调试目的尝试以下步骤(请注意,我对 android 也很陌生,所以这些可能不是最优雅的解决方案): 1. 检查它是否适用于您的数据库,所以在你的 MySQL 程序中执行 (select) 语句,看看它是否返回任何东西。 2. 检查 PHP 脚本是否在您的浏览器中返回任何内容,因此将 .php 脚本放在您的服务器上并从您的浏览器访问它(通过输入 URL)。确保回显结果(在您的情况下是这样的:echo json_encode($user);)并查看是否有效。 3.使用Log.d()登录android;
  • 只有在上一步正常的情况下才进行下一步。关键是要准确找出问题出在系统的哪个部分。最好始终从最小的测试方法开始,例如选择一个用户名并将其作为文本显示在标签中。只要它有效,您就可以继续更新它以满足您的需求。就像“hello-world”一样的调试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 2021-06-04
相关资源
最近更新 更多