2011-11-07 3 views
-1

GET을 사용하여 iPhone 앱에서 온라인 양식에 데이터 (사용자 이름 및 비밀번호)를 보내려고합니다.iPhone 앱에서 POST를 사용하여 웹 양식으로 데이터 보내기

이것은 내 소스 코드이지만 문제는 데이터베이스에 데이터가 저장되지 않는다는 것입니다.

NSString *post =[[NSString alloc] initWithFormat:@"email=%@&password=%@",enterUserName.text,enterPass.text]; 
NSURL *url=[NSURL URLWithString:@"http://planetimpressions.com/contacts/imagecomm_register.php"]; 

NSLog(post); 
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:url]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:postData]; 

/* when we user https, we need to allow any HTTPS cerificates, so add the one line code,to tell teh NSURLRequest to accept any https certificate, i'm not sure about the security aspects 
*/ 

[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]]; 

NSError *error; 
NSURLResponse *response; 
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; 
NSLog(@"%@",data); 

웹 양식의 소스 코드는 다음과 같습니다.

if(isset($_GET['submit'])){ 
$email = $_GET['email']; 
$password = $_GET['password']; 
$conn = mysql_connect("mysql", "*****", "*****"); 
if(!$conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db("imagecomm_users"); 
$sql = "INSERT INTO registration(number, email, password) VALUES (null, 
'$email', '$password')"; 
if (!mysql_query($sql,$conn)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
} 
?> 

나는 스크립트를 테스트했으며 완벽하게 작동합니다. 온라인 양식을 사용하여 사용자 이름과 암호를 데이터베이스에 저장할 수 있습니다. 내가 겪고있는 유일한 문제는 앱에서 온라인 양식에 연결하는 것입니다.

콘솔에 오류 메시지가 표시되지 않거나 예기치 않은 오류가 발생합니다. 그냥 아무 일도 일어나지 않습니다. 나는 어떤 도움을 주셔서 감사합니다. 감사합니다

+0

오류 있습니까? 최종 로그에 예상치 못한 내용이 표시됩니까? 네트워크상의 패킷 추적이 예상 한 것을 보여줍니까? 서버를 디버깅하여받은 내용을 확인 했습니까? 데이터베이스가 올바르게 연결되었는지 알고 있습니까? 이 코드와 데이터베이스 사이에는 큰 격차가 있으며,이 코드 스 니펫은 아주 작은 부분 만 처리합니다. 이와 같은 질문을 게시하기 전에 더 많은 연구를 수행하거나 모르는 경우 연구 방법을 물어보십시오. –

+0

가 제안한 변경 사항을 반영하기 위해 질문을 편집했습니다. –

답변

0

나는이 문제를 해결하기 위해 UIWebView를 사용했습니다. 있는 UIWebView를 호출하는

코드입니다 -

[myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:URLTOCALL]]]; 

및 두 가지 방법 - -

- (void)webViewDidFinishLoad:(UIWebView *)webView 

헤더 파일에서

이 구현 파일에서

UIWebView *myWebView 
@property(nonatomic, retain) IBOutlet UIWebView ... 

선언 과

- (void)webViewDidStartLoad:(UIWebView *)webView{ 
1

서버에 대한 요청/응답에 ASIHTTP 요청을 사용하십시오. ASIHTTP 파일을 여기에서 다운로드하십시오 : http://github.com/pokeb/asi-http-request/tarball/master. 프로젝트 내부를 통합하고 헤더에 추가 할 수 있으며 .h 파일에 델리게이트를 정의 할 수 있습니다. 이제 파일 내부에서이 코드를 사용할 수 있습니다.

- (void)requestAuth { 
    NSString* urlString = [NSString stringWithFormat:@" http://planetimpressions.com/contacts/imagecomm_register.php 
    "]; 
    NSURL *url = [NSURL URLWithString:self.urlString]; 
    ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:url]; 

    if (!request) { 
     NSLog(@"Request prepared"); 
     return nil; 
    } 

    [request setPostValue: enterUserName.text forKey:@”email”]; 

    [request setPostValue: enterPass.text forKey:@"password"]; 
    [request setTimeOutSeconds:30]; 

    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0 
    [request setShouldContinueWhenAppEntersBackground:YES]; 
    #endif 

    [request setDelegate:self]; 
    [request setDidFailSelector:@selector(ASIHTTPUploadFailed:)]; 
    [request setDidFinishSelector:@selector(ASIHTTPUploadFinished:)]; 
    [request startAsynchronous]; 
} 

- (void)ASIHTTPUploadFinished:(ASIHTTPRequest *)theRequest { 
    //Parse coming response 
    NSLog(@"%@",[theRequest responseString]); 
} 

- (void)ASIHTTPUploadFailed:(ASIHTTPRequest *)theRequest { 
    //Parse response if request become failure 
    NSLog(@"%@",[theRequest responseString]); 
} 
+0

ASIHTTPRequest가 중단되었으며 사용하지 말 것을 권장합니다. http://allseeing-i.com/%5Brequest_release%5D –

관련 문제