2012-04-10 4 views
1

MySql에 연결하고 데이터를 JSON으로 인코딩하는 PHP 코드가 있습니다. 나중에 필터를 적용하여 특정 JSON 객체를 가져옵니다. 하나의 NameValuePair 객체를 사용하는 동안 괜찮 았지만 이제는 username과 password 같은 변수를 사용하고 싶습니다. 이제 로그캣에서이 경고를받습니다. 데이터를 파싱하는 중 오류가 발생했습니다. org.json.JSONException : org.json.JSONObject $ 1 유형의 값 null을 JSONArray로 변환 할 수 없습니다.안드로이드 NameValuePair 값을 보내십시오

제대로 작동 할 수있는 코드는 어떻게 변경해야합니까? 요청 전송

$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으로 값을 가져 오십시오.

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

password에 대해서도 동일합니다. 등의 지금 SELECT 문이 null 값 오류를 제공 JSON 형식으로 클라이언트로 전송됩니다 null 값을 반환 변수에 값이 없기 때문에

.

+0

전체 코드가 아닙니다. 위에 편집 됨. – LTnewbie

+0

내 게시물이 의미가 없으므로 삭제하겠습니다. :) –

+0

하지만 여전히 권한 부여에서 "LIKE"보다는 "="를 사용해야합니다. 그리고 사용자 이름과 암호를 하드 코딩하여 출력물을 인쇄하는지 확인하십시오. 그럴 경우 문제가 사라집니다. 데이터를받는 대신 PHP 스크립트로 데이터를 보내는 것보다 문제가 있습니다. –

1

귀하의 의견을 바탕으로 "나는 사용자 이름 만 시도하는 동안 좋았으며 잘 작동했습니다."

어떤 형식으로 암호를 저장 하시겠습니까? 일반 텍스트 (그렇지 않길 바랍니다) 또는 해시? 해시가있는 경우, 어디에서 해시를 수행합니까? PHP에서는 전체 코드라면 자바 코드에서 사용합니까? 그렇지 않다면 그것은 당신의 대답입니다.

LIKE는 물론 작동했습니다. LIKE는 =보다 덜 엄격하며 중요한 오버 헤드를 발생시킵니다. 그것은 매우 단순한 검색 문장 (매우 간단 함)에서만 사용되어야하며, 확실히 권한이 없습니다.

관련 문제