2012-08-24 2 views
0

나는 안드로이드 양식을 통해 데이터를 MySQL 데이터베이스에 게시하려고합니다. 나는 서버에 호스팅 된 PHP 스크립트에 데이터를 게시하고 있습니다. MYSQL에서 null 값을 얻고 있습니다. 웹 서비스 호출지고 있지만 아래에있는 내 안드로이드 코드 코드가 빈 데이터를 받고있다 :MySQL에 안드로이드 게시 데이터

package com.register; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 



import android.os.Bundle; 
import android.os.StrictMode; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.app.Activity; 

public class Register extends Activity { 




    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_register); 
     EditText email_id = (EditText) findViewById(R.id.email_id) ; 
     EditText name = (EditText) findViewById(R.id.name); 
     EditText password = (EditText) findViewById(R.id.password); 
     Button button = (Button) findViewById(R.id.button1) ; 

     final String email = email_id.getText().toString(); 
     final String fullname = name.getText().toString(); 
     final String mpassword = password.getText().toString(); 



     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

     StrictMode.setThreadPolicy(policy); 
button.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     //postData(); 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://xyz/register.php"); 

      try { 
       // Add your data 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
       nameValuePairs.add(new BasicNameValuePair("email", email)); 
       nameValuePairs.add(new BasicNameValuePair("name", fullname)); 
       nameValuePairs.add(new BasicNameValuePair("password", mpassword)); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       // Execute HTTP Post Request 
       HttpResponse response = httpclient.execute(httppost); 

      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
      } 

    } 
}); 

    } 

아래는 내 PHP 코드 :

mysql_connect("server","user","password"); 
mysql_select_db("testms"); 
$email = $_POST['email']; 
$name = $_POST['name'] ; 
$password = $_POST['password'] ; 

$query_add="INSERT INTO users (`email` ,`name` ,`password`) 
VALUES ('".$email."','".$name."', '".$password."')"; 
$query_exec=mysql_query($query_add) or die(mysql_error()); 
mysql_close();  

    } 
+0

어디에서 오류가 발생합니까? 앱에서 데이터를 전송하고 있습니까? PHP가 정상적으로 처리하고 제대로 처리하고 있습니까? 어떤 필드가 NULL로 전달됩니까? 데이터베이스에서 생성 된 SQL을 PHP에서 직접 실행 했습니까? – andrewsi

+0

많은 코드를 게시하고 SO 커뮤니티에서 사용자를 위해 디버깅 할 것으로 예상되는 경우 여기에서 눈살을 찌푸리게됩니다. 너 뭐 해봤 니? 서버에 POST 콜렉션을 버린 적이 있습니까? 상수 삽입을 시도 했습니까? 또한 코드는 SQL 삽입 및 마법 인용 버그에 취약합니다. –

+0

및 PHP 인터페이스에 어떤 점이 있습니까? 'var_deubug'와 함께 $ _REQUEST와 $ _POST를 디버그 해보십시오. –

답변

1

아래 코드는 작동하지만 테스트되지 않았습니다. 제가 작업중인 프로젝트에서 복사했습니다. 몇 분 안에 mysqli (정확한 방법)에 PHP 섹션의 MySQL 상호 작용을 업데이트 할 것이고 나는 나의 대답을 편집 할 것이다. 지금 당장은 mysql_ *을 사용하는 것이 가치가 떨어지고 데이터베이스와의 모든 항목을 실제로 위생해야한다는 것을 알아 두십시오.

자바 :

@Override 
public void onClick(View arg0) { 
    // generate your params: 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    nameValuePairs.add(new BasicNameValuePair("email", email)); 
    nameValuePairs.add(new BasicNameValuePair("name", fullname)); 
    nameValuePairs.add(new BasicNameValuePair("password", mpassword)); 

    // send them on their way 
    try { 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost("http://xyz/register.php"); 
     httpPost.setEntity(new UrlEncodedFormEntity(nameValueParams)); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

PHP (감가 상각/unsanitized) :

<?php 

    $connection = mysql_connect("hostname", "username", "password")or die(mysql_error()); 
    $selection = mysql_select_db("database", $connection)or die(mysql_error()); 

    // You should echo these variables back to your app 
    // so you know they are sending. 
    // echo "Received: " . $email . " - " . $name . " - " . $password; 
    $email = $_POST['email']; 
    $name = $_POST['name']; 
    $password = $_POST['password']; 

    $insert = "INSERT INTO users('email','name','password') VALUES('$email','$name','$password')"; 
    $run = mysql_query($insert)or die(mysql_error()); 

?> 

더 나은 PHP 예 :

<?php 
    $mysqli_connection = new mysqli("hostname", "username", "password", "database"); 
    if ($mysqli_connection->connect_errno) { 
     echo ("Connection Failure"); 
     exit(); 
    } 

    $email = mysql_real_escape_string($_POST['email']); 
    $name = mysql_real_escape_string($_POST['name']); 
    $password = mysql_real_escape_string($_POST['password']); 

    $insert = "INSERT INTO users('email','name','password') VALUES('$email','$name','$password')"; 
    if ($run = $mysql_connection->query($insert)) { 
     echo 'Success'; 
     $run->free(); 
     $mysql_connection->close(); 
    } else { 
     echo 'Error Inserting Content'; 
     exit(); 
    } 
?> 
0

[...] 사용자 (email, name INTO, password) [...] 그것은 yout qotations가 틀린 것처럼 보입니다. ''또는 ''을 사용하십시오. ''또는 ''을 사용하지 마십시오. ''또는 ''을 사용하지 마십시오.

+0

나 SQL에서 문제를 일으키는 지 기억하지 마세요 그의 문제는 빈 값을 얻고있는 것 같습니다 –

+0

MySQL에서는 필드/테이블 이름 (값이 아님)에 대한 역 따옴표가 완벽하게 정상입니다. –

+0

오케이, 고마워요. – Spetastium

1

$ _REQUEST를 시도 어쨌든,이에게 소용돌이를 제공 변수를 설정하고 데이터베이스에 연결하기 전에 데이터를 가져옵니다.

$email = $_REQUEST ['email']; 
$name = $_REQUEST ['name'] ; 
$password = $_REQUEST ['password'] ;  

mysql_connect("server","user","password"); 
mysql_select_db("testms"); 
$query_add="INSERT INTO users (`email` ,`name` ,`password`) VALUES ('".$email."','".$name."', '".$password."')"; $query_exec=mysql_query($query_add) or die(mysql_error()); 
mysql_close();    
} 

일반적으로 디버깅을 위해 일부 데이터를 다시 보냅니다. 응용 프로그램에서

echo "some test string"; 

가 다음을 수행하십시오 을 그냥 알을 위해서, 서버의 응답을 확인합니다

int ResponseCode = response.getStatusLine(); 

HttpEntity resEntity = response.getEntity(); 
if(resEntity != null){ 
    if(EntityUtils.toString(resEntity).equalsIgnoreCase("some test string")) 
    { 
     ...do something 
    } 
    resEntity.consumeContent(); 
} 
0

귀하의 버튼 클릭 이벤트에 점점 텍스트 필드에 데이터를 이동하려고, 변수는 final이며 활동 작성 후 이미 데이터를 가지고 있습니다.

관련 문제