отправка сообщения из iOS-приложения в php-скрипт не работает ... Простое решение похоже - PullRequest
6 голосов
/ 29 февраля 2012

Я делал это несколько раз раньше, но по какой-то причине я не могу заставить сообщение пройти ... Я попробовал скрипт php с переменными, установленными на _POST и без ... Когда они не установлены на пост это работает нормально. Вот мой код iOS:

NSDate *workingTill = timePicker.date;
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm"];
NSString *time = [formatter stringFromDate:workingTill];

NSString *post = [NSString stringWithFormat:@"shift=%@&username=%@", time, usernameString];

NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
NSString *postLength = [NSString stringWithFormat:@"%d", [post length]];

NSURL *url = [NSURL URLWithString:@"http://wowow.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];
NSLog(@"%@", post);
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];

[NSURLConnection connectionWithRequest:request delegate:nil];

[self.navigationController popToRootViewControllerAnimated:YES];

А вот фрагмент php, переменные POST не находятся в нужном месте?

<?php
function objectsIntoArray($arrObjData, $arrSkipIndices = array())
{
    $arrData = array();

    // if input is object, convert into array
    if (is_object($arrObjData)) {
        $arrObjData = get_object_vars($arrObjData);
    }

    if (is_array($arrObjData)) {
        foreach ($arrObjData as $index => $value) {
            if (is_object($value) || is_array($value)) {
                $value = objectsIntoArray($value, $arrSkipIndices); // recursive call
            }
            if (in_array($index, $arrSkipIndices)) {
                continue;
            }
            $arrData[$index] = $value;
        }
    }
    return $arrData;
}

    $newShift = $_POST('shift');
    $bartenderUsername = $_POST('username');

    mysql_connect("host", "name", "pw") or die(mysql_error());  
    mysql_select_db("harring4") or die(mysql_error());

    $result = mysql_query("SELECT * FROM BartenderTable WHERE username='".$bartenderUsername."'") or die(mysql_error());  

    $row = mysql_fetch_array($result);
    $newfname = $row['fname'];

Я думаю, это довольно простой ответ для более опытного разработчика, спасибо за вашу помощь!

Ответы [ 3 ]

8 голосов
/ 29 февраля 2012

$_POST - это массив, а не функция.Вам нужны квадратные скобки для доступа к индексам массива:

$newShift = $_POST['shift'];
$bartenderUsername = $_POST['username'];
3 голосов
/ 09 марта 2013

Используйте следующий код.убедитесь, что квитанция почтовой строки является ключом и будет использоваться на сервере.код на стороне клиента

 NSString *receipt1 = @"username";

    NSString *post =[NSString stringWithFormat:@"receipt=%@",receipt1];
   NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

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

    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:[NSURL URLWithString:@"http://localhost:8888/validateaction.php"]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

    NSHTTPURLResponse* urlResponse = nil;
    NSError *error = [[NSError alloc] init];
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
    NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    NSLog(@"Response Code: %d", [urlResponse statusCode]);

    if ([urlResponse statusCode] >= 200 && [urlResponse statusCode] < 300)
    {
        NSLog(@"Response: %@", result);
    }

}

скрипт php на стороне сервера.

validation.php

<?php
 if(_POST)
    {
        if($_POST['receipt'] == 'username')
        {
            echo "post successfull";
         $receipt   = $_POST['key1'];
         echo $receipt;
        }
        else
    {
        echo "not post";
    }
?>
0 голосов
/ 29 февраля 2012

Поскольку я являюсь разработчиком для iPhone, могу сказать, что ваш код Objective-C правильный. Также убедитесь, что отправляемые вами данные не пусты

NSLog(@"%d,[postData length]");

не должно печататься 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...