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一樣就行了。