Etable/formType/checkbox:修訂版本之間的差異
出自六年制學程
(未顯示同用戶所作出之1次版本) | |||
第 1 行: | 第 1 行: | ||
[[分類:Etable]][[分類:LiteSite]] | [[分類:Etable]][[分類:LiteSite]] | ||
checkbox必須區別單選與複選的起因是'''formcheckbox.php'''中: | checkbox必須區別單選與複選的起因是'''formcheckbox.php'''中: | ||
− | + | <pre>function render(){ | |
− | + | …… | |
− | + | // 如果選項超過一個,而且表單元素名末尾不是[] | |
− | + | if(count($this->getOptions())>1 && substr($this->getName(),-2,2)!="[]"){ | |
− | + | $newname=$this->getName()."[]"; // 表單元素名末尾加[] | |
− | + | $this->setName($newname); // 設為新的表單元素名 | |
− | + | } | |
− | + | …… | |
− | + | foreach($this->getOptions() as $value=>$name){ // 所有選項都做一輪 | |
− | + | $ret.="<input type='checkbox' id='".$id.'''$i'''."' name='".$this->getName()."' value='".$value."'"; | |
− | + | // 只要有值,就檢查選項值有沒有在已核取值陣列中,若有就秀核取 | |
− | + | if(count($this->getValue())>0 && in_array($value,$this->getValue())){ | |
− | + | $ret.="checked='checked'"; | |
− | + | } | |
− | + | $ret.=$this->getExtra()."/>".$name."\n"; | |
− | + | '''$i++'''; | |
− | + | } | |
− | + | …… | |
+ | }</pre> | ||
*所以單選與複選,其表單元素名送回伺服器是不同的變數名: | *所以單選與複選,其表單元素名送回伺服器是不同的變數名: | ||
*#單選時:$_POST['欄名']得到的是字串 | *#單選時:$_POST['欄名']得到的是字串 | ||
*#複選時:$_POST['欄名']得到的是陣列 | *#複選時:$_POST['欄名']得到的是陣列 | ||
*:所以對單選與複選「全部選項未核取」須要賦予不同的定義: | *:所以對單選與複選「全部選項未核取」須要賦予不同的定義: | ||
− | *但送入 function | + | *但送入 function XoopsFormCheckBox(…,$value=null,…) 之 $value: |
*#若未送值則 $value 值維持為 null | *#若未送值則 $value 值維持為 null | ||
*#若有送值則 $value 值一律轉為陣列,即使原來的 $value 值是純量,或其值為 null,false,0,空字串都一樣轉成元素值,型別不變。 | *#若有送值則 $value 值一律轉為陣列,即使原來的 $value 值是純量,或其值為 null,false,0,空字串都一樣轉成元素值,型別不變。 |
2024年5月7日 (二) 20:33的最新修訂版本
checkbox必須區別單選與複選的起因是formcheckbox.php中:
function render(){ …… // 如果選項超過一個,而且表單元素名末尾不是[] if(count($this->getOptions())>1 && substr($this->getName(),-2,2)!="[]"){ $newname=$this->getName()."[]"; // 表單元素名末尾加[] $this->setName($newname); // 設為新的表單元素名 } …… foreach($this->getOptions() as $value=>$name){ // 所有選項都做一輪 $ret.="<input type='checkbox' id='".$id.'''$i'''."' name='".$this->getName()."' value='".$value."'"; // 只要有值,就檢查選項值有沒有在已核取值陣列中,若有就秀核取 if(count($this->getValue())>0 && in_array($value,$this->getValue())){ $ret.="checked='checked'"; } $ret.=$this->getExtra()."/>".$name."\n"; '''$i++'''; } …… }
- 所以單選與複選,其表單元素名送回伺服器是不同的變數名:
- 單選時:$_POST['欄名']得到的是字串
- 複選時:$_POST['欄名']得到的是陣列
- 所以對單選與複選「全部選項未核取」須要賦予不同的定義:
- 但送入 function XoopsFormCheckBox(…,$value=null,…) 之 $value:
- 若未送值則 $value 值維持為 null
- 若有送值則 $value 值一律轉為陣列,即使原來的 $value 值是純量,或其值為 null,false,0,空字串都一樣轉成元素值,型別不變。
單選:
- 未核取,欄值後送 0
- 欄值 0 ,代表未核取
複選:
- 全部選項未核取,欄值後送空字串
- 欄值 0 ,代表核取過欄值為 0 的選項