2012-02-15 4 views
3

나는 데이터베이스 MySQL을 만들었고 안드로이드 애플 리케이션의 데이터를 데이터베이스에 보내고 싶지만 그렇게 할 수 없었다. 나는 wamp 서버를 사용하고있다. 여기 안드로이드 애플 리케이션에서 MySQL에 데이터를 삽입 할 수없는 이유

<?php mysql_connect("localhost","cupcake","123456"); 
mysql_select_db("cindy"); 
$sql=mysql_query("insert into yang (name)values('".$_REQUEST['i_name']."')"); 
$r=mysql_query($sql); 
if(!$r)echo "Error in query: ".mysql_error();mysql_close();?> 

이 내가

-- 

CREATE TABLE IF NOT EXISTS `yang` (
    `name` varchar(100) NOT NULL, 
    PRIMARY KEY (`name`) 
) 

을 craeted 한 MySQL의 테이블은 제발 도와주세요 안드로이드

public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 



     String result = null; 
     JSONArray jArray; 
     InputStream is = null; 
     StringBuilder sb=null; 


     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 

     nameValuePairs.add(new BasicNameValuePair("i_name","aaa")); 
     try{  

      HttpClient httpclient = new DefaultHttpClient(); 

      HttpPost httppost = new HttpPost("http://10.0.2.2/testing.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()); 
      } 



     try{ 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
      sb = new StringBuilder(); 
      sb.append(reader.readLine() + "\n"); 
      String line="0"; 
      while ((line = reader.readLine()) != null) { 
          sb.append(line + "\n");  } 
       is.close(); 
       result=sb.toString(); 
       }catch(Exception e){ 
        Log.e("log_tag", "Error converting result "+e.toString()); 
       }//paring datatry 


     try { 
      jArray = new JSONArray(result); 
      //int[] deal_id=new int[jArray.length()+1]; 
      JSONObject json_data=null; 
      for(int i=0;i<jArray.length();i++){ 
        json_data = jArray.getJSONObject(i); 
          } 
      }  catch(JSONException e1){ 
        } catch (ParseException e1) { 
       e1.printStackTrace(); } 
      }} 

에서 내 자바 파일 : 여기에

내 PHP 코드입니다 .. 감사 ...

+2

그리고 당신은 무엇을 얻습니까? 오류가 있습니까? – Thilo

+0

@ Thilo, 나는 어떤 오류도하지 않았다 ... 내 코드가 작동 할 수있다. 내 테이블에 데이터가 없다. –

답변

0

이런 종류의 개발은 디버깅하기가 매우 어려울 수 있으므로 항상 많은 로깅을 사용합니다. 예를 들어

, 당신의 PHP의 추가에 :

의 error_log ("이름을 삽입 :"$ _REQUEST [ 'i_name'].);

그런 다음 서버 오류 로그를 확인하여 원하는 결과를 얻고 있는지 확인할 수 있습니다. 문제를 찾을 때까지 로깅 구문을 계속 추가하십시오.

추신 : 저는 PHP에 대한 전문 지식이 없지만 귀하의 PHP가 SQL 주입 공격에 취약 할 것으로 보이므로 아마 이것을 배포하고 싶지 않을 것입니다!

0

나는 무슨 일이 일어나고 있는지 볼 수있는만큼 로깅을 포함시켜야한다는 데 동의합니다.

휴대 전화 또는 에뮬레이터에이 Android 앱을 배포한다고 가정합니다. 맞습니까? 네이티브 브라우저에서 http : // 10.0.2.2 /testing.php를 방문하여 로컬 네트워크 연결 문제가 아닌지 확인할 수 있습니까?

또한 PHP 코드를 독립적으로 테스트 해 보셨습니까? 그게 효과가 있니?

마지막으로, PHP 스크립트는 SQL 삽입에 취약합니다. 사용자와 같은 모든 데이터를 SQL 문으로 직접 연결하고 싶지는 않습니다. 준비된 진술을 사용하여이를 처리하십시오. PHP에는 사용할 수있는 PDO 라이브러리가 있습니다. 여기에 자습서 (http://www.kitebird.com/articles/php-pdo.html)가 있습니다 - 따라 할 수있는 다른 많은 것들이 있습니다. 그냥 구글 PHP PDO 준비 문법 튜토리얼 또는 무언가

위의 질문에 대한 답을 알려주십시오.

+1

전화 또는 에뮬레이터? 10.0.2.2는 에뮬레이터에서만 작동합니다 ** ** 실제 장치에는 없습니다 ** 그러나 브라우저에서 확인하는 것이 좋습니다. –

0

안드로이드 자바 파일에 10.0.2.2의 localhost 주소를 부여하고 있습니다. 제 지식으로는 작동하지 않습니다. 명령 프롬프트를 열고 ipconfig를 입력하고 Enter 키를 누릅니다. 192.168 ....처럼 시작될 것입니다 귀하의 IP V4 주소를 확인한 후 그 주소와 검색 표시 줄에 복사하는 것보다 프로젝트가 실행중인 경우 localhost ip를 대체하십시오. 실제로 안드로이드는 localhost가 아닌 도메인 이름을 사용합니다. 그리고 그것으로 안드로이드 자바 파일을 변경하십시오. 그것이 효과가 있기를 바랍니다. 감사합니다

관련 문제