마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Post 로 PHP에 배열 넘기기 문의 드립니다.

0 추천

초보개발자가 선배님들께 문의 드립니다.

배열을 만들어서 post 로 php 에 데이타를 보내서 php 배열에 넣어주려고 하는데 잘 안풀립니다.

안드로이드 소스에서는 오류없이 실행이 되는데

php 에서 값을 받지를 못하고 있습니다.

소스를 한번 봐주셨으면 좋겠습니다.

 

안드로이드 소스

JSONArray jsonArray = new JSONArray();

JSONObject jsonObject = new JSONObject();
jsonObject.put("name","홍길동");
jsonObject.put("tel","12345");

jsonArray.put(jsonObject);

jsonObject = new JSONObject();
jsonObject.put("name","홍");
jsonObject.put("tel","123");
jsonArray.put(jsonObject);

// [{"tel":"12345","name":"홍길동"},{"tel":"123","name":"홍"}]

new sendData().execute();

====================================

public class sendData extends AsyncTask<String, String, Void> {

	@Override
	protected Void doInBackground(String... params) {
		// TODO Auto-generated method stub
		
		HttpClient httpClient = new DefaultHttpClient();
		HttpPost httpPost = new HttpPost("http://www.test.com/jsontest1.php");

		try {
			
			HttpEntity httpEntity = new StringEntity(jsonArray.toString(), "UTF-8");
			httpPost.setEntity(httpEntity);
			httpPost.setHeader("Content-type", "application/json");
			
			try {
				httpClient.execute(httpPost);
			} catch (ClientProtocolException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
	}

}

php 소스 : jsontest1.php

<?php

	$mysql_hostname = "";
	$mysql_user = "";
	$mysql_password = "";
	$mysql_database = "";

	$conn = mysqli_connect($mysql_hostname, $mysql_user, $mysql_password, $mysql_database);

	if(mysqli_connect_errno($conn)) {
		echo "Database Connection Fail <br>";
	} else {
		/*echo "Connection OK";*/
	}
		
	mysqli_select_db($conn, $mysql_database);
	mysqli_query("SET NAMES UTF8");
	

	$arr = $_POST['jsonarr'];

	$decarr = json_decode(stripslashes($arr, true));
	
	print_r($decarr);
	//echo "<br/>";
	
	$count = count($decarr);
	//echo "$count <br/>";
	
	$values = array();
	$update_values = array();
	
	for ($x=0; $x < $count; $x++){
		
		$newrec = $decarr[$x];
		
		$desc = $newrec['name']; 
		$desc = mysqli_real_escape_string($conn, $desc);
		echo $desc;
		echo "<br/>";
		
		$type = $newrec['tel']; 
		$type = mysqli_real_escape_string($conn, $type);
		echo $type;
		echo "<br/>";
		
		// Create insert array
		$values[] = "('".$desc."', '".$type."')";  
		
		// This is used for the on duplicate update
		$update_values[] = "name=VALUES(name),tel=VALUES(tel)"; 

	}
			
	mysqli_close($conn);

?>

 

삼국지 (750 포인트) 님이 2015년 3월 23일 질문
삼국지님이 2015년 3월 23일 태그 변경

2개의 답변

+1 추천
 
채택된 답변
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();  

nameValuePairs.add(new BasicNameValuePair("jsonarr", jsonArray.toString()));

httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

이렇게하거나

raw data로 할려면 php설정에 받을수 있게 되어있는지 확인해보세요

alkyne (22,960 포인트) 님이 2015년 3월 23일 답변
삼국지님이 2015년 3월 23일 채택됨
어렵네요...
알려주신방법으로 다시한번 해봐야겠습니다.
+1 추천
$json = file_get_contents('php://input');
$data = json_decode($json);
nicehee (73,100 포인트) 님이 2015년 3월 23일 답변
관심가져주셔서 감사합니다.
 
$arr = $_POST['jsonarr'];
$decarr = json_decode(stripslashes($arr, true));
 
기존에 php  소스에서 위에 내용을
 
알려주신대로 아래처럼 수정을 했습니다.
그래도 마찬가지인듯 합니다.
 
$json = file_get_contents('php://input');
$arr = json_decode($json);
$decarr = json_decode(stripslashes($arr, TRUE));
 
php소스 에서 직접 내용을 넣고 브라우저에서 테스트를 하면 화면에 잘 나옵니다.
/*
$decarr = json_decode('[
         {"name":"홍길동","tel":"123456"},
         {"name":"홍","tel":"123"}
     ]',true);
*/
안드로이드에서도 Log.d("jsonArray.toString() ==> ", jsonArray.toString()) 로 디버그를 하면

[{"tel":"12345","name":"홍길동"},{"tel":"123","name":"홍"}]
 
이렇게 나옵니다.
 
아직 초보라서 그런지 이거로 몇일을 헤매고 있는지 모르겠네요..
...