Как отправить несколько флажков / значений радио в базу данных с помощью php? - PullRequest
1 голос
/ 16 марта 2012

У меня есть форма, состоящая из множества переключателей и флажков, и мне было интересно, как лучше всего сохранить их значения в базе данных.Есть несколько вещей, которые необходимо учитывать.

  1. Все радио / флажки имеют разные названия.Я уже создал новую таблицу со столбцом для каждого радио / флажка, всего 30 новых столбцов.Мне посоветовали этот способ лучше, чем хранить несколько значений флажков в одном столбце.

  2. Я работаю в системе, основанной на модели MVC, и это код, который я имею вфайл контроллера для отправки значения радио / флажка в базу данных

    if (isset($this->request->post['buss_type'])) {
        $this->data['buss_type'] = $this->request->post['buss_type'];
    } else {
        $this->data['buss_type'] = '';
    }
    
  3. Мне было интересно, если я вынужден дублировать предыдущий код для моих 30 радио / флажков, или естьболее простой способ, которым я мог бы собрать все радио / флажки?

  4. Я был бы очень признателен, если вы действительно конкретны, так как я только начал изучать PHP.

РЕДАКТИРОВАТЬ DEMO ADDED Нажмите на «Корпоративный счет», чтобы увидеть форму.

Ответы [ 4 ]

1 голос
/ 16 марта 2012

добавление в ответ dqhendricks, если вы создаете запрос самостоятельно, а не с помощью фреймворка, это может помочь вам (хотя я еще не пробовал!):

$values = array();
foreach ($_POST['check'] as $key => $value ) {
    // I advise you to use either PDO or mysqli but to simplify:
    $values = "'" . mysql_real_escape_string($value) . "'";
}

// all values will be separated by a comma
$values_list = implode(',', $values);

$query = "insert into table_name values ($values_list)";
1 голос
/ 16 марта 2012

Похоже, вам нужен построитель запросов. Вот пример одного из моих

$guide=array(
"active"=>"Active Properties",
"incomplete"=>"Incomplete Properties",
"default"=>"Default (Borders and Headers)   ",
"links"=>"Link Color",
"background"=>"Background Color",
"navcolor"=>"Navigation Color");

$s="UPDATE dashboard_layout SET ";
$c="";
$vs="";
foreach($guide as $k=>$v){
$s.="`$k` = \"".mysql_real_escape_string($_POST[$k])."\"".($k=="navcolor"?"":",")." ";
$c.="`$k`".($k=="navcolor"?"":",");
$vs.='"'.mysql_real_escape_string($_POST[$k]).'"'.($k=="navcolor"?"":",");
}
$n="INSERT INTO dashboard_layout ($c,lender_id) VALUES ($vs,$company)";
$s.="WHERE lender_id='$company'";
$sql=($editmode?$s:$n);
$db->run($sql);

Имейте в виду, что вы все еще можете использовать foreach с объектами. Я рекомендую использовать руководство

1 голос
/ 16 марта 2012

Если вы обрабатываете все флажки одинаково, вы можете просто сделать их массивом в вашей HTML-форме.

<input name="check[footype]" type="checkbox" value="1" />
<input name="check[bartype]" type="checkbox" value="baz" />

Тогда просто переберите их на стороне сервера.

foreach ($_POST['check'] as $key => $value) {
   // repeated logic here

}

По сути, присваивая таким образом входные данные в форме, вы заставляете $_POST['check'] содержать массив со всеми вашими проверочными значениями на стороне сервера, который вы можете перебирать.

1 голос
/ 16 марта 2012

Ну, это поможет с Q.3 по крайней мере

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