我正在构建一个 iOS 应用程序,允许用户在其中浏览产品并订购它们。当用户点击订单时,我想将他/她的用户名、电子邮件、地址、交货日期以及他订购的产品数组保存到我的 mysql 数据库中。我需要能够在我为企业制作的其他应用程序上查看订单。
保存用户名或地址等字符串不是问题,但保存产品数组(由自定义对象表示)似乎出错了。当我尝试在我的其他应用程序上下载它时,我的数据库没有返回它应该返回的数组,而且我不知道为什么。
我的自定义对象具有以下属性:
itemName, itemCode, itemBarCode, itemCompany, itemPrice, itemQuantity, itemUserRemark, itemCompany, productImageNumber
每个变量都是一个字符串,对象代表用户购物车(由orderProducts数组表示)中的一项。
我将订单发送到我的网络服务,如下所示:
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);
在我的网络服务上:
<?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);
}
无论我做什么,该数组始终为空,我很确定这是否是将一组自定义对象发送到 mysql 的正确方法。
所以我的最后一个问题,是否有人知道一些示例代码、教程或只是如何通过 php 从 mysql 发送和检索来自 Objective-c 的自定义对象数组?
提前谢谢你,任何举行将不胜感激