w Obj-C tak przesyłam dane do PHP
- (IBAction)registerClicked:(id)sender {
@try {
NSString *password = [_txtPassword text];
NSString *password2 = [_txtPassword2 text];
NSString *email = [_txtEmail text];
if([[_txtName text] isEqualToString:@""] || [[_txtSurname text] isEqualToString:@""]
|| [email isEqualToString:@""] || [password isEqualToString:@""]
|| [password2 isEqualToString:@""]) {
[self alertStatus:@"Proszę uzupełnić wszystkie pola" :@"Brak wypełnionych wszystkich pól"];
} else if (![password isEqualToString:password2]) {
[self alertStatus:@"Wpisane hasła różnią się od siebie" :@"Niezgodność haseł"];
} else if (password.length < 4) {
[self alertStatus:@"Hasło musi zawierać minimum 4 znaki" :@"Zbyt krótkie hasło"];
} else if (![self validEmail:email]) {
[self alertStatus:@"Adres e-mail jest nieprawidłowy" :@"Nieprawidłowy adres e-mail"];
} else {
//salt the password
NSString* saltedPassword = [NSString stringWithFormat:@"%@%@", password2, kSalt];
//prepare the hashed storage
NSString* hashedPassword = nil;
unsigned char hashedPasswordData[CC_SHA1_DIGEST_LENGTH];
//hash the pass
NSData *data = [saltedPassword dataUsingEncoding: NSUTF8StringEncoding];
if (CC_SHA1([data bytes], [data length], hashedPasswordData)) {
hashedPassword = [[NSString alloc] initWithBytes:hashedPasswordData length:sizeof(hashedPasswordData) encoding:NSASCIIStringEncoding];
} else {
[self alertStatus:@"Wystąpił problem - zamknij aplikację i spróbuj raz jeszcze" :@"Nieoczekiwany błąd"];
return;
}
NSString *post =[[NSString alloc]
initWithFormat:@"name=%@&surname=%@&email=%@&password=%@", [_txtName text],[_txtSurname text],
email, hashedPassword];
NSLog(@"PostData: %@",post);
NSURL *url=[NSURL URLWithString:@"http://localhost/test"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
// dla https [NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
NSError *error = [[NSError alloc] init];
NSHTTPURLResponse *response = nil;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"Odpowiedź serwera: %d", [response statusCode]);
if ([response statusCode] >=200 && [response statusCode] <300)
{
NSString *responseData = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"Response ==> %@", responseData);
SBJsonParser *jsonParser = [SBJsonParser new];
NSDictionary *jsonData = (NSDictionary *) [jsonParser objectWithString:responseData error:nil];
NSLog(@"%@",jsonData);
NSInteger success = [(NSNumber *) [jsonData objectForKey:@"success"] integerValue];
NSLog(@"%d",success);
if(success == 1)
{
NSLog(@"Zarejestrowano poprawnie");
[self alertStatus:@"Odbierz wiadomość e-mail i potwierdź adres" :@"Dziękujemy!"];
RegisterFormViewController *account = [self.storyboard instantiateViewControllerWithIdentifier:@"login"];
[self presentViewController:account animated:YES completion:nil];
} else {
NSString *error_msg = (NSString *) [jsonData objectForKey:@"error_message"];
[self alertStatus:error_msg :@"Błąd rejestracji!"];
}
} else {
if (error) NSLog(@"Error: %@", error);
[self alertStatus:@"Sprawdź połączenie z internetem!" :@"Błąd rejestracji!"];
}
}
}
@catch (NSException * e) {
NSLog(@"Exception: %@", e);
[self alertStatus:@"Wystąpił błąd." :@"Błąd rejestracji!"];
}
}
i później PHP to waliduje i wrzuca do bazy...
problem w tym, że w konsoli Xcode widzę, że wychodzą dane z polskimi znakami.
2012-11-01 20:07:24.115 test[10073:c07] PostData:name=ąśśśćłłóóó &surname=łłóóóśśćć&email=lllll@wp.pl&password=VÉ{¡TaªNB÷Ug¦·û
a w bazie zamiast "ł" jest "?"
zamiast "ó" jest "o"
zamiast "ś" jest "s"
zamiast "ć" jest "c"
w php ustawiłem kodowanie w nagłówku.
header("Content-Type: application/json; charset=utf-8");
oraz podczas łączenia się z bazą:
//ustaw znaki
mysql_query("SET NAMES utf8", $con) or die(mysql_error());
mysql_query("SET CHARACTER SET utf8", $con) or die(mysql_error());
mysql_query("SET collation_connection = utf8_polish_ci", $con) or die(mysql_error());
baza jest w UTF-8 collaction też w UTF-8
o co chodzi?











