我有PHP代码连接到MySql并将数据编码为JSON。稍后我会过滤它并获取特定的JSON对象。我在使用一个NameValuePair对象时工作正常,但现在我想使用用户名和密码等变量。现在我在logcat中收到此警报错误解析数据.org.json.JSONException:类型为org.json.JSONObject $ 1的值null无法转换为JSONArray。
我应该如何更改可以正常运行的代码?
$q=mysql_query("SELECT username, firstname, lastname, email, phone1, skype, city, description FROM mdl_user WHERE username LIKE '$username' AND password LIKE '$password'");
while($e=mysql_fetch_assoc($q))
$output[]=$e;
print(json_encode($output));
发送请求的代码:
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("usern",""+usr));
nameValuePairs.add(new BasicNameValuePair("passw",""+psw));
InputStream is = null;
String result = "";
//http post
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://ik.su.lt/~jbarzelis/Bdarbas/getUserInfo.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
被修改
$username = mysql_real_escape_string($_REQUEST['usern']);
$password = mysql_real_escape_string($_REQUEST['passw']);
$q=mysql_query("SELECT username, firstname, lastname, email, phone1, skype, city, description
FROM mdl_user WHERE username LIKE '$username' AND password LIKE '$password'");
while($e=mysql_fetch_assoc($q))
$output[]=$e;
print(json_encode($output));
答案 0 :(得分:1)
如果这是您在服务器端放置的整个代码,那么我猜您需要先使用$username
方法将值加到$password
和$_POST[]
$username=$_POST["usern"];
$password=$_POST["passw"];
和password
相同。
因为到目前为止,变量中没有值SELECT
语句返回null
值,该值以JSON
格式发送给客户端,这会产生null
值错误
答案 1 :(得分:1)
根据您的评论“我在尝试使用用户名时使用了LIKE,但效果很好。”
您以什么形式存储密码?纯文本(我希望不是)或哈希?如果散列,你在哪里进行散列?在php中,如果它是完整的代码,你不会在你的java代码中这样做吗?如果没有,那就是你的答案。
至于LIKE - 它确实起作用了。 LIKE不如=严格,它会产生很大的开销。它应该只用于非常简单的搜索语句(非常简单),当然不是授权。