2011-10-24 95 views
0

我正在創建一個登錄頁面,用戶可以使用它們提供的相同用戶名和密碼進行登錄。如何創建登錄應用程序?

我有權發佈用戶使用PHP服務器提供的用戶名密碼廣告。 PHP頁面將驗證服務器的詳細信息並將我的答案發回給我,並且我必須獲取該答案並允許用戶登錄。

我曾嘗試下面的代碼,但它不工作:

​​
+0

檢查reply.i.e打印SERVEROUTPUT string.Then檢查追加「後」時,你是否得到了正確的答覆或不 – Tendulkar

+0

服務器字符串爲「主機」的字符串,你不缺「?」字符?如果我沒有記錯的話,你的hostString看起來像: http://yoursite.com/iphone/validateiphone.phpfname=something&lastname=somethingelse代替http://yoursite.com/iphone/validateiphone.phpf?name=something&lastname= somethingelse – Maggie

+0

沒有什麼是SERVEROUTPUT發現........ – Nilesh

回答

2

dataWithContentsOfURL沒有做什麼,你認爲它。它不會執行HTTP請求等。它只會通過URL訪問本地文件系統中的文件。所以你實際上並沒有用你的代碼執行HTTP請求。

NSURLConnection是做HTTP iOS上規範的API。

NSURL *url = [NSURL URLWithString:@"http://yoursite.com/iphone/validateiphone.php"]; 
NSString *post = [NSString stringWithFormat:@"fname=%@&lname=%@",firstname,lastname]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
[request setHTTPBody:[post dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setHTTPMethod:@"POST"]; 
[NSURLConnection connectionWithRequest:req delegate:self]; 

然後,你需要的,如果該請求不能implemenet各種NSURLConnectionDelegate方法來得到通知,當請求完成後,等

另外,使用線程同步請求。不要在主線程上執行同步請求,它會阻止你的用戶界面。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // .... 
    NSHTTPURLResponse *response = nil 
    NSError *error = nil; 
    NSData *responseBody = [NSURLConnection sendSynchronousRequest:req 
               returningResponse:&response 
                  error:&error];    

}); 
+1

我對使用10K + rep的人提出質疑仍然猶豫不決......但是......你確定這一點:'dataWithContentsOfURL並沒有做你認爲它的事。它不會執行HTTP請求等? – Steve

+1

沒有問題:)是的,我很確定。編輯:不再那麼確定。文檔沒有指定,並且谷歌聲稱它實際上執行HTTP。 –

+0

我很確定它確實。 – Steve

1

我真的覺得你可能需要檢查一下你的網址。只需在Mac/PC上使用您的瀏覽器來驗證您是否在調用正確的URL。 您的字符串追加提供了以下

http://yoursite.com/iphone/validateiphone.phpfname="firstName"&lname="lastName" 

其中「名字」和「姓氏」是你傳遞的參數。我認爲,這是一個不正確的PHP請求,你缺少的查詢參數或「? 」。您可能需要附加一個「?」在那裏的某個地方。因此,也許

http://yoursite.com/iphone/validateiphone.php?fname="firstName"&lname="lastName" 

然後確保你登出dataURL & SERVEROUTPUT的值,以確保你找回你所期望的。

編輯:

從您的評論你可能沒有明白我所要表達的。測試您正在使用的URL實際上是通過將其粘貼到瀏覽器地址欄並查看源代碼(如果頁面上未顯示任何內容)來工作的。 其次,您應該將代碼更改爲如下所示,以便您可以在調試輸出窗口中看到發生了什麼。

NSLog(@"URL sending Request to: %@", hostStr); //Log the address you are setting as the url to ensure that it is correct. (You should be able to copy this into your browser and get a result if it is correct. 
NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:hostStr]]; 
    NSLog(@"dataURL value:%@", dataURL): //this will let yo know if there is anything in, also insert a breakpoint here and verify that dataURL is not equal to 0x0 (or nil). 
    NSString *serverOutput = [[NSString alloc]initWithData:dataURL encoding:NSASCIIStringEncoding]; 
    NSLog(@"serverOutput as NSString: %@", serverOutput);//again breakpoint this and make sure serverOutput is not 0x0. 
+0

我發送所有細節的正確通過網址...但我無法獲取回聲發送或消息發送的PHP文件....... nd我沒有得到任何數據在我的dataURL和serverOutput .. ...請幫助我..謝謝 – Nilesh

+0

@NileshJoshi是在您的Mac/PC上的瀏覽器中工作的網址? (您可能需要查看源代碼以確保它在工作,如果沒有任何內容呈現給您的瀏覽器窗口)。 –

+0

@NileshJoshi同時添加我在上面的答案中放入的NSLog,特別是關於hostStr輸出的那個。如果hostStr的URL是正確的,那麼你應該能夠粘貼NSLog打印出來的變量的輸出到你的瀏覽器地址欄中,它應該可以工作,也就是說,如果你的PHP腳本是在第一位工作的話。先驗證一下。 –

相關問題