作者chrismaggie (中仔)
看板Ajax
标题[问题] 请问如何暂存表单栏位中的资料?
时间Sat Oct 11 00:32:51 2008
小弟目前设计报表上传系统.最後一个环节卡住了.
逻辑概念是这样的:
使用者可利用此系统上传多笔销售资料.多笔资料藉由表单变数+回圈控制达成多笔上传功
能
上传表单使用jquery连动选单,js栏位检查与加总运算.
问题点:
使用者当填入第一份报表部份资料後想新增第二笔资料,按下Add New Report送出表单变
数新增第二份报表,但刚刚所填写第一份报表的资料没办法暂存.
因为页面reload,但却无相关表单变数,如图所示
http://140.124.90.41/up/a/23.jpg

程式部份:
1.上方表单-用来传递表单变数搭配回圈.按下Add New Report会传递变数number给下方上
传表单使用,利用send()控制报表生成数量上限值
<form name="form2" method="post" action="week_up.php?type=report">
<font color=red onclick='send()'> Add New Report</font>;
<input name="number" type="text" id="number" value="<?php
echo((isset($_POST["number"]))?$_POST["number"]+1:"1") ?>"
style="display:none">
<input type="submit" name="button5" value="Submit" style="display:none">
</form>
JS send()-报表生成最大值为10
function send(){
if(document.form2.number.value==10)
{alert('report number limit')
return false;}
document.form2.submit();
}
2.上传表单部份-利用回圈程式接收表单变数生成表格
<?php for( $i=1; isset($_POST['number'])?$i<=1+$_POST['number']:$i<=1; $i++){
?>
<table id="table" width='90%' border="1" align=center cellpadding=5
cellspacing=2 bordercolor="#E4E4E4">
<tr>
<td valign=middle class='f_one'><font color="red">*</font>Report Type</td>
<td class='f_one'><select name="report_type[]" id="report_type<?php echo
$i?>">
<option value="">------------</option>
<option value="Sell-In" >Sell-In</option>
<option value="Sell-Out">Sell-Out</option>
<option value="Inventory">Inventory</option>
</select></td>
</tr>
<tr>
<td width=19% valign=middle class='f_one'><font color="red">*</font>Channel
Type</td>
<td width=81% class='f_one'><select name="class1[]" id="class1<?php echo
$i?>" onclick="if(this.options[this.selectedIndex].value
=='Retail'){this.form.class2<?php echo $i?>.style.display='inline';} else
this.form.class2<?php echo $i?>.style.display='none';">
<option value="">Channel Type</option>
<?php
// 资料库设定
mysql_select_db($database_mio, $mio);
$query = sprintf("SELECT DISTINCT class1 FROM company");
$result = mysql_query($query, $mio);
while ($row = mysql_fetch_assoc($result)) {
echo '<option value="' . $row["class1"] . '">' . $row["class1"] . '</option>'
. "\n";
}
?>
</select>
<select name="class2[]" id="class2<?php echo $i?>" style="display:none" >
<option value="NULL">-Channel Type 2-</option>
<?php
do {
?>
<option value="<?php echo $row_c_type2['class2']?>"><?php echo
$row_c_type2['class2']?></option>
<?php} while ($row_c_type2 = mysql_fetch_assoc($c_type2));
$rows = mysql_num_rows($c_type2);
if($rows > 0) {
mysql_data_seek($c_type2, 0);
$row_c_type2 = mysql_fetch_assoc($c_type2);
}
?>
</select>
-
<select name="class3[]" id="class3<?php echo $i?>">
<option value="">-Distribution Channel-</option>
<?php
do {?>
<option value="<?php echo $row_c_type3['class3']?>"><?php echo
$row_c_type3['class3']?></option>
<?php} while ($row_c_type3 = mysql_fetch_assoc($c_type3));
$rows = mysql_num_rows($c_type3);
if($rows > 0) {
mysql_data_seek($c_type3, 0);
$row_c_type3 = mysql_fetch_assoc($c_type3);
}
?>
</select>
<script>
jQuery(document).ready(function(){
$('#class3<?php echo $i?>').cascade('#class1<?php echo $i?>', {
ajax: {
type: "GET",
url: 'action.php',
data: { act: 'distribution', val: $('#class3<?php echo $i?>').val() }
},
template: function(item) { return "<option value='" + item.Value + "'>" +
item.Text + "</option>"; },
match: function(selectedValue) { return this.When == selectedValue; }
});
});
</script></td></tr></table>
这个部份比较复杂,有些栏位我就省下不写.这个表单的栏位id是配合回圈变数$i有所不
同,当报表只有一份,报表编号栏位为report_type1,当报表有两份.则为report_type1跟
report_type2而jquery跟栏位检查也都是依据栏位id去作实现.
只是目前每份报表的栏位都没办法纪录资料
那使用者就不能随时新增报表,而要在一开始就确定
报表数量.这样有点不太人性化.不知道要怎麽改善.请帮忙指点一下要从哪边改善呢
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.218.94
1F:→ TonyQ:demo连不上 :p 10/11 12:35
2F:→ chrismaggie:t大您好.可是是学校主机问题.现在是可以连上的. 10/12 11:57
3F:→ chrismaggie:请您帮我看一下.谢谢 10/12 11:58
4F:→ chrismaggie:感谢T大鼎力相助.真是高手.望尘莫及阿..ORZ. 10/12 16:33
5F:→ TonyQ:以这个问题来讲 , 存下所有的资料塞到hidden input 10/12 18:21
6F:→ TonyQ:submit後重新填回来是比较一般的解. 10/12 18:21
7F:→ chrismaggie:推T大.之前我是想从这方面着手.用表单变数塞回来用 10/12 18:30
8F:→ chrismaggie:但还是要JS辅助.还是卡在JS...不过T大的解不用reload 10/12 18:32
9F:→ chrismaggie:利用JS就解决了..强 10/12 18:32
※ 编辑: chrismaggie 来自: 220.132.218.94 (10/12 23:21)