Etable/formType/checkbox:修訂版本之間的差異
出自六年制學程
第 7 行: | 第 7 行: | ||
:: $newname=$this->getName()."[]"; // 表單元素名末尾加[ ] | :: $newname=$this->getName()."[]"; // 表單元素名末尾加[ ] | ||
:: $this->setName($newname); // 設為新的表單元素名 | :: $this->setName($newname); // 設為新的表單元素名 | ||
+ | ::} | ||
+ | ::…… | ||
+ | ::foreach($this->getOptions() as $value=>$name){ | ||
+ | :: $ret.="<inputtype='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['欄名']得到的是字串 |
− | #複選時:$_POST['欄名']得到的是陣列 | + | *#複選時:$_POST['欄名']得到的是陣列 |
− | 所以對單選與複選「全部選項未核取」須要賦予不同的定義: | + | *:所以對單選與複選「全部選項未核取」須要賦予不同的定義: |
'''單選:''' | '''單選:''' |
2024年5月6日 (一) 07:25的修訂版本
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.="<inputtype='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['欄名']得到的是陣列
- 所以對單選與複選「全部選項未核取」須要賦予不同的定義:
單選:
- 未核取,欄值後送 0
- 欄值 0 ,代表未核取
複選:
- 全部選項未核取,欄值後送空字串
- 欄值 0 ,代表核取過欄值為 0 的選項