제목 그대로입니다..
제가 사용할 Json형태는
{"변수명":"값","변수명":"값","변수명":"값","변수명":"값","변수명":"값",}과 같이
Array없이 Object로만 구성되있고.. 아래의 코드중 jstring으로 Json값을 받아옵니다.
ICS이기때문에 AsyncTask를 써서 아래와 같이 파라미터를 전송하는 쓰레드를 만들었습니다.
protected HttpResponse doInBackground(String... params) {
HttpClient objHttp = new DefaultHttpClient();
try {
HttpPost objPost = new HttpPost(url);
List<NameValuePair> objValuePairs = new ArrayList<NameValuePair>(2);
objValuePairs.add(new BasicNameValuePair("json", jstring)); //jstring을 인자값으로 넣는 곳
objPost.setEntity(new UrlEncodedFormEntity(objValuePairs, "UTF-8"));
//전송하는 부분
HttpResponse objResponse = objHttp.execute(objPost);
if (objResponse.getStatusLine().getStatusCode() < 400) {
InputStream objStream = objResponse.getEntity().getContent();
InputStreamReader objReader = new InputStreamReader(objStream);
BufferedReader objBuf = new BufferedReader(objReader);
StringBuilder objJson = new StringBuilder();
String sLine;
while ((sLine = objBuf.readLine()) != null) {
objJson.append(sLine);
}
objStream.close();
}
} catch (IOException e) {
}
return null;
}
php 부분은 이렇습니다.
<?
$json_list = $_REQUEST['json']; //받아온 Json 문자열을 변수에 넣는 부분..
$temp_id = $json_list['id'];
$temp_pw = $json_list['pw'];
$temp_reg_id = $json_list['reg_id'];
$temp_name = $json_list['name']; <--- $json_list[];부분을 전부 '1';로 바꿔주면 php가 동작하고
$temp_nick = $json_list['nick']; DB에 1이라는 값으로 저장됩니다.
$temp_email = $json_list['email'];
$temp_sex = $json_list['sex'];
$link = mysql_connect("localhost", "제 사용자명", "제 DB비밀번호");
if(!$link){
print("fail");
exit();
}
$status = mysql_select_db("gnu");
mysql_query("INSERT INTO `gnu`.`g4_member` ( `mb_id`, `mb_password`, `mb_name`, `mb_nick`, `mb_email`, `mb_1`,`mb_level`, `mb_sex`) VALUES ($temp_id, PASSWORD($temp_pw), $temp_name, $temp_nick, $temp_email, $temp_reg_id, '10', $temp_sex)");
?>
왜 이럴까요ㅠㅠㅠ 삼일째 이것만 하고 있습니다ㅜㅜ
$_REQUEST 는 맞습니다만...
받아온 $json_list 는 배열이 아니라 json 형태의 문자열아닌가요?
파싱을 하셔야 사용할 수 있습니다. -_-
아 -_-; json으로 전송했으니 진짜 그러네요,
저런 방식으로 전송하는 케이스를 처음봤네요
글쓴이님의 php 현재 방식으로 했을때는 안드로이드 쪽에서
objValuePairs.add(new BasicNameValuePair("a","b"));
라고 했을때 php에서는
$json_list = $_POST;
$json_list['a'] = 'b';
요런식으로 들어가질겁니다.
json으로 보내셨으면, json_decode 인지 뭔지하는 php지원 함수나
자체적으로 파싱하는 함수를 만드셔서 해결하셔야합니다.
피치못할 사정이 아니시라면 objValuePairs.add 를 여러개 하셔서 전송하시는게
직관적이고 편하기는 하지요




정확하진 않은데 리퀘스트는 jsp나 asp쪽에서 썼던걸로 기억합니다.
거의 10년전 일이가 가물가물 하긴 하지만요,
$json_list = $_REQUEST['json'];
을
$json_list = $_POST['json'];
으로 해보세요
또한 스트링 유틸로 가져오면 귀찮게 스트링빌더와 while을 쓸 필요 없습니다.