ユーザーが製品をナビゲートして注文できるiOSアプリを構築しています。ユーザーが注文をタップすると、ユーザー名、電子メール、住所、配達日、そしてもちろん注文した製品の配列をmysqlデータベースに保存したいと思います。ビジネス用に作成している他のアプリで注文を確認できるようにする必要があります。
ユーザー名や住所などの文字列の保存は問題ありませんが、製品の配列 (カスタム オブジェクトで表される) の保存はうまくいかないようです。私のデータベースは、他のアプリでダウンロードしようとしたときに返されるはずの配列を返しません。その理由を理解できません。
カスタム オブジェクトには次のプロパティがあります。
itemName、itemCode、itemBarCode、itemCompany、itemPrice、itemQuantity、itemUserRemark、itemCompany、productImageNumber
各変数は文字列であり、オブジェクトはユーザーのショッピング カート (orderProducts 配列で表される) 内の 1 つのアイテムを表します。
次のように注文を Web サービスに送信します。
NSString *orderToSend = [NSString stringWithFormat:@"http://www.imagine-app.nl/orderInsert.php?user=%@&orderAdressStreet=%@&orderAdressZip=%@&orderAdressNumber=%@&orderAdressCity=%@&paymentType=%@&orderDate=%@&orderDelivery=%@&orderProducts=%@&company=%@", orderClass.user, orderClass.orderAdressStreet, orderClass.orderAdressZip, orderClass.orderAdressNumber, orderClass.orderAdressCity, orderClass.orderPaymentType, orderClass.orderDate, orderClass.orderDelivery, orderClass.orderProducts, orderClass.company];
NSString *strURL = [orderToSend stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"connection %@", strURL);
そして私のWebサービスで:
<?php
if (isset($_GET["user"]) && isset($_GET["orderAdressStreet"]) && isset($_GET["orderAdressZip"]) && isset($_GET["orderAdressNumber"]) && isset($_GET["orderAdressCity"]) && isset($_GET["paymentType"]) && isset($_GET["orderDate"]) && isset($_GET["orderDelivery"]) && isset($_GET["orderProducts"]) && isset($_GET["company"]) ){
$user = $_GET["user"];
$orderAdressStreet = $_GET["orderAdressStreet"];
$orderAdressZip = $_GET["orderAdressZip"];
$orderAdressNumber = $_GET["orderAdressNumber"];
$orderAdressCity = $_GET["orderAdressCity"];
$paymentType = $_GET["paymentType"];
$orderDate = $_GET["orderDate"];
$orderDelivery = $_GET["orderDelivery"];
$orderProducts = $_GET["orderProducts"];
$company = $_GET['company'];
$result = insertOrder($user, $orderAdressStreet, $orderAdressZip, $orderAdressNumber, $orderAdressCity, $paymentType, $orderDate, $orderDelivery, $orderProducts, $company);
echo $result;
}
function makeSqlConnection()
{
$DB_HostName = "xxxxx";
$DB_Name = "xxxxx";
$DB_User = "xxxxx";
$DB_Pass = "xxxxxxx";
$con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error());
mysql_select_db($DB_Name,$con) or die(mysql_error());
return $con;
}
function disconnectSqlConnection($con)
{
mysql_close($con);
}
function insertOrder($user, $orderAdressStreet, $orderAdressZip, $orderAdressNumber, $orderAdressCity, $paymentType, $orderDate, $orderDelivery, $orderProducts, $company)
{
$con = makeSqlConnection();
$sqlInsert = "INSERT INTO Orders (user, orderAdressStreet, orderAdressZip, orderAdressNumber, orderAdressCity, paymentType, orderDate, orderDelivery, orderProducts, company) VALUES ('$user', '$orderAdressStreet', '$orderAdressZip', '$orderAdressNumber', '$orderAdressCity', '$paymentType', '$orderDate', '$orderDelivery', '$orderProducts' , '$company');";
$insertNewItems = mysql_query($sqlInsert,$con) or die(mysql_error());
disconnectSqlConnection($con);
}
?>
すべてのオブジェクトがデータベースに挿入されているため、これは機能しているようです。注文した製品を 1 つ含む orderProducts 配列は、次のようにセルに挿入されます。
( "" )
ビジネス側のアプリでこの注文をダウンロードするときは、次のコードを使用します。
on my server side:
<?php
if (isset($_GET["company"])){
$company = $_GET["company"];
$result = getOrders($company);
echo $result;
}
function makeSqlConnection()
{
$DB_HostName = "xxxxx";
$DB_Name = "xxxxx";
$DB_User = "xxxxx";
$DB_Pass = "xxxxxxxx";
$con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error());
mysql_select_db($DB_Name,$con) or die(mysql_error());
return $con;
}
function disconnectSqlConnection($con)
{
mysql_close($con);
}
function getOrders($company)
{
$con = makeSqlConnection();
$query = mysql_query("SELECT * from items WHERE company = '$company'");
$ordersFromDatabase = array();
while ($row = mysql_fetch_assoc($query)) {
$orders['ordersFromDatabase'][] = $row;
}
print json_encode($orders);
$res = mysql_query($sql,$con) or die(mysql_error());
echo $res;
disconnectSqlConnection($con);
}
?>
そして私のアプリのviewDidLoadで:
- (void)viewDidLoad
{
[super viewDidLoad];
Store* myStore = [Store sharedStore];
NSString *companyID = [[NSString alloc] initWithString: myStore.companyID];
NSURL *strUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.imagine-app.nl/getOrders.php?company=%@", companyID]];
NSLog(@"connection: %@", strUrl);
NSData *jsonData = [NSData dataWithContentsOfURL:strUrl];
NSLog(@"%@", jsonData);
NSMutableArray *ordersFromDataBbase = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:NULL][@"ordersFromDatabase"];
NSLog(@"Products Array: %@", ordersFromDataBbase);
}
私が何をしても、配列は常に null であり、これがカスタム オブジェクトの配列を mysql に送信する正しい方法であるかどうかはわかりません。
最後の質問ですが、サンプル コード、チュートリアル、またはカスタム オブジェクトの配列を Objective-c から php を介して mysql に送受信する方法を知っている人はいますか?
よろしくお願いします。