【发布时间】: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