使用ObjectiveC中的多个视图控制器向服务器发送数据

问题描述:

我所做的当前程序允许用户将文本输入到按下提交按钮时将数据发送到服务器的文本框中。使用ObjectiveC中的多个视图控制器向服务器发送数据

但是,我有多个视图控制器,每个视图控制器都有自己的输入框供用户输入数据。例如: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(); 

?> 

和我的OBJç .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 

如何你的域显示?他们都是单一形式还是多种形式?

你可以在一个单一的形式显示所有字段,然后在表格所有数据都将在同一$ _ POST通过提交按钮在窗体上的形式提交给操作参数。

如果字段都举行不同形式在同一页面上,你可以使用JavaScript来收集所有的数据,并同时提交了这一切。

如果所有的领域都不同看法/页,周围的工作,以便能够通过所有数据的一次;可能会将$ _POST数据从一个视图传递到下一个视图,并将其放在隐藏字段中,以便在最后一步中,您可以一次提交所有数据。

+0

将数据从一个视图传递到另一个视图并仅使用最后一个视图提交它并不是一个坏主意。谢谢!我会试一下! – Pammuelo 2014-11-03 11:51:47

+0

快速的问题,如果我这样做,我可以直接将它传递给最后一个视图?或者它是否需要通过每一个? – Pammuelo 2014-11-05 00:41:33

即使您的URL参数存在于多个MVC,作为“登录”句柄,您应该立即访问php 文件。 如果您想要使用参数,只需创建一个.h文件,使用“extern”定义全局变量,然后将它们分配给您的多个MVC,以便获取数据。

你必须在appdelegate中创建一个字典,并在每个视图控制器中使用键保存字段,并且在最终视图控制器中,您可以从dictionary1提交数据到服务器>在AppDelegate中创建Dictionary作为PostDataDictionary; 2>现在在你的视图控制器[PostdataDictionary setObject:@“”objctforkey:@“”];为每个视图设置这样的对象控制器现在在Final View Controller中ASIFormDataRequest * request; request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@“”]]]; [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]; 
    } 
} 
+0

请在答案中包含一些实用的代码。 – 2014-11-03 06:23:26