使用PHP/MySQL和HTTP响应身份验证Iphone登录

问题描述:

我试图创建一个使用PHP/MySQL进行身份验证的iPhone目标C登录页面。我试图使用HTTP响应作为验证方式。无论你输入什么内容,它现在总是无法登录。使用PHP/MySQL和HTTP响应身份验证Iphone登录

`- (IBAction) login: (id) sender 
{ 
// this part isnt really implemented yet! 
NSString *post =[NSString stringWithFormat:@"username=%@&password=%@",usernameField.text, passwordField.text]; 




NSURL *url = [NSURL URLWithString:@"MY URL HERE.php"]; 


NSURLRequest *request = [NSURLRequest requestWithURL: url]; 

NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)request; 
responseStatusCode = [httpResponse statusCode]; 


NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:response error:nil]; 




if ([responseStatusCode statusCode] == 200) { 
    //do something 
    UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"success" message:@"Your have logged in" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; 
    [alertsuccess show]; 
    [alertsuccess release]; 
    } 

    else { 
    NSLog(@"Login failed."); 
    //do something else 
    UIAlertView *alertfail = [[UIAlertView alloc] initWithTitle:@"fail" message:@"login fail" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; 
    [alertfail show]; 
    [alertfail release]; 
    } 
` 

和PHP看起来像

<? 
session_start(); 
require("iphoneconnection.php"); 

$u = $_POST['username']; 
$pw = $_POST['password']; 

$check = "SELECT username, password FROM iphoneusers WHERE username='$u' AND password= '$pw'"; 



$login = mysql_query($check, $connect) or die(mysql_error()); 


// check user level and store in $row 

if (mysql_num_rows($login) == 1) { 
$row = mysql_fetch_assoc($login); 
//$_SESSION['level'] = $row['level']; 
$_SESSION['username'] = $u; 
echo 'login success'; 
header("HTTP/1.1 200 OK"); 

//header("Location: index.php"); 

} else { 
//header("Location: login.php"); 
//echo '403 Forbidden'; 
header("403 Forbidden"); 
} 

mysql_close($connect); 


?> 

任何人有任何指针?即使它只是告诉我是否在PHP中正确地格式化我的repson。

在此先感谢。

感谢您的回复。我得到它的工作使用:

- (IBAction) login: (id) sender 
{ 

NSString *post =[NSString stringWithFormat:@"username=%@&password=%@",usernameField.text, passwordField.text]; 

NSString *hostStr = @"MY URL.php?"; 
hostStr = [hostStr stringByAppendingString:post]; 
NSData *dataURL = [NSData dataWithContentsOfURL: [ NSURL URLWithString: hostStr ]];  
NSString *serverOutput = [[NSString alloc] initWithData:dataURL encoding: NSASCIIStringEncoding]; 
if([serverOutput isEqualToString:@"Yes"]){ 
    UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"success" message:@"You are authorized" 
                  delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; 
    [alertsuccess show]; 
    [alertsuccess release]; 

} else { 
    UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"Fail" message:@"Invalid Access" 
                  delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; 
    [alertsuccess show]; 
    [alertsuccess release]; 

} 

loginIndicator.hidden = FALSE; 
[loginIndicator startAnimating]; 
loginButton.enabled = FALSE; 
} 

根据您提供的示例,我没有看到您实际上发送了请求的用户名密码&。您正在创建一个字符串“发布”,但从未将其包含在请求中。

此外,该投:

NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)request;

看起来不正确的。为什么要将请求对象转换为响应?