2012-03-17 1 views
0

У меня есть следующий массив php, который получает все значения из формы, полной радиостанций и флажков.Как написать запрос для массива php?

foreach(array('buss_type','anotherfield','anotherfield','...etc') as $index) 
{ 
    if (isset($this->request->post[$index])) { 
     $this->data[$index] = $this->request->post[$index]; 
    } else { 
     $this->data[$index] = NULL; 
    } 
} 

Теперь мне интересно, как написать запрос, чтобы отправить эти значения в моей базе данных, в новую таблицу я только что создал (розничной). Каждое значение radio/checkform имеет свой столбец в моей таблице розничной торговли, как написать запрос, чтобы все значения, содержащиеся в индексе $ index, попадали в их конкретный столбец.

Ниже приведен пример того, как другие мои запросы похожи ...

public function addCustomer($data) { 
    //this is the one I am trying to write, and this one works, 
    //but I'd have to add every single checkbox/radio name to the 
    //query, and I have 30! 
    $this->db->query("INSERT INTO " . DB_PREFIX . "retailer SET buss_t = '" . 
      (isset($data['buss_t']) ? (int)$data['buss_t'] : 0) . 
      "', store_sft = '" . 
      (isset($data['store_sft']) ? (int)$data['store_sft'] : 0) . 
     "'"); 
    //Ends Here 
    $this->db->query("INSERT INTO " . DB_PREFIX . "customer SET store_id = '" . 
      (int)$this->config->get('config_store_id') . "', firstname = '" . 
      $this->db->escape($data['firstname']) . "', lastname = '" . 
      $this->db->escape($data['lastname']) . "', email = '" . 
      $this->db->escape($data['email']) . "', telephone = '" . 
      $this->db->escape($data['telephone']) . "', fax = '" . 
      $this->db->escape($data['fax']) . "', password = '" . 
      $this->db->escape(md5($data['password'])) . "', newsletter = '" . 
      (isset($data['newsletter']) ? (int)$data['newsletter'] : 0) . 
      "', customer_group_id = '" . 
      (int)$this->config->get('config_customer_group_id') . 
      "', status = '1', date_added = NOW()"); 

Спасибо много для любой проницательности вы можете предоставить.

+0

В будущем, пожалуйста, посмотрите на результат своего кода и подумайте: «Отличается ли это отформатировано?» – jprofitt

+0

@jprofitt Не уверен, что вы имеете в виду? Если у вас есть рекомендация, я был бы рад принять это во внимание, но, пожалуйста, будьте конкретны. Благодарю. – codekmarv

+0

У вас была большая часть кода на одной строке, которую вам пришлось прокручивать, чтобы читать, что затрудняло понимание. Я отредактировал его, чтобы быть более читаемым на сайте для вас. – jprofitt

ответ

1

Лучшим способом было бы создать функцию, которая принимает имя массива и таблицы в качестве аргумента и выполняет запрос вставки.

function insertArray($table, $array) 
{ 
    $keys =""; $values = ""; 
    foreach($table as $k=>$v) 
    { 
     $keys.=($keys != "" ? ",":"").$k: 
     $values .=($values != "" ? "," :"")."'".$v."'"; 
    } 
    $this->db->query("INSERT INTO ".$table." (".$keys.") VALUES (".$values."); 
} 

Массив должен быть структурированы следующим образом:

array("db_attribute1"=>"value1","db_attribute2"=>"value2"); 
1

Хранить имена столбцов и значения столбцов в отдельных массивов и использовать Implode(), чтобы создать список разделенных запятой столбцов и значения

$values = array(); 
$columns = array('buss_type','anotherfield','anotherfield','...etc'); 
foreach($columns as $index) 
{ 
    if (isset($this->request->post[$index])) 
    { 
     $this->data[$index] = $this->request->post[$index]; 
     $values[] = $this->db->escape($this->request->post[$index]); 
    } 
    else 
    { 
     $this->data[$index] = NULL; 
     $values[] = "''"; 
    } 
} 



$this->db->query("INSERT INTO table_name (" . implode(",", $columns) . ") VALUES (" . implode(",", $values) . "); 
Смежные вопросы