php 批量修改資料時 input[type=checkbox]發生的問題

來源:互聯網
上載者:User
input[type=checkbox] 我用了js 把 數值 'On' 轉成了方便我輸入資料庫的 1 和 0
$('input[type="checkbox"]').change(function(){    this.value ^= 1;});


表單太複雜,就不貼上來了
反正所有欄位我也填上了 name []

問題來了,我除了 $_POST["blank"]; 這個欄位其他都可以正常地批次更新

不是不能更新,是更新的次序有問題

以下是個詳細的測試,比如頁面上有5條資料可以批量修改

1. ID1~5 設定$_POST["blank"] = 1 (打勾)
成功
2. ID1~5 設定$_POST["blank"] = 0 (不打勾)
成功

3. 把 ID 2,3 設定$_POST["blank"] = 1

ID 1,2會變成 1 反而3沒有改變

4. 再試試... 把ID 3,4,5 設定$_POST["blank"] = 1 (事先將全部設定回0)

結果不出所料,是ID 1,2,3 變成 blank = 1,而ID4 5 沒有改變


理論上,PHP是知道我有多少個設定為blank = 1,但終是只把 排序最前面的定設為1

感覺上是array指標不對之類的? 但這又為什麼其他欄位都非常準確正常地可以更新修改? 只有這個欄不能修改?

最煩惱的是知道怎樣發生錯誤,但一直查不出原因來



if (isset($_POST["edit_menu"])) {    $gid =$_POST["gid"];    $sql = "";    $menuCount = count($_POST["id"]);    for($i=0;$i<$menuCount;$i++) {        $title = $_POST["title"];        $url = $_POST["url"];        $id = $_POST["id"];        $blank = $_POST["blank"];        $sql .= "UPDATE `menu` set                         title='" . $title[$i] . "',                        url='" . $url[$i] . "',                        blank='" . $blank[$i] . "'                    WHERE id='" . $id[$i] . "' AND gid = '$gid';";    }    $stmt = $pdo->exec($sql);}


回複討論(解決方案)

沒有被勾選的 checkbox 是不會被提交的!
php 只知道有多少個 checkbox 被選中,但不知道選中的是哪些
所以你需要通過指定 checkbox 的 value 來識別被選中的 checkbox,而不是讓他做0、1轉換
checkbox.value 通常是備選項的序號或 id

沒有被勾選的 checkbox 是不會被提交的!
php 只知道有多少個 checkbox 被選中,但不知道選中的是哪些
所以你需要通過指定 checkbox 的 value 來識別被選中的 checkbox,而不是讓他做0、1轉換
checkbox.value 通常是備選項的序號或 id


我用checkbox是想給使用者選擇這個項目(record) 寫入SQL時,設定是否由新一頁開啟

因為是在列表中給使用者修改,貌似只有這個選擇(用checkbox)

如果不用1/0 我接收到的是 On / 'Null'

結果是1/0 一樣的

有什麼其他的解決辦法?

在用戶端解決不可以嗎?
打鉤的,就把target=”_blank“, 寫進對應的連結的屬性裡面,

$('input[type="checkbox"]').click(function(){            var link_id,checkbox_id;            checkbox_id=$this.id;            //得到當前複選框的ID賦值到checkbox_id,變換成對應連結的ID,賦值給link_id,然後            $(link_id).attr(  "target",                                     ($(checkbox_id).value==‘1’)?"_blank":"_self"                                 );});

在用戶端解決不可以嗎?
打鉤的,就把target=”_blank“, 寫進對應的連結的屬性裡面,

$('input[type="checkbox"]').click(function(){            var link_id,checkbox_id;            checkbox_id=$this.id;            //得到當前複選框的ID賦值到checkbox_id,變換成對應連結的ID,賦值給link_id,然後            $(link_id).attr(  "target",                                     ($(checkbox_id).value==‘1’)?"_blank":"_self"                                 );});



我是要把是否 _blank 儲存到資料庫

給前台調用,這是個背景批量修改頁

問題是不管我把checkbox的值修改成什麼,只要沒有勾選,HTML ($_POST) 就沒有發送任何數值到PHP處理

嘮叨大哥說的是對的,
複選框不是這樣用的,
不是選中或不選中其值會變,而是選中後,標籤會有個checked="checked"的屬性。

複選框的值是用來定位的。你把複選框的值變成和id一樣就行了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.