【问题标题】:php mysql jquery Select One Item from a form list and set the value of "1" to a field the rest set to "0"php mysql jquery 从表单列表中选择一项并将“1”的值设置为字段,其余设置为“0”
【发布时间】:2011-09-01 15:40:21
【问题描述】:

我一直在挣扎。

我有一个包含项目列表的表格。 我只想允许从此列表中选择一个项目并将我的数据库中的项目标记为特色。我也尝试过单选按钮,但每个按钮的输入名称不同。

表格:

  <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”。

我确信我已经把这个复杂化了,任何朝着正确方向的帮助或轻推将不胜感激。

【问题讨论】:

    标签: php jquery mysql checkbox radio-button


    【解决方案1】:

    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 ");
    

    我不确定您的数据库是如何设置的,但我认为这应该可以解决问题

    【讨论】:

    • 你的明星...我已经努力实现这一天了(不好意思说)。对我的设置进行了一些编辑,就像做梦一样工作。
    【解决方案2】:

    我认为是因为它只更新当前选定的项目,

    因此您需要运行更新查询,将所有前一项更新为 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 . "'");
    } 
    

    【讨论】:

    • 感谢您的快速回复:我试过 foreach ($data['top_cat'] as $cat_id => $value) { if ($this->db->e​​scape($value['featured '])==1) { $this->db->query("UPDATE" . DB_PREFIX . "cat SET features='1' WHERE cat_id = '" . (int)$cat_id . "'");}else { $this->db->query("UPDATE " . DB_PREFIX . "cat SET features='0' WHERE cat_id = '" . (int)$cat_id . "'");} } 但也没有用...这就是您将其余部分更新为0的意思吗?
    • 新复选框后的源页面是正确的。但就像你说的那样,它似乎没有将其余部分设置为 0。
    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多