通过PHP从mySQLi数据库检索比较数据到Xcode

时间:2012-03-06 19:18:08

标签: php mysql ios database xcode

我有一个应用程序,允许用户通过Facebook登录,所有已注册的用户都将他们的Facebook ID存储在我们的数据库中,以便我们知道谁拥有谁以及谁没有注册我们的应用程序。非常标准的东西,这部分一切正常,并已经过测试等。

接下来,我需要让用户看看他们的朋友已经拥有该应用(即哪些已经注册)。

我从Facebook获取他们的好友列表,制作一个包含所有用户ID的JSON字符串,现在我需要知道如何将这个JSON字符串发送到我的PHP脚本并让它将JSON与所有用户进行比较。数据库已经创建了一个ID数组,可以在JSON字符串和数据库中找到。 然后我需要通过PHP将该数组发送回应用程序(可能再次作为JSON),以便我可以从Facebook好友的用户列表中过滤出未注册的ID。

要注册用户,我当前在应用程序中使用以下格式发送请求:

NSString *host = @"my.domain";
NSString *urlString = [@"myPHP.php?"stringByAppendingString:@"task=register"];
//list of args which are sent
NSURL *url = [[NSURL alloc] initWithScheme:@"http" host:host path:urlString];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSError *requestError = nil;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&requestError];

在我的PHP中,我使用了这些内容(我将省略连接到数据库等的部分,因为这一切都有效,我想这是所有应用程序的标准):

function __construct($db, $args=NULL) {
    $this->db = $db;
    $this->checkSetup();
    $this->apnsData = array(
        'production'=>array(
            'certificate'=>$this->certificate,
            'ssl'=>$this->ssl,
            'feedback'=>$this->feedback
        ),
        'sandbox'=>array(
            'certificate'=>$this->sandboxCertificate,
            'ssl'=>$this->sandboxSsl,
            'feedback'=>$this->sandboxFeedback
        )
    );
    if(!empty($args)){
        switch($args['task']){
            case "register":
                $this->_registerDevice(
                    $args['appname'],
                    $args['devicetoken'],
                    $args['facebookID']
                );
                break;
                //etc

正如我所说,一切正常,我使用类似的东西来做另一个功能。然而,这两个函数都不需要将任何内容发送回应用程序本身,所以我非常感谢有关下一步该怎么做的任何帮助。

总结一下我坚持的事情:

  • 将JSON字符串发送到PHP脚本。
  • 将所述JSON与包含mySQLi数据库中一列的所有条目的数组进行比较。
  • 将一系列匹配条目返回给应用程序。

我很感激任何人都可以给予任何帮助,因为我过去很少使用PHP或mySQL,所以我不知道下一步该去哪里。

谢谢大家: - )

编辑:我刚刚尝试在浏览器中创建一个虚假的URL请求,只是为了看看当我将一个JSON字符串发送到PHP代码时会发生什么(我只是让它回显结果)。我收到414错误(URI太长)。这是否意味着这不是检索我想要的结果的合适方法?我在JSON字符串中有大约200个朋友的ID,但是很多人会有更多的东西。

编辑2:除了留下的评论之外,这样的事情会更适合发送数据:

NSString *jsonString = [friendsIDArray JSONRepresentation];
NSMutableURLRequest *mrequest = [[NSMutableURLRequest alloc] init];
NSString *post = [NSString stringWithFormat:@"json=%@", jsonString];
NSLog(post);


NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];

[mrequest setURL:[NSURL URLWithString:@"http://plantpot.co/app_Boom_php/apns.php"]];
[mrequest setHTTPMethod:@"POST"];

[mrequest setHTTPBody:postData];

[[NSURLConnection alloc] initWithRequest:mrequest delegate:self];

2 个答案:

答案 0 :(得分:0)

最终使用GET进行管理以使其正常工作。

NSString *jsonString = [friendsIDArray JSONRepresentation];

//send this to the server
NSString *friendHost = @"ourdomain.com";
NSString *friendurlString = [@"/thephp.php?"stringByAppendingString:@"task=getRegistered&jsonList=%@", jsonString];
NSURL *friendURL = [[NSURL alloc] initWithScheme:@"http" host:friendHost path:friendurlString];
NSURLRequest *friendRequest = [[NSURLRequest alloc] initWithURL:friendURL];
NSError *friendRequestError = nil;

//the reply is the list of ID's which are NOT registered on the database
NSData *friendReturnData = [NSURLConnection sendSynchronousRequest:friendRequest returningResponse:nil error:&friendRequestError];

NSString *stringReply = (NSString *)[[NSString alloc] initWithData:friendReturnData encoding:NSUTF8StringEncoding];

//convert this string to an array
NSArray *unregisteredFriends = [stringReply JSONValue];

然后在PHP脚本中我做了以下事情:

function _returnRegisteredFriends($jsonArg)
{

    $db = new DbConnect();
    $column = array();
    $result = $db->query("SELECT facebookID FROM registered_users");

    //populate column array with all of the facebook user IDs
    while($row = $result->fetch_array(MYSQLI_ASSOC)){
        $column[] = $row['facebookID'];
    }


    $newphrase = str_replace('\\', '', $jsonArg);//remove escape characters
    $decoded = json_decode($newphrase);//from json to array
    $arrayresult = array_diff($decoded, $column);
    echo json_encode($arrayresult);
}

这将从我的数据库中获取所有用户ID,并将其与传递给它的数组($ jsonArg)进行比较。然后计算出差异,然后echo将其作为friendReturnData返回给应用程序。

所有似乎都应该正常工作,感谢那些建议使用POST方法的人 - 结果证明GET方法令人满意。

答案 1 :(得分:0)

-(IBAction)Btn_Login:(id)sender
{
    NSString *Post = [NSString stringWithFormat:@"email=%@&password=%@", Text_Email.text, Text_Pass.text];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@LoginTest.php?%@", ServerPath, Post]];

    NSData *Returndata = [NSData dataWithContentsOfURL:url];

    NSString *Response = [[NSString alloc] initWithData:Returndata encoding:NSUTF8StringEncoding];

    Response = [Response stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    NSLog(@"%@",Response);
}