2013-07-12 44 views
0

我正在構建一個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?

謝謝你在前進,任何持有將不勝感激

+0

您是否嘗試將數據(jsonData)寫入文件並檢查響應是什麼。它可能會給您一個想法。 – Dinakar

+0

應該不是必須的,因爲我的應用程序執行的這種操作更多,而我從來不必將其寫入文件。通常使用此代碼,我的應用程序只是給出了從我的數據庫收到的一個很好的數組,但是現在我已經有數組了,現在它不再存在。有任何想法嗎? – Joris416

回答

1

只需創建一個REST服務器和移動客戶端和服務器之間發送數據。

+0

謝謝你的回答!我是編程的初學者,這是我的學習項目(我爲自己設立的)。你能向我解釋如何更深入地做到這一點嗎? – Joris416

+0

REST服務器爲您提供了在服務器和移動客戶端之間發送數據的可能性,如果您知道PHP可以使用例如FRAPI(http://getfrapi.com),如果您安裝了REST服務器,則可以使用for例如JSON或XML。你的應用程序將使用帶有參數的URL地址(http://myserver.com/?giveMeTheUserName=123),然後你可以從服務器讀取數據..你應該閱讀它...這是一個非常廣泛的主題... – Maciej

+0

謝謝,這可能工作!只要我嘗試過,它會奏效,我會接受! – Joris416