2012-07-25 84 views
0

OK,這聽起來很奇怪,但我有一個表格,我們的企業要跟蹤什麼是得到改變,當用戶添加新的領導等PHP分裂和MongoDB

所以我成立了一個函數,請問下面是

function savedata($data){ 
    $collection = $this->db->retail_logs; 
    $this->data = explode('|', $data['data']); 
    print_r($this->data); 

    try { 
    $collection->update(
     array($this->data['0']=>$this->data['1'],$this->data[2]=>$this->data[3]), 
     array("date"=> date("d.m.Y"), "time"=>date("H:i:s"),"whochanged"=>$_COOKIE['CRMUIDkey']), // new lead document to insert 
     array("upsert" => true, "safe" => true) 
     ); 
    } catch (Exception $e) { 
     // Something went wrong .. 
    } 
} 

它基本上是一個日誌文件。

但你可以看到$數據雖然喜歡tradingname發送數據| ABC |業主| OWNERID

但是,如果我想添加到我會需要運行一個循環或一個foreach我想知道確保所有數據得到保存的最好方法是什麼,而不僅僅是數據[0]到3,所以他們發送16個字段和值,我需要一個foreach或東西來分割它。

+0

你有沒有發現我的方法有用:

要你想要做的事,如$data字符串轉換?注意你還沒有接受很多答案:) – Stennie 2012-08-09 01:02:02

回答

0

看來你想將$data['data']映射到鍵值對(一個關聯數組)。特別是因爲它看起來像用戶提供的數據(或者他們可以在發佈請求中修改的數據),所以您希望非常小心這種格式允許哪些字段。例如,如果您在執行upsert之前未檢查允許的密鑰,惡意用戶可能會更新或添加到其他用戶的帳戶。

<?php 
    // Keys that can be updated 
    $allowed = array('tradingname','owner'); 

    // Sample data  
    $data = 'tradingname|ABC|owner|ownerID|badkey|foo'; 

    // Split into arrays based on '|' delimiter 
    preg_match_all("/([^\|]+)\|([^\|]+)/", $data, $keypairs); 

    // Combine matches into key => value array 
    $keypairs = array_combine($keypairs[1], $keypairs[2]); 

    // Sanity check to create $criteria  
    foreach ($keypairs as $key => $value) { 
     if (in_array($key, $allowed)) { 
      // Perhaps do some extra sanity checking that $value is expected format 
      $criteria[$key] = $value; 
     } else { 
      // Log and/or bailout as appropriate 
      echo "Ignoring: [$key] => [$value]\n"; 
     } 
    } 

    // Criteria should now be reasonable to use in $collection->update(..) upsert 
    print_r($criteria); 
?> 
0

以json格式發送您的數據。然後用json_decode將它轉換爲你想要的數組。

+0

當我需要它發送每次用戶更改輸入或選擇值時,我該如何做呢?是否有一個JavaScript表單發佈函數,我運行 – RussellHarrower 2012-07-25 02:16:17