Przeglądnąłem nieskończoną liczbę podobnych problemów, ale żaden z nich nie odpowiedział na to, czego szukałem, ani nie odpowiedział na nie w sposób kompletny, więc mam nadzieję, że wszyscy mi pomogą.Przekazywanie tablicy do PHP za pomocą testu POST z iOS
Muszę przekazać tablicę identyfikatorów restauracji z iOS do pliku PHP przy użyciu testu POST lub w każdym razie, który działałby dobrze. Wiem o ASIHTTPRequest, ale szukam czegoś wbudowanego i został opuszczony przez programistę. I na koniec, nie chcę przekazywać ich przez adres URL, ponieważ nie wiem, ile zgłoszeń będzie.
Oto, co otrzymałem do tej pory.
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:theURL]];
[request setHTTPMethod:@"POST"];
NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] init];
[jsonDict setValue:restaurants forKey:@"restIDs"];
NSLog(@"JSON Dict: %@",jsonDict);//Checking my array here
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:kNilOptions error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"JSON String: %@",jsonString); //Checking my jsonString here...
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"json" forHTTPHeaderField:@"Data-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [jsonData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: jsonData];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSLog(@"Return DATA contains: %@", [NSJSONSerialization JSONObjectWithData:returnData options:NSJSONReadingMutableContainers error:nil]);
NSArray *restMenuCount = [NSJSONSerialization JSONObjectWithData:returnData options:NSJSONReadingMutableContainers error:nil];
Tak, z tym, Sprawdziłem wszystko i to wszystko wygląda dobrze, ale od końca PHP nie nawet go podnieść.
Oto co mój plik PHP wygląda następująco:
$restIDs = $_POST['restIDs'];
echo $restIDs; //Checking to see if it even has anything......but nothing there
for ($i = 0; $i < $restIDs.count; $i++) {
$query = "SELECT * FROM `MenuItems` WHERE rest_id = '$restID'";
$result = mysqli_query($connect, $query);
$number = mysqli_num_rows($result);
$menuNumber[$i] = $number;
}
echo json_encode($menuNumber);
więc w końcu, co robię źle? Dlaczego nie otrzymuję niczego na moim końcu PHP. A przede wszystkim, czy ktoś może mi wyjaśnić, jak wysłać tablicę przez POST. Ponieważ czuję, że to mój prawdziwy problem, nie rozumiem tego wystarczająco, aby samemu rozwiązać problem. Nie rozumiem, jak możesz umieścić wszystko ze strony iOS i odebrać go po stronie PHP.
Mam nadzieję, że wszystko to było wystarczająco jasne, z góry dzięki.
EDIT:
Próbowałem minięciu tablicy jako ciąg poprzez URL następnie wybucha to, na szczęście to działało ... ale jestem tylko w ramach limitu URL, tak bym jeszcze chciał dowiedzieć się, inne rozwiązanie. Przynajmniej teraz wiem, że reszta mojego kodu działała zgodnie z oczekiwaniami.
używasz ramy php? – ekims
Twój kod zawiera [podatność na atak SQL injection] (http://en.wikipedia.org/wiki/SQL_injection). Używasz mysqli, dlaczego nie używasz przygotowanych instrukcji? – Charles
Cześć Charles, tak, mój kod zawiera luki w zabezpieczeniach SQL injection, ale co masz na myśli przez przygotowane instrukcje? – WiseOlMan