使用Objective C中的多个视图控制器将数据发送到服务器

时间:2014-11-03 04:25:36

标签: php ios objective-c xcode

我当前制作的程序允许用户在文本框中输入文本,当按下提交按钮时,该文本框会将数据发送到服务器。

但是,我有多个View控制器,每个控制器都有自己的输入框供用户输入数据。示例:VC1具有ID和密码文本框,VC2具有年龄文本框,VC3具有国籍文本框。

是否可以一次提交每个VC的所有数据?我只使用一个php文件来执行此操作吗?我对这个概念很困惑,所以任何帮助都会很棒!

我的PHP代码:

<?php

$username = "root";
$database = "testdb";

mysql_connect('localhost', $username);

@mysql_select_db($database) or die ("Unable to find database");

$name = @$_GET["name"];
$message = @$_GET["message"];

$query = "INSERT INTO test VALUES ('', '$name', '$message')";

mysql_query($query) or die (mysql_error("error"));

mysql_close();

?> 

和我的对象 .h

#import <UIKit/UIKit.h>

#define kPostURL @"http://localhost/TESTCONNECT.php" //variable to use whenever
#define kName @"name"
#define kMessage @"message"



@interface FirstViewController : UIViewController{

IBOutlet UITextField *nameText;
IBOutlet UITextView *messageText;

NSURLConnection *postConnection;
}

-(IBAction)post:(id)sender;


@end

的.m

#import "FirstViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

- (void)viewDidLoad {
[super viewDidLoad];

}




-(void) postMessage:(NSString*) message withName:(NSString *) name{

if(name !=nil && message !=nil){

NSMutableString *postString = [NSMutableString stringWithString:kPostURL];
[postString appendString:[NSString stringWithFormat:@"?%@=%@", kName, name]];

[postString appendString: [NSString stringWithFormat:@"&%@=%@", kMessage, message]];

[postString setString:[postString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSMutableURLRequest *request =[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString: postString]];


[request setHTTPMethod:@"POST"];

postConnection =[[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];


}
}

-(IBAction)post:(id)sender{
[self postMessage:messageText.text withName:nameText.text];
[messageText resignFirstResponder];
messageText.text=nil;
nameText.text=nil;

}




- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];

}

@end

3 个答案:

答案 0 :(得分:0)

您的字段如何显示?它们都是单一形式还是多种形式?

您可以在单个表单中显示所有字段,然后表单的所有数据将通过表单上的提交按钮以相同的$ _POST提交到表单中的action参数。

如果字段以不同的形式保存在同一页面上,您可以使用javascript收集所有数据并立即提交。

如果所有字段都在不同的视图/页面上,那么可以一次性传递所有数据;将$ _POST数据从一个视图传递到下一个视图并将其放在隐藏字段中,以便在最后一步,您可以一次提交所有数据。

答案 1 :(得分:0)

即使你的URL参数存在于几个MVC,作为“登录”句柄,你应该访问php 立即归档。 如果你想使用参数,只需创建一个.h文件,定义全局变量使用“extern”,然后在你的多个MVC中分配它们,这样你就可以得到你的数据。

答案 2 :(得分:0)

您必须在appdelegate中创建一个字典,并在每个视图控制器中使用键将字段保存在字典中,并且在最终视图控制器中,您可以从dictionary1&gt;提交数据到服务器。在AppDelegate中创建字典作为PostDataDictionary; 2 - ;现在在您的视图中控制器[PostdataDictionary setObject:@&#34;&#34; objctforkey:@&#34;&#34;];为每个视图设置这样的对象控制器现在在最终视图控制器ASIFormDataRequest *请求中;             request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@&#34;&#34;]]];             [request setDelegate:self];

        [request setPostValue:[appDelegate.PostDataDictionary objectForKey:@"FirstName"] forKey:@"fname"];
        [request setPostValue:[appDelegate.PostDataDictionary objectForKey:@"LastName"] forKey:@"lname"];

        [request addData:imagedata withFileName:@"file1.png" andContentType:@"image/jpeg" forKey:@"photo"];
        [request startAsynchronous];
    }
}