iT邦幫忙

0

(已解決)如何在 radio 表單紀錄上次填寫的 value

  • 分享至 

  • xImage

我使用php撰寫表單

表單所填寫的資料會存到資料庫

希望在下次進入表單時

可呈現上次所填寫的結果

已抓到資料庫中上次所填寫的資料($thisStatus),如下

$sqlToStatus = "SELECT `status` FROM `result`";
$resultStatus = mysql_query($sqlToStatus);
$statusRowsNum = mysql_num_rows($resultStatus);
$statusfieldnum = mysql_num_fields($resultStatus);
while($statusdatas=mysql_fetch_array($resultStatus))
{
	for($data=0;$data<$fieldnum;$data++)
    {
		$thisStatus = $statusdatas[$data];
		<input type='' readonly='readonly' value='$thisStatus' name='this_status' id='this_status'>;
	}
}

表單如下:

<input type='radio' class='default_status' id='status' name='status_$global_value' value='1'>
<input type='radio' class='default_status' id='status' name='status_$global_value' value='2'>
<input type='radio' class='default_status' id='status' name='status_$global_value' value='3'>

謝謝

ccutmis iT邦高手 2 級 ‧ 2018-03-01 16:38:32 檢舉
($thisStatus==$lastStatus)?'checked="checked"':''
小魚 iT邦大師 1 級 ‧ 2018-03-02 13:02:49 檢舉
PHP不熟,
不過我覺得應該要加上 <? ?> 跟 echo吧...
小斑 iT邦新手 3 級 ‧ 2018-03-05 10:44:59 檢舉
有加
只是放在這裡討論時把它省略了
下次會寫清楚,感謝提醒~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
神Q超人
iT邦研究生 5 級 ‧ 2018-03-01 16:00:04
最佳解答

把那三個選項都設不一樣的id
例如:

<input type='radio' class='default_status' id='status1' name='status_$global_value' value='1'>
<input type='radio' class='default_status' id='status2' name='status_$global_value' value='2'>
<input type='radio' class='default_status' id='status3' name='status_$global_value' value='3'>

先去判斷($thisStatus)的值後再對表單做處理

處理方面可以用JavaScript的setAttribute()去改它的屬性,
假設資料庫儲存的value是1:

document.getElementById('status1').setAttribute('checked', 'checked');

也可以使用Jquery的attr()更改屬性,
假設資料庫儲存的value是2:

$('#status2').attr('checked', 'checked');

就可以把它變成選中的狀態了!

如果要取消選取的話也可以用JavaScript的removeAttribute()或Jquery的removeAttr(),例如現在要取消status3的選取狀態:

//javascript版
document.getElementById('status3').removeAttribute('checked');
//Jquery版
$('#status3').removeAttr('checked');
看更多先前的回應...收起先前的回應...
小斑 iT邦新手 3 級 ‧ 2018-03-05 10:38:24 檢舉

謝謝,可以順利改變屬性

我目前是可以順利將每一題的status印出

但都是取最後一個status和改變第一題的屬性

我希望能夠第一個status改變第一題的屬性,第二個status改變第二題的屬性,第三個status改變第三題的屬性......依此類推

請問應該如何改呢

謝謝

目前javascript程式碼如下:

var Obj_Str = document.getElementsByName("buttonCheck");
var Count = Obj_Str.length;
for ($i = 1; $i < Count+1; $i++) {
	var status = document.getElementById("this_status_"+$i).value;
    alert("this_status_"+$i+" = "+status); //每一題的status印出
	if("this_status_"+$i=="this_status_"+$i)
	{
		for($j=1;$j<=9;$j++){
			if(status==$j){
                        document.getElementById('status'+$j).setAttribute('checked', 'checked');
			}
		}
	}
}
小斑 iT邦新手 3 級 ‧ 2018-03-05 10:44:39 檢舉

有加
只是放在這裡討論時把它省略了
下次會寫清楚,感謝提醒~

小斑 iT邦新手 3 級 ‧ 2018-03-05 10:44:45 檢舉

有加
只是放在這裡討論時把它省略了
下次會寫清楚,感謝提醒~

小斑 iT邦新手 3 級 ‧ 2018-03-05 10:44:51 檢舉

有加
只是放在這裡討論時把它省略了
下次會寫清楚,感謝提醒~

小斑 iT邦新手 3 級 ‧ 2018-03-05 10:48:26 檢舉

抱歉~電腦怪怪的

我把問題再更新一次


謝謝,可以順利改變屬性

我目前是可以順利將每一題的status印出

但都是取最後一個status和改變第一題的屬性

我希望能夠第一個status改變第一題的屬性,第二個status改變第二題的屬性,第三個status改變第三題的屬性......依此類推

請問應該如何改呢

謝謝

目前javascript程式碼如下:

var Obj_Str = document.getElementsByName("buttonCheck");
var Count = Obj_Str.length;
for ($i = 1; $i < Count+1; $i++) {
	var status = document.getElementById("this_status_"+$i).value;
    alert("this_status_"+$i+" = "+status); //每一題的status印出
	if("this_status_"+$i=="this_status_"+$i)
	{
		for($j=1;$j<=9;$j++){
			if(status==$j){
                        document.getElementById('status'+$j).setAttribute('checked', 'checked');
			}
		}
	}
}
神Q超人 iT邦研究生 5 級 ‧ 2018-03-05 13:41:49 檢舉

this_status_"+$i=="this_status_"+$i
if裡面的這個條件是不是必成立啊@@
我也想看一下目前的HTML樣子

小斑 iT邦新手 3 級 ‧ 2018-03-05 14:26:09 檢舉

抓到資料庫中上次所填寫的資料($thisStatus)主要改了這裡,把每一題抓到的資料暫存到input標籤,如下:

echo "<input type='hidden' value='$thisStatus' name='this_status' id='this_status_$global_value'>";

然後再使用javascript取得每一題的值

var status = document.getElementById("this_status_"+$i).value;

html表單,把每個選項都設不一樣的id,如下:

<div class="status_div"> //第一題
<input type='radio' class='default_status' id='status1' name='status_$global_value' value='1'>
<input type='radio' class='default_status' id='status2' name='status_$global_value' value='2'>
<input type='radio' class='default_status' id='status3' name='status_$global_value' value='3'>
.
.
.
</div>
<div class="status_div"> //第二題
<input type='radio' class='default_status' id='status1' name='status_$global_value' value='1'>
<input type='radio' class='default_status' id='status2' name='status_$global_value' value='2'>
<input type='radio' class='default_status' id='status3' name='status_$global_value' value='3'>
.
.
.
</div>

...//第N題

我也覺得好像這行比較有點問題
this_status_"+$i=="this_status_"+$i

在這裡的原本想法是
如果現在為第一題、第二題、第三題......依此類推

就跑裡面的for迴圈,改變radio的選中狀態

但if判斷好像寫得不對

若資訊描述不足,請再告知我,謝謝

(若去掉那行if條件,只會取最後一個status並改變第一題的屬性)

神Q超人 iT邦研究生 5 級 ‧ 2018-03-05 20:22:20 檢舉

<input type='hidden' value='$thisStatus' name='this_status' id='this_status_$global_value'>

這裡面的id,是this_status_1、this_status_2到第n題的this_status_n嗎?

小斑 iT邦新手 3 級 ‧ 2018-03-05 22:24:50 檢舉

是的,這裡是抓到資料庫中上次所填寫的資料($thisStatus)的值

神Q超人 iT邦研究生 5 級 ‧ 2018-03-05 23:53:34 檢舉

哦哦 我知道了!!
你把if那行拿掉吧,之所以會只有最後一個被選中是因為你的id命名方式有問題,如下:

<div class="status_div"> //第一題
<input type='radio' class='default_status' id='status1' name='status_$global_value' value='1'>
<input type='radio' class='default_status' id='status2' name='status_$global_value' value='2'>
<input type='radio' class='default_status' id='status3' name='status_$global_value' value='3'>
//這行以上都還沒問題
.
.
.
</div>
<div class="status_div"> //第二題
<input type='radio' class='default_status' id='status1' name='status_$global_value' value='1'>
<input type='radio' class='default_status' id='status2' name='status_$global_value' value='2'>
<input type='radio' class='default_status' id='status3' name='status_$global_value' value='3'>
//但是從第二題開始到最後一題選項中的id就變的和第一題重複了!!!
.
.
.
</div>

...//第N題

在HTML中如果id重複就會以最後一次命名的該Element為主,所以才會只有最後一題有效,建議每一題都另外用一個規則來區分開個字的id,
如果是用迴圈做的話可以改成:

<div class="status_div"> //第一題
<input type='radio' class='default_status' id='1status1' name='status_$global_value' value='1'>
<input type='radio' class='default_status' id='1status2' name='status_$global_value' value='2'>
<input type='radio' class='default_status' id='1status3' name='status_$global_value' value='3'>
.
.
.
</div>
<div class="status_div"> //第二題
<input type='radio' class='default_status' id='2status1' name='status_$global_value' value='1'>
<input type='radio' class='default_status' id='2status2' name='status_$global_value' value='2'>
<input type='radio' class='default_status' id='2status3' name='status_$global_value' value='3'>
.
.
.
</div>

這樣JavaScript也可以使用迴圈去填值,以下我大概改一下,可能不會是正確的,可以再試看看。

var Obj_Str = document.getElementsByName("buttonCheck");
var Count = Obj_Str.length;
for ($i = 1; $i < Count+1; $i++) {
	var status = document.getElementById("this_status_"+$i).value;
    alert("this_status_"+$i+" = "+status); //每一題的status印出
		for($j=1;$j<=9;$j++){
			if(status==$j){
            document.getElementById($i+'status'+$j).setAttribute('checked', 'checked');
            else{
                document.getElementById($i+'status'+$j).setAttribute('checked', '');
            }
		}
	}
}
小斑 iT邦新手 3 級 ‧ 2018-03-06 10:07:06 檢舉

原來如此,太感謝了~~~順利解決問題了,也學到東西:D
/images/emoticon/emoticon41.gif

我要發表回答

立即登入回答