2012-04-10 4 views
1

У меня есть PHP-код, который подключается к MySql и кодирует данные в JSON. Позже я буду фильтровать его и получить конкретный объект JSON. Он работал нормально, когда я использовал один объект NameValuePair, но теперь я хочу использовать переменные, такие как имя пользователя и пароль. Теперь я получаю это предупреждение в logcat Ошибка анализа данных .org.json.JSONException: Значение null типа org.json.JSONObject $ 1 не может быть преобразовано в JSONArray.Android NameValuePair send values ​​

Как изменить код, который может работать правильно?

$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)); 

ответ

1

Если это весь код, который вы положили на вашей стороне сервера, то я думаю, вы должны сначала принимать значения в $username и $password с использованием метода $_POST[]

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

и то же самое для password.

, так как сейчас нет никакого значения в переменных вашей SELECT оператор возвращает null значение, которое посылается клиенту в JSON формате, который дает ошибку в null значение.

+0

Это был не весь код. Отредактировано выше. – LTnewbie

+0

Теперь мое сообщение не имеет смысла, поэтому я его удалю :) –

+0

Но вы все же должны использовать «=», чем «LIKE» в авторизации. И попробуйте hardcoding ваше имя пользователя и пароль, чтобы проверить, выводит ли он ваш результат. Если это произойдет, и проблема исчезнет, ​​то у вас возникнет проблема с отправкой данных на php-скрипт, а не с получением –

1

Основываясь на вашем комментарии «Я использовал LIKE, пока я пытался использовать только имя пользователя, и он работал нормально».

В какой форме вы храните свой пароль? Обычный текст (надеюсь, нет) или хешированный? Если hashed, где вы выполняете хеширование? В php нет, если это весь код, вы делаете это в своем Java-коде? Если нет, это ваш ответ.

Что касается LIKE - это действительно работало, конечно. LIKE менее строг, чем =, и он создает значительные накладные расходы. Его следует использовать только в очень простых операциях поиска (VERY SIMPLE), конечно, не в авторизации.

Смежные вопросы