2012-06-06 3 views
0

몇 가지 사항이 변경되어 새로운 힌트가 추가되었습니다.ios5 & JSON : PHP 파일에서 데이터를 검색 할 수 있지만 데이터베이스에 보낼 수 없습니다.

첫 번째 프로젝트에서는 iPad에서 데이터를 보내고 내 컴퓨터 (MAMP)에서 실행되는 SQL 데이터베이스에 데이터를 삽입해야합니다. 현재 나는 "도시"와 "국가"라는 문자열에만 보내려고합니다. 각 NSLog에서

내가 무엇을 가지고 썼다 :

사실, 두 가지 문제 A) 다운로드 한 데 SBJSON 3,1가, 내 프로젝트에 클래스를 추가 sbjson.h을 수입하고 코드를 작성을 해결할 수없는
#import "SBJson.h" 
… 
NSArray *keys = [NSArray arrayWithObjects:@"name",@"surname",@"address",@"email",@"city",@"country",@"gender",@"phone",@"age",@"store",@"time", nil]; 
NSArray *objects = [NSArray arrayWithObjects:name.text,surname.text,address.text,email.text,city.text,country.text,genderLabel,phone.text,age.text,storeCity,lapTime, nil]; 
NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 
NSString *jsonString = [jsonDictionary JSONRepresentation]; 
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO]; 
NSString *postLength = [NSString stringWithFormat:@"%d", [jsonData length]]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init]; 

[request setURL:[NSURL URLWithString:@"http://192.168.2.111/*****acing/prueba.php"]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:jsonData]; 
NSLog(@"jsonData: %@",jsonData);//1 

jsonData: <7b227469 6d65223a 2230313a 30373a30 35222c22 61646472 65737322 3a224d61 78696d69 6c69616e 74726173 73652c20 32222c22 6e616d65 223a224f 74746f22 2c226369 7479223a 224dc39c 4e434845 4e222c22 67656e64 6572223a 224d616c 65222c22 70686f6e 65223a22 2b343935 35353232 32323333 222c2265 6d61696c 223a226f 74746f40 64657574 63686c61 6e642e64 65222c22 7375726e 616d6522 3a225072 656d696e 67657222 2c22636f 756e7472 79223a22 4745524d 414e5922 2c226167 65223a22 3630222c 2273746f 7265223a 224dc39c 4e434845 4e227d> 


NSLog(@"jsonLength: %d",jsonData.length);//2 
223 

NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil 
                error:nil]; 
NSString *response = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; 

NSLog(@"response: %@",response); //3 

{"time":"01:07:05","address":"Maximiliantrasse, 2","name":"Otto","city":"MÜNCHEN","gender":"Male","phone":"+49555222233","email":"[email protected]","surname":"Preminger","country":"GERMANY","age":"60","store":"MÜNCHEN"} 

b) 필자는 "phrueba.php"에 쓴 웹 검색과 PHP에 대해 아무것도 모른다. MySQL은 php에 연결되어 있고 폼에 값을 삽입 할 수 있지만 데이터를 가져 오는 방법 (PHP 파일 o.O에 도착한 경우)을 모르고 데이터베이스에 값을 삽입합니다. 나는 다음과 같은 사용하는 경우

<?php 

$hostname_ndb = "localhost"; 
$database_ndb = "PepeRacing"; 
$username_ndb = "root"; 
$password_ndb = "rona5lda"; 
$ndb = mysql_connect($hostname_ndb, $username_ndb, $password_ndb) or die("Could not connect"); 
mysql_select_db($database_ndb) or die("Could not connect to the database"); 

//get file 
$body = @file_get_contents('php://input'); 
echo $body; 

$datosJSON = json_decode($body); 
print_r($datosJSON); 
$datosJSON=utf8_encode($datosJSON); 
mysql_query("INSERT INTO players (city,country,name) VALUES ('{$datosJSON['city']}','{$datosJSON['country']}','{$datosJSON['name']}')"); 
?> 

는하지만 :

<?php 
if($_POST) { 
echo "recibo un paquetito- POST"; 
//recibo los datos y los descodifico con PHP 
$misDatosJSON = json_decode($_POST["jsonData"]); 
//debería haber una salida con los datos recibidos, no? 
print_r($misDatosJSON); 
$salida=""; 
$salida .="something: " .$misDatosJSON[1]; 
echo $salida; 
}else{ 
echo "got nothing"; 
} 
?> 

OUPUT는 POST 방법이 작동하지 않는 것이 분명 보인다

"아무것도 없어", 어떤 생각이 그것을 해결하기 위해 ?

도움을 주셔서 감사합니다.

+0

단추 안에 코드를 넣는 것이 현명하지 않다고 생각합니다. 주 스레드를 차단할 것입니다. 간단하게 만들자. 데이터를 MySQL DB에 직접 게시하지 않고 PHP에 요청하여 데이터베이스에 추가한다. GET 변수가 보이지 않습니다. 요청을 하시겠습니까? – self

+0

내 의도는 주어진 순간에 저장된 데이터 (핵심 데이터)를 보내는 것입니다. 이것은 내 첫 번째 앱이며 앱이 연결되어 데이터를 전송하고 있는지 확인하고 싶습니다. PHP 파일없이 DB에 값을 삽입 할 수있는 방법이 있습니까? 감사합니다 – Luis

+0

변경 사항은 objective-c 및 php로 작성되었습니다. – Luis

답변

0

우선, PHP 태그에서 닫는 태그 등의 모든 HTML 태그를 제거하십시오. 헤더 ('Content-Type : text/html; charset = utf-8') ;; 코드가 이미 브라우저로 전송 된 후 이것은 나쁜 프로그래밍 실습입니다.

또한 PHP에 제공 한 코드는 삽입하지 않고 데이터베이스에서 데이터 만 가져옵니다. 삽입하려면

, 당신이 뭔가를 할 필요가있을 것이다 :

$data_to_insert = json_decode($_POST['json'], true); 
mysql_query("INSERT INTO players (city,country) VALUES ('{$data_to_insert['city']}','{$data_to_insert['country']}')"); 

위, 귀하의 $ _POST의 JSON 문자열을 디코딩 배열의 키/값을 할당 한 후 데이터베이스에 삽입합니다.

+0

예, PHP 코드가 데이터를 얻었습니다. 내가 아는 유일한 것입니다 :). 코드 및 프로그래밍 팁을 제공해 주셔서 감사합니다. – Luis

+0

연결 차단 : 요청 URL : http : //localhost/../prueba.php ** 요청 방법 : ** ** – Luis

관련 문제