Here is what I am doing: Allowing the user to upload a photo and two description fields of the photo to MySQL using their iphone app. I have already figured out how to configure the app so that the text from the two description fields are uploaded (using PostURL and an accompanying .php file on my web server).
Where I am running into problems is how to add a photo into the mix, and have the photo AND text fields transmit together into the database into their corresponding columns (image, name, message).
What should my header and implementation files look like? And as an added bonus, what should my .php file look like? Here is how they exist currently, and as an FYI, this only works to transmit text, not the photo.
Header file:
#import <UIKit/UIKit.h>
#define kPostURL @"http://www.example.com/upload.php"
#define kName @"name"
#define kMessage @"message"
@interface FirstViewController : UIViewController<UINavigationControllerDelegate, UIImagePickerControllerDelegate>{
IBOutlet UITextField *nameText;
IBOutlet UITextView *messageText;
NSURLConnection *postConnection;
UIImageView * theimageView;
UIButton * choosePhoto;
UIButton * takePhoto;
}
@property (nonatomic, retain) IBOutlet UITextField * nameText;
@property (nonatomic, retain) IBOutlet UITextView * messageText;
@property (nonatomic, retain) NSURLConnection * postConnection;
@property (nonatomic, retain) IBOutlet UIImageView * theimageView;
@property (nonatomic, retain) IBOutlet UIButton * choosePhoto;
@property (nonatomic, retain) IBOutlet UIButton * takePhoto;
-(IBAction) getPhoto:(id) sender;
-(void) postMessage:(NSString*) message withName:(NSString *) name;
-(IBAction)post:(id)sender;
@end
Implementation file:
#import "FirstViewController.h"
@implementation FirstViewController
@synthesize nameText, messageText, postConnection, theimageView, choosePhoto, takePhoto,postData;
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(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;
[[NSNotificationCenter defaultCenter] postNotificationName:@"Test1" object:self];
}
-(IBAction) getPhoto:(id) sender {
UIImagePickerController * picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
if((UIButton *) sender == choosePhoto) {
picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
} else {
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
}
[self presentModalViewController:picker animated:YES];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[picker dismissModalViewControllerAnimated:YES];
theimageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
@end
(^.^)”Hi sorry for my English is not good if someone like correct my redaction I would appreciate this”
Hi you can use (get, post, web services like soap, rest services like json) request.
From my experience if you like to send an image you have to use base64binary this is a string representation of array of bytes because I’ve never been able to send one array of bytes, but if is string you can send this normal without base64binary.