我正在構建一個iOS應用程序,允許用戶瀏覽產品並訂購它們。當用戶點擊訂單時,我想保存他/她的用戶名,電子郵件地址,交貨日期以及他訂購的產品數組到我的mysql數據庫中。我需要能夠看到我爲企業製作的其他應用的訂單。如何將自定義對象數組插入到mysql數據庫中
保存字符串如用戶名或地址不是問題,但保存產品數組(由自定義對象表示)似乎出錯了。我的數據庫不會返回它應該返回的數組,當我嘗試在我的其他應用程序上下載它時,我可以找出原因。
我的自定義對象具有下一個屬性:
ITEMNAME,itemCode,itemBarCode,itemCompany,ITEMPRICE,itemQuantity,itemUserRemark,itemCompany,productImageNumber
每個變量是一個字符串,和對象表示在一個項用戶的購物車(由orderProducts數組表示)。
我發送爲了我的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);
}
?>
這似乎工作,因爲所有的對象都插在我的數據庫。我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);
}
不管我做什麼,數組總是空的,我螺母河畔e如果這是將自定義對象數組發送到mysql的正確方法。
所以我的最後一個問題,有人知道一些示例代碼,教程或只是如何發送和檢索自定義對象的數組從Objective-c通過PHP到和從MySQL?
謝謝你在前進,任何持有將不勝感激
您是否嘗試將數據(jsonData)寫入文件並檢查響應是什麼。它可能會給您一個想法。 – Dinakar
應該不是必須的,因爲我的應用程序執行的這種操作更多,而我從來不必將其寫入文件。通常使用此代碼,我的應用程序只是給出了從我的數據庫收到的一個很好的數組,但是現在我已經有數組了,現在它不再存在。有任何想法嗎? – Joris416