2

I am trying to insert some hebrew text from app to mysql database but the values are not inserted into database. The method works for english language but having problem with hebrew text. Its not inserting into db some time its showing the text garbage value.

the objective C code is

-(void)updateDatabase{

NSURL *url = [NSURL URLWithString:@"http://site.com/api/"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSDictionary *params = [[NSDictionary alloc] initWithObjectsAndKeys:image_name, @"image_name", invoice_no, @"invoice_no", photoReason, @"photo_reason", photoReasonText, @"photo_reason_text", txtField_1.text, @"user_info_1", txtField_2.text , @"user_info_2", txtField_3.text, @"user_info_3", txtField_4.text, @"user_info_4", txtField_5.text, @"user_info_5", txtField_6.text, @"user_info_6", txtField_7.text, @"user_info_7", nil];

NSLog(@"Params: %@", [params valueForKey:@"user_info_6"]);

NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"upload_info.php" parameters:params];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

[operation setUploadProgressBlock:^(NSInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
    NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];
[operation  setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    NSLog(@"success: %@", operation.responseString);

    SBJSON *parser = [[SBJSON alloc] init];
    NSMutableArray *statuses = [parser objectWithString:operation.responseString error:nil];
    int status = [[statuses valueForKey:@"status"] integerValue];
    if (status == 0) {
        invoice_no = [statuses valueForKey:@"invoice_no"];
        NSLog(@"Invoice No: %@", statuses);
        percentLabel.text = @"80%";
        [self pushView:4];

        [self pay];
    }

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"Card Images Are Uploaded." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    percentLabel.text = @"70%";

}
                                  failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                      NSLog(@"error: %@",  operation.responseString);


                                      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error..." message:operation.responseString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                                      [alert show];

                                  }];
[operation start];

}

and the php code is

<?php

include "constants.php";

$APIVersion = "1.0";
$commandName = $commandUploadInfo;

$image_name         = $_POST['image_name'];
$invoice_no         = $_POST['invoice_no'];
$photo_reason       = $_POST['photo_reason'];
$photo_reason_text  = $_POST['photo_reason_text'];
$user_info_1        = $_POST['user_info_1'];
$user_info_2        = $_POST['user_info_2'];
$user_info_3        = $_POST['user_info_3'];
$user_info_4        = $_POST['user_info_4'];
$user_info_5        = $_POST['user_info_5'];
$user_info_6        = $_POST['user_info_6'];
$user_info_7        = $_POST['user_info_7'];

$link = mysql_pconnect($dbhost, $dbuser, $dbpass)
or
die("{\"method\":\"".$commandName."\",".
    "\"version\":\"".$APIVersion."\",".
    "\"status\":-2,".
    "\"message\":\"Could not connect to database\",".
    "\"debug\":\"".mysql_error()."\"".
    "}");

mysql_select_db($dbname)
or
die("{\"method\":\"".$commandName."\",".
    "\"version\":\"".$APIVersion."\",".
    "\"status\":-2,".
    "\"message\":\"Could not select database\",".
    "\"debug\":\"".mysql_error()."\"".
    "}");


$insertSQL = "INSERT INTO ".
"`image_info2`(
 `image_name` ,
 `invoice_no` ,
 `photo_reason` ,
 `photo_reason_text` ,
 `user_info_1` ,
 `user_info_2` ,
 `user_info_3` ,
 `user_info_4` ,
 `user_info_5` ,
 `user_info_6` ,
 `user_info_7`
)".
"VALUES ('$image_name', '$invoice_no', '$photo_reason', '$photo_reason_text', '$user_info_1', '$user_info_2', '$user_info_3', '$user_info_4', '$user_info_5', '$user_info_6', '$user_info_7');";

mysql_query($insertSQL)
or
die("{\"method\":\"".$commandName."\",".
    "\"version\":\"".$APIVersion."\",".
    "\"status\":-2,".
    "\"message\":\"Failed to execute query\",".
    "\"debug\":\"".mysql_error()."\"".
    "}");

echo "{".
"\"method\":\"" . $commandName . "\",".
"\"version\":\"" . $APIVersion . "\",".
"\"status\":0,".
"\"id\":\"Info uploaded successfully\"".
"}";

?>

Sarkar Raj
  • 261
  • 3
  • 12

2 Answers2

1

You need to set your collation for the columns which have Hebrew text to one of:

  • utf8_general_ci - for case insensitive matches
  • utf8_general_cs - for case sensitive matches.

Inserting Hebrew text into MySQL using PHP (garbage text)

Community
  • 1
  • 1
0

I have solved my hebrew language problem. It was an database and table row/field encoding issue. Here is the solution i used. I took help from another answer and the link is given below, in case anyone need it.

  1. the db collation has to be utf8_general_ci.
  2. the collation of the table with hebrew has to be utf8_general_ci
  3. in my php connection script i put header('Content-Type: text/html; charset=utf-8');
  4. in my xhtml head tag i put <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. after selecting the db in the connection script i put mysql_query("SET NAMES 'utf8'");

and then the problem was solved.

The first answer helped me and I took it from there

Community
  • 1
  • 1
Sarkar Raj
  • 261
  • 3
  • 12