it-swarm.com.de

Problem bei der Verwendung von NSURLAnfragen an POST Daten zum Server

Ich erstelle eine NSURLRequest, um meine Daten in der iPhone-Anwendung an einen Server zu senden und das Skript PHP auszuführen. Mein PHP Skript sieht so aus.

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

und meine NSURLRequst wird wie folgt erstellt.

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

Diese Site kann die Daten jedoch nicht von dieser Anwendung abrufen und in der Datenbank speichern. Es ist jedoch bekannt, dass die Verbindung erfolgreich hergestellt wurde, da meine Anwendung die Antwortdaten vom Server abrufen kann. Ich weiß nicht, ob mein Variablenname falsch deklariert ist oder andere Probleme. Wie kann ich es reparieren?

32
1234

Sie sollten den führenden & in myRequestString entfernen und das Problem ist wahrscheinlich, dass der richtige content-type-Header nicht gesendet wird. Fügen Sie einen Anruf zu hinzu

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

Sie sollten auch nil nicht für einen Fehler übergeben, damit Sie sehen können, was der Client für wahrscheinlich hält.

Keine Beziehung, aber Ihr PHP -Code ist offen für SQL-Injection-Angriffe .

53
superfell

Es ist darauf hinzuweisen, dass ...

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

... ist sehr schlecht und kann vage Fehler verursachen. Bei UTF8 gibt es keine Garantie, dass die Anzahl der Bytes in Ihrem codierten String der Anzahl der Zeichen in Ihrem String entspricht.

Stattdessen sollten Sie einfach Folgendes verwenden:

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

versuche dies

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

vergiss nicht einfach release die Saiten

setzen Sie die Header im Skript PHP

0
Spire