web-dev-qa-db-fra.com

Problème lors de l'utilisation de NSURLRequest pour POST données au serveur

Je crée une NSURLRequest pour publier mes données dans l'application iPhone sur un serveur afin de poursuivre le script PHP. Mon script PHP ressemble à ceci.

<?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';
?>

et ma NSURLRequst est créée comme ci-dessous.

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];

Cependant, ce site ne parvient pas à récupérer les données de cette application et à les enregistrer dans la base de données, mais je sais que la connexion a été établie avec succès, car mon application est capable de récupérer les données de réponse du serveur. Je ne sais pas si mon nom de variable est déclaré de manière erronée ou s'il existe d'autres problèmes. Comment puis-je le réparer?

32
1234

Vous devez supprimer le & principal dans myRequestString et le problème est probablement que l'en-tête content-type correct n'est pas envoyé. Essayez d'ajouter un appel à

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

Vous ne devez pas non plus passer nil pour l'erreur, afin que vous puissiez voir ce que le client pense.

Non lié, mais votre code PHP est ouvert aux attaques par injection SQL .

53
superfell

Il convient de noter que ...

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

... est très mauvais et peut causer de vagues erreurs. Avec UTF8, rien ne garantit que le nombre d'octets dans votre chaîne codée est identique au nombre de caractères de votre chaîne.

Au lieu de cela, vous devriez simplement utiliser:

NSData *data = [myRequestString dataUsingEncoding: NSUTF8StringEncoding];
7
Stefan Arentz

essaye ça

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];

il suffit de ne pas oublier de libérer les chaînes

définir les en-têtes dans le script PHP

0
Spire