0

わかりました、これは奇妙に聞こえるかもしれませんが、私はフォームを持っており、私たちのビジネスは、ユーザーが新しいリードを追加したときなど、何が変更されているかを追跡したいと考えています.

だから私は次のことを行う関数を設定します

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 .. 
    }
}

それは基本的にログファイルです。

ただし、 $data が Tradingname|ABC|owner|ownerID のようにデータを送信するのを見ることができるかもしれません

しかし、それに追加したい場合は、ループまたは foreach を実行する必要があります。data[0] から 3 だけでなく、すべてのデータが確実に保存されるようにするための最良の方法は何か疑問に思っているので、16 個のフィールドを送信し、その中の値を分割するには foreach または何かが必要です。

4

2 に答える 2

0

$data['data']をキー=>値のペア(連想配列)にマップしたいようです。この形式で許可するフィールドについては特に注意する必要があります。これは、ユーザー提供のデータ (または投稿リクエストで変更できるデータ) のように見えるためです。たとえば、アップサートを実行する前に許可されたキーを確認していないと、悪意のあるユーザーが別のユーザーのアカウントを更新または追加する可能性があります。

文字列を変換するには、次の$dataようにします。

<?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);
?>
于 2012-07-28T22:44:32.680 に答える
0

データをjsonとして送信します。次に、json_decodeを使用して、必要な配列に変換します。

于 2012-07-25T02:09:07.720 に答える