2012-02-15 13 views
3

私は自分のデータベースMySQLを作成しました。アンドロイドアプリからデータベースにデータを送信したいと思いますが、できませんでした。私はWampサーバーを使用しています。ここでAndroidアプリケーションからMySQLにデータを挿入できない理由

は私のPHPコードです:ここ

<?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();?> 

は私のJavaファイルであるAndroidの

から
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(); } 
      }} 

これは私が

-- 

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

をcraetedしているMySQLのテーブルで私を助けてください..ありがとう...

+2

あなたはどうしますか?エラーはありますか? – Thilo

+0

@ Thilo、私はgtのエラーはありません...私のコードは、私のテーブルには何もデータがありません。 –

答えて

0

この種の開発はデバッグがかなり難しいかもしれないので、私はいつもたくさんのロギングを使用します。あなたのPHPのアドオンで例えば

、:

error_logに( "挿入名:"。$ _REQUEST [ 'i_name']);

次に、サーバーのエラーログを確認して、期待どおりの結果が得られていることを確認できます。問題が見つかるまで、ロギングステートメントを追加してください。

PS:私は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)があります。ちょうどGoogleのPHPのPDOは、文のチュートリアルまたは何かを準備しました

私はあなたが上記の質問にどのような答えを見つけるか教えてください。

+1

電話またはエミュレータ? 10.0.2.2はエミュレータでのみ動作します** **実際のデバイスでは動作しません**しかし、ブラウザをチェックするのは良い考えです。 –

0

アンドロイドのJavaファイルに10.0.2.2のlocalhostアドレスを指定していますが、私の知る限り動作しません。 ipconfigと入力してEnterキーを押します。 192.168 ....のように始まるip v4アドレスを確認した後、このアドレスをコピーして、検索バーにプロジェクトが実行されている場合はlocalhost ipをこれより置き換えてください。実際にアンドロイドはlocalhostではなくドメイン名を使用します。それとアンドロイドのJavaファイルにも変更されます。それがうまくいくことを望みます。おかげで

関連する問題