tutorial español iphone cocoa-touch http

iphone - español - ios



Problema al usar NSURLRequest para POSTAR datos al servidor (3)

Debe eliminar el encabezado & en myRequestString y es probable que no se envíe el encabezado de content-type correcto. Intenta agregar una llamada a

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];

Tampoco debe pasar nil por error, para que pueda ver lo que el cliente piensa que está sucediendo.

No relacionado, pero su código PHP está abierto a ataques de inyección SQL .

Creo un NSURLRequest para publicar mis datos en la aplicación de iPhone en un servidor para proceder con el script PHP. Mi script PHP se ve así.

<?php $name = $_POST[''name'']; $email = $_POST[''email'']; $link = mysql_connect("localhost", "fffasfdas","Nfdsafafs") or die ("Unable to connect to database."); mysql_select_db("muradsbi_mydatabase") or die ("Unable to select database."); $sqlstatement= "INSERT INTO dbname (name,email) VALUES (''$name'',''$email'')"; $newquery = mysql_query($sqlstatement, $link); echo ''thanks for your register''; ?>

y mi NSURLRequst se crea como a continuación.

NSString *myRequestString = @"&name=Hello%20World&email=Ohai2u"; NSData *myRequestData = [NSData dataWithBytes: [myRequestString UTF8String] length: [myRequestString length]]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: @"http://www.google.com/"]]; [request setHTTPMethod: @"POST"]; [request setHTTPBody: myRequestData]; NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];

Sin embargo, este sitio no puede obtener los datos de esta aplicación y guardarlos en la base de datos, pero sé que se conectó con éxito porque mi aplicación puede obtener los datos de respuesta del servidor. No sé si mi nombre de variable se ha declarado de forma incorrecta u otros problemas. ¿Cómo puedo arreglarlo?


Se debe notar que ...

NSData *data = [NSData dataWithBytes: [myRequestString UTF8String] length: [myRequestString length]];

... es muy malo y puede causar errores vagos. Con UTF8 no hay garantía de que el número de bytes en su cadena codificada sea el mismo que el número de caracteres en su cadena.

Entonces, en su lugar, simplemente debes usar:

NSData *data = [myRequestString dataUsingEncoding: NSUTF8StringEncoding];


prueba esto

NSString *name = [[NSString alloc]initWith String: @"Hello World"]; NSString *email = [[NSString alloc]initWith String: @"Ohai2u"]; NSString *urlString = [NSString stringWithFormat:@"http://somedomain.com/sendMail.php?name=%@&email=%@", [name stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding], [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; NSURL *url = [[NSURL alloc] initWithString:urlString]; NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; NSData *urlData; NSURLResponse *response; urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:nil]; [url release];

simplemente no te olvides de liberar las cuerdas

establecer los encabezados en el script PHP