php mysql jquery Выберите один элемент из списка форм и установите значение «1» для поля, остальные - «0» - PullRequest
0 голосов
/ 25 мая 2011

Я боролся.

У меня есть ФОРМА со списком предметов.Я хочу разрешить выбор только одного элемента из этого списка и пометить элемент в моей базе данных как отмеченный.Я также пробовал переключатели, но имя ввода для каждого разное.

Форма:

  <td class="right"><input name="top_cat[<?php echo $cat['cat_id']; ?>][featured]" type="checkbox" class="featured" value="<?php echo $cat['featured'] ?>"  />
        </td>

Jquery на форме:

    $(function() {

$(".featured").each(function(){
    if($(this).val() == 1){
        $(this).attr('checked',"checked");
        }

});
$(".featured").click(function(){

    $(".featured").removeAttr('checked');
    $(".featured").val('0');


    $(this).val('1');
    $(this).attr('checked',"checked");
    });

В моем обновлении mysql:

                foreach ($data['top_cat'] as $cat_id => $value) {

$this->db->query("UPDATE " . DB_PREFIX . "cat SET featured='" . $this->db->escape($value['featured']) . "' WHERE cat_id = '" . (int)$cat_id . "'");

}

Это работает в некоторой степени, оно добавляет значение «1» в базу данных для элемента, но оставляет предварительно проверенный элемент как «1», оно должно быть «0».

Я уверен, что я слишком усложняю это, любая помощь или толчок в правильном направлении была бы признательна.

Ответы [ 2 ]

0 голосов
/ 25 мая 2011

POST будет содержать только отмеченные флажки, поэтому ваш цикл foreach, вероятно, просто повторяется один раз.

Используйте переключатель с таким именем, как top_cat, значение будет содержать $cat['cat_id']. Теперь, когда вы отправляете сообщение, прочитайте выбранный переключатель с чем-то вроде $_POST['top_cat'] или $data['top_cat']

Используйте переключатель как:

<input name="top_cat" type="radio" class="featured" value="<?php echo $cat['cat_id'] ?>"  />

и удалите цикл и используйте php как:

$selected = (int)$data['top_cat'];
$this->db->query("UPDATE " . DB_PREFIX . "cat SET featured='1' WHERE cat_id = $selected ");

// set all others to non-featured
$this->db->query("UPDATE " . DB_PREFIX . "cat SET featured='0' WHERE cat_id != $selected ");

Я не уверен, как настроена ваша база данных, но я думаю, что это должно сработать

0 голосов
/ 25 мая 2011

Я думаю, потому что он обновляет только выбранный элемент,

, поэтому вам нужно запустить запрос на обновление, который обновит до 0 все предыдущие элементы.

Попробуйте это:

$this->db->query("UPDATE " . DB_PREFIX . "cat SET featured='1' WHERE cat_id = '" . (int)$cat_id . "'");

foreach ($data['top_cat'] as $cat_id => $value) { 
  $this->db->query("UPDATE " . DB_PREFIX . "cat SET featured='0' WHERE cat_id = '" . (int)$cat_id . "'");
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...