Sending a message from an iOS application to a PHP script does not work ... A simple solution seems to be

I did this several times before, but for some reason I can’t get a message to go through ... I tried a php script with variables set in _POST and without ... When they are not set for publication, it works fine. Here is my iOS code:

NSDate *workingTill = timePicker.date; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"HH:mm"]; NSString *time = [formatter stringFromDate:workingTill]; NSString *post = [NSString stringWithFormat:@"shift=%@&username=%@", time, usernameString]; NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO]; NSString *postLength = [NSString stringWithFormat:@"%d", [post length]]; NSURL *url = [NSURL URLWithString:@"http://wowow.php"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; [request setHTTPMethod:@"POST"]; NSLog(@"%@", post); [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody:postData]; [NSURLConnection connectionWithRequest:request delegate:nil]; [self.navigationController popToRootViewControllerAnimated:YES]; 

And here is the php fragment, are the POST variables in the wrong place?

 <?php function objectsIntoArray($arrObjData, $arrSkipIndices = array()) { $arrData = array(); // if input is object, convert into array if (is_object($arrObjData)) { $arrObjData = get_object_vars($arrObjData); } if (is_array($arrObjData)) { foreach ($arrObjData as $index => $value) { if (is_object($value) || is_array($value)) { $value = objectsIntoArray($value, $arrSkipIndices); // recursive call } if (in_array($index, $arrSkipIndices)) { continue; } $arrData[$index] = $value; } } return $arrData; } $newShift = $_POST('shift'); $bartenderUsername = $_POST('username'); mysql_connect("host", "name", "pw") or die(mysql_error()); mysql_select_db("harring4") or die(mysql_error()); $result = mysql_query("SELECT * FROM BartenderTable WHERE username='".$bartenderUsername."'") or die(mysql_error()); $row = mysql_fetch_array($result); $newfname = $row['fname']; 

I assume this is a fairly simple answer to a more experienced developer, thanks for your help!

+6
source share
3 answers

$_POST is an array, not a function. To access the array indices, square brackets are needed:

 $newShift = $_POST['shift']; $bartenderUsername = $_POST['username']; 
+8
source

Use the following code. make sure that getting the string string is key and will be used on the server. client code

  NSString *receipt1 = @"username"; NSString *post =[NSString stringWithFormat:@"receipt=%@",receipt1]; NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; [request setURL:[NSURL URLWithString:@"http://localhost:8888/validateaction.php"]]; [request setHTTPMethod:@"POST"]; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; [request setHTTPBody:postData]; NSHTTPURLResponse* urlResponse = nil; NSError *error = [[NSError alloc] init]; NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error]; NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; NSLog(@"Response Code: %d", [urlResponse statusCode]); if ([urlResponse statusCode] >= 200 && [urlResponse statusCode] < 300) { NSLog(@"Response: %@", result); } } 

server side php script.

validation.php

 <?php if(_POST) { if($_POST['receipt'] == 'username') { echo "post successfull"; $receipt = $_POST['key1']; echo $receipt; } else { echo "not post"; } ?> 
+3
source

Since I'm an iPhone developer, I can tell you that your Objective-C code is correct. Also make sure that the data you send is not empty

 NSLog(@"%d,[postData length]"); 

he should not print 0

0
source

Source: https://habr.com/ru/post/909635/


All Articles