将数据发送到PHP表单时出错

时间:2012-02-18 13:11:57

标签: php iphone objective-c ios xcode

我尝试使用PHP联系表单从我的应用程序发送电子邮件,但由于某种原因无法从应用程序发送详细信息。请告诉我是什么问题..我已经附上了我最后使用的php表单。

当我尝试使用网络浏览器发送电子邮件并撰写:http://www.bergerz.co.il/wp-content/themes/ecobiz/sendemailfromapp.php/?name=MYNAME&subject=SUBJECT&email=yositsa@gmail.com&message=MESSAGE时,它的效果非常好。

-(IBAction)send:(id)sender
{
    NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init];

    NSString * urlString = [NSString stringWithFormat:@"http://www.bergerz.co.il/wp-content/themes/ecobiz/sendemailfromapp.php"];

    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"REQUEST"];

    NSString * paramDataString = [NSString stringWithFormat:@"name=%@&subject=%@&email=%@&message=%@",[txtName.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[txtSubject.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[txtEmail.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[txtMessage.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    NSData*paramData = [paramDataString dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:paramData];

    NSURLResponse * response;
    NSError * error;

    NSData * aData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];//excute of data to the internet 
    NSString * requestData = [[NSString alloc] initWithData:aData encoding:NSUTF8StringEncoding];
    if ([requestData isEqualToString:[NSString stringWithFormat:@"sent"]])
    {
        lblStatus.hidden = NO;
        lblStatus.text = @"Message Sent..";
    }
    else if ([requestData isEqualToString:[NSString stringWithFormat:@"NO_NAME_ERROR"]])
    {
        lblStatus.hidden = NO;
        lblStatus.text = @"Name is too short";
    }
    else if ([requestData isEqualToString:[NSString stringWithFormat:@"NO_EMAIL_ERROR"]])
    {
        lblStatus.hidden = NO;
        lblStatus.text = @"Email is too short";
    }
    else if ([requestData isEqualToString:[NSString stringWithFormat:@"EMAIL_WRONG_ERROR"]])
    {
        lblStatus.hidden = NO;
        lblStatus.text = @"Email wrong error";
    }
    else if ([requestData isEqualToString:[NSString stringWithFormat:@"NO_MESSAGE_ERROR"]])
    {
        lblStatus.hidden = NO;
        lblStatus.text = @"Message is too short";
    }
    else if ([requestData isEqualToString:@"NULL"])
    {
        lblStatus.hidden = NO;
        lblStatus.text = @"EMPTY";
    }
    NSLog(@"request: %@",request);
    NSLog(@"requestData: %@",requestData);
    NSLog(@"aData: %@",aData);
}

这是php文件:http://www.pastebin.com/BvaiMs04

我已将邮件编辑为我的最新代码,但他仍然没有工作。

1 个答案:

答案 0 :(得分:3)

ParamDataString应为name=%@&subject=%@...,而不是/?

AND:您必须转义输入字符串:[txtName.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],[txtSubject.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ...

或将所有内容填入NSDictionary并使用urlEncodedString

NSDictionary *postParams = [[NSDictionary alloc] initWithObjectsAndKeys: txtName.text, @"foo", txtSubject.text, @"bar", nil];
//...
NSString *sPostParams = [postParams urlEncodedString];
[request setHTTPBody:[NSData dataWithBytes:[sPostParams UTF8String] length:[sPostParams length]]];

发现另一个错误:HTTP方法应该是POST,“_REQUEST”不存在... [request setHTTPMethod:@"POST"];