2016-01-12 4 views
1

Когда я пытаюсь зарегистрировать свою пользовательскую форму iOS с помощью PHP-сервера, я всегда получаю пустую строку, добавленную в mysql db.Отправка запроса POST с iOS на сервер PHP?

Когда я печатаю значение переменной из php пустым.

Это мой код

-(void)sendLogininfoToServer{ 
    NSUserDefaults *login = [NSUserDefaults standardUserDefaults]; 
    NSString *name=[login stringForKey:@"name"]; 
    //NSString *image=[login stringForKey:@"image"]; 
    NSString *email=[login stringForKey:@"email"]; 


    serverConnection=[[serverRequestProtocol alloc]init]; 
    serverConnection.delegate=self; 
    //NSLog(@"get doc list%@",stringValue); 
    NSString *[email protected]"http://example.in/php/signup.php"; 
    NSString *post = [NSString stringWithFormat:@"fname=%@&email=%@&country=%@&city=%@",name,email,@"India",@"Bangalore"]; 
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSMutableURLRequest *request =[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString: url]]; 
    NSString *serverOutput=[serverConnection getData:request :@"POST":postData]; 

    NSLog(@"%@",serverOutput); 

} 



-(NSString *)getData:(NSMutableURLRequest *)request:(NSString *)requestType:(NSData *)data{ 
    [request setHTTPMethod:requestType]; 
    NSInteger millisecondsFromGMT = 1000 * [[NSTimeZone localTimeZone] secondsFromGMT]; 
    NSString *str1=[NSString stringWithFormat:@"%ld",millisecondsFromGMT]; 
    [request setHTTPBody:data]; 
    [request setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:@"iphone" forHTTPHeaderField:@"X-User-agent"]; 
    [request setValue:str1 forHTTPHeaderField:@"X-TimeZoneOffset"]; 
    NSURLResponse *response; 
    NSError *err; 
    NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse:&response error:&err]; 
    NSString * serverOutput= [[NSString alloc]initWithData:returnData encoding:NSASCIIStringEncoding]; 
    return serverOutput; 

} 

подводит форму успеха результата PHP, но всегда пустые значения Аддина Ginto дб.

мой PHP код

<?php 
header("Content-type: text/html; charset=utf-8"); 
$servername = "localhost"; 
$username = "root"; 
$password = "root"; 
$dbname = "dbname"; 
$charset="UTF8"; 
$name=$_POST['fname']; 
$email=$_POST['email']; 
$country=$_POST['country']; 
$city=$_POST['city']; 

$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 


/* change character set to utf8 */ 
if (!mysqli_set_charset($conn, "utf8")) { 
    printf("Error loading character set utf8: %s\n", mysqli_error($conn)); 
    exit(); 
} else { 
    mysqli_close($link);$sql = "INSERT INTO `basicinfo`(`fname`, `email`,`country`, `city`) VALUES ('$name','$email','$country','$city')"; 
if ($conn->query($sql) === TRUE) { 
    echo $name; 
} else { 
    echo "fail"; 
} 
} 

exit; 

?> 

Пожалуйста, помогите мне

скриншот дб enter image description here

+0

Кстати, то 'объявление метода getData' не соответствует стандартным сигнатур методов. Вы должны сделать '- (NSString *) getDataWithRequest: (NSMutableURLRequest *) request requestType: (NSString *) requestType data: (NSData *) data'. И затем назовите его «[serverConnection getDataWithRequest: request requestType: @« POST »data: postData]'. – Rob

+0

Я обновил свой ответ ниже – Bangalore

+0

Вы уже выбрали 'Content-Type'' 'application/json', что неверно. Ниже вы не устанавливаете его вообще. Вероятно, вы хотите установить его в 'application/x-www-form-urlencoded'. Не нужно устанавливать «Content-Type», но это хорошая практика. – Rob

ответ

1

Попробуйте изменить код PHP на следующее (просто проверить, если вы получаете почтовые значения):

<?php 
header("Content-type: text/html; charset=utf-8"); 
$servername = "localhost"; 
$username = "root"; 
$password = "root"; 
$dbname = "dbname"; 
$charset="UTF8"; 

if((isset($_POST['fname']))&&(isset($_POST['email']))&&(isset($_POST['country']))&&(isset($_POST['city']))) 
{ 
    $name=$_POST['fname']; 
    $email=$_POST['email']; 
    $country=$_POST['country']; 
    $city=$_POST['city']; 

    $conn = new mysqli($servername, $username, $password, $dbname); 
    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 


    /* change character set to utf8 */ 
    if (!mysqli_set_charset($conn, "utf8")) { 
     printf("Error loading character set utf8: %s\n", mysqli_error($conn)); 
     exit(); 
    } else { 
     mysqli_close($link);$sql = "INSERT INTO `basicinfo`(`fname`, `email`,`country`, `city`) VALUES ('$name','$email','$country','$city')"; 
    if ($conn->query($sql) === TRUE) { 
     echo $name; 
    } else { 
     echo "fail"; 
    } 
    } 
} 
else 
{ 
    echo "no post values found!"; 
} 

exit; 

?> 

Этот код будет retur n сообщение об ошибке («no post values ​​found!»), если вы неправильно отправляете значения.

+0

найденных значений не найдено! ... появилось сообщение – Bangalore

+0

Итак, что-то не так с вашим кодом iOS. И, к сожалению, я не знаю кодировку iOS. – Manikiran

+1

:-) Я прочитал ваш профиль и его довольно крутое спасибо за поддержку – Bangalore

0

Наконец его working..this является то, что я изменился с Ios стороны

-(void)sendLogininfoToServer{ 
    NSUserDefaults *login = [NSUserDefaults standardUserDefaults]; 
    NSString *name=[login stringForKey:@"name"]; 
    //NSString *image=[login stringForKey:@"image"]; 
    NSString *email=[login stringForKey:@"email"]; 


    NSString *[email protected]"http://example.in/signup.php"; 
     NSString *stringData = [NSString stringWithFormat:@"fname=%@&email=%@&country=%@&city=%@",name,email,@"India",@"Bangalore"]; 
    NSLog(@"%@",stringData); 
    NSURL *aUrl = [NSURL URLWithString:url]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl 
                  cachePolicy:NSURLRequestUseProtocolCachePolicy 
                 timeoutInterval:60.0]; 

    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody:[stringData dataUsingEncoding:NSUTF8StringEncoding]]; 

    NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
} 
- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSLog(@"Did Receive Response %@", response); 
    responseData = [[NSMutableData alloc]init]; 
} 

- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data 
{ 
    //NSLog(@"Did Receive Data %@", data); 
    [responseData appendData:data]; 
} 

- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error 
{ 
    NSLog(@"Did Fail"); 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"Did Finish"); 
    NSString *strData=[[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding]; 

    NSLog(@"Responce:%@",strData); 
    // Do something with responseData 
} 
+1

Кстати, это не сработает, если какой-либо из ваших параметров включает любые зарезервированные символы (пробелы, символы '&' или '+' и т. Д.). Вы должны уклониться от значений. И вы должны использовать 'NSURLSession', поскольку' NSURLConnection' теперь устарел. Например, http://stackoverflow.com/questions/25701436/how-to-make-post-nsurlrequest-with-2-parameters/25702239#25702239. – Rob

+0

Позвольте мне проверить и исправить – Bangalore

Смежные вопросы