Может кто-нибудь найти ошибку в этом POST NSMutableURLRequest для сценария PHP? - PullRequest
0 голосов
/ 28 октября 2009

Я пытаюсь отправить данные в этот скрипт php:

 mb_internal_encoding("UTF-8");

    if(isset($_POST['format']) && isset($_POST['category']) && isset($_POST['title']) && isset($_POST['description']) && isset($_FILES['photo']) {
     save($_POST['category'], $_POST['title'], $_POST['description'], $_FILES['photo']); 
    } else {
     echo "There was an error, a field does not exist, please try again!<br />";
     echo "format = " . $_POST['format'] . "<br />";
     echo "category = " . $_POST['category'] . "<br />";
     echo "title = " . $_POST['title'] . "<br />";
     echo "description = " . $_POST['description'] . "<br />";
     echo "photo =" . $_FILES['photo'] . ;
    }
...
...

И я пытаюсь отправить запрос на синхронизацию с этим кодом Objc с iPhone:

//creating the url request:
 NSURL *cgiUrl = [NSURL URLWithString:@"http://www.hhh.com/uploading.php"];
 NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:cgiUrl];

 //adding header information:
 [postRequest setHTTPMethod:@"POST"];

 NSString *stringBoundary = [NSString stringWithString:@"0xKhTmLbOuNdArY"];
 NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary];
 [postRequest addValue:contentType forHTTPHeaderField: @"Content-Type"];


 //setting up the body:
 NSMutableData *postBody = [NSMutableData data];
 [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"category\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithString:@"iPhone"] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"format\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithString:@"jpg"] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"title\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithString:self.theTitle] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"description\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithString:self.theCaption] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"photo\"; filename=\"%@.jpg\"\r\n", self.theTitle] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
 [postBody appendData:[NSData dataWithData:UIImageJPEGRepresentation(resizedImage(self.myPhoto, CGRectMake(0, 0, 600, 800)), 0.5)]];
 [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

 [postRequest setHTTPBody:postBody];

 NSError *theError;
 NSData *returnData = [ NSURLConnection sendSynchronousRequest: postRequest returningResponse: nil error:&theError ];
 NSString *returnDataString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

 NSLog(@"[DEBUG]... response from request: %@", returnDataString);

Но ответ таков:

[DEBUG] ... ответ на запрос: Произошла ошибка, все поля не existe, пожалуйста, попробуйте еще раз!
формат =
категория =
название =
описание =
фото = широта =
долгота =

Что я делаю не так? потому что я вижу, что поле не получено.

Ответы [ 2 ]

1 голос
/ 28 октября 2009

Вы, вероятно, получили бы намного больше, если бы ваш PHP-скрипт регистрировал то, что он на самом деле получил , а не то, как он его интерпретировал.

0 голосов
/ 29 октября 2009

Ну ... одна проблема была решена. Формат между параметрами должен быть таким:

@"\r\n--%@\r\n"

и я отправлял:

@"\r\n--%@--\r\n" // еще два балла

Пока я не могу отправить данные. Я создал новый скрипт только с этим контентом на том же сервере.

<?php

        echo "format = " . $_POST['format'];
      echo "[NEXT]... category = " . $_POST['category'];
      echo "[NEXT]... title = " . $_POST['title'];
      echo "[NEXT]... description = " . $_POST['description'];
      echo "[NEXT]... latitude = " . $_POST['latitude'];
      echo "[NEXT]... longitude =" . $_POST['longitude'];

?>

и скопировал код в оригинальный скрипт (который был написан другим парнем).

Но теперь я вижу, что один скрипт получает данные, а оригинал не может.

Неужели это проблема кодирования файлов?

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