php+mysql中,如何通过循环方式把表单内容update进数据库
设我有一数据库表table,表中有字段id,a,b,c四个,表中有10行,已经通过二维数组的方式写入页面,方式如下:<?php$i=0;foreach($arrayas$...
设我有一数据库表table,表中有字段id,a,b,c四个,表中有10行,已经通过二维数组的方式写入页面,方式如下:
<?php
$i=0;
foreach ($array as $key=>$value){//开始遍历数组;
?>
<tr>
<td><input name="a<?php echo $i; ?>" type="text" value="<?php echo $value[1] ?>" /></td>//表格中嵌套表单,表单名字随着循环递增,其中$value[1]就是字段a中的值;
<td><input name="b<?php echo $i; ?>" type="text" value="<?php echo $value[2] ?>" /></td>
<td><input name="c<?php echo $i; ?>" type="text" value="<?php echo $value[3] ?>" /></td>
</tr>
<input name="id<?php echo $i; ?>" type="hidden" value="<?php echo $value[0]; ?>" /> //这一行是用来取得本行对应的表ID。为隐藏域。
<?php $i++; }?>//到此遍历结束。
//以上程序结束后会将table表中的数据以表格的形式写入到表中的表单中,共十行。
<input name="hidden" type="hidden" value="<?php echo $i; ?>" />//这一行同为隐藏域,但它取得的是遍历次数。这个次数到后期循环写入数据库时作为基准,毕竟这十行也不固定嘛。
<input name="submit" type="submit" value="点击保存" />
</form>
//form表单显示结束。以上程序通过测试,没有任何问题,输出的源码也能按预想正确输出;
//以上会出现这样的格局:table表中的行1对应id假设为1,那么这个表单名字就对应:a1、b1、c1、还有它的id对应name=id1;
问题出在这里:
当我写数据库的时候,需要循环:
for($p=0; $p<$_POST[hidden]; $p++){
$a='$_POST[a' . $p . ']';
$b='$_POST[b' . $p . ']';
$c='$_POST[c' . $p . ']';
$id='$_POST[id' . $p . ']';
//问题出来了!$a、$b、$c输出的分别是:$_POST[a1]、$_POST[b1]、$_POST[c1];是原原本本的字符串,而不是我预想得到的POST来的值!下面写入数据库自然无法完成:
$arr=query(UPDATE `table` SET `a`=$a, `b`=$b, `c`=$c WHERE `id`= $id");//出错!
}
高手莫笑我省事,但我实在不想一个一个地提交,想找个一劳永逸的办法,但就卡在这里无法继续,请高手指教,不胜感激。
至于单双引号的问题我试过,如果在$a='$_POST[a' . $p . ']'; 改为:$a=“$_POST[a” . $p . “]”; 程序报错。
或许这种方法压根就是行不通的,如果有经验的高手有其它方法,还望不吝赐教。
找到了一种不是办法的应对办法,但我还是渴望有人能给出不像我这样旁门左道的方式,我的解决方法是:<td><input name="<?php echo $t; $t++; ?>" type="text" value="<?php echo $value[1] ?>" /></td>直接将表单命名为纯数字,最后39条。也就是最后POST了40条信息,像这样表达:$_POST[0];
后面循环的时候:
$w=0;
for($p=0; $p<$_POST[hidden]; $p++){
$a="$_POST[$w]";
$w++;
$b="$_POST[$w]";
$w++;
$c="$_POST[$w]";
$w++;
$id="$_POST[$w]";
$w++;
……写数据库语句略。
}
然后写入数据库,本方法测试可行,运行一切正常,但太偏门了,纯属乱用。希望高手给出一般解决方法,不胜感激。 展开
<?php
$i=0;
foreach ($array as $key=>$value){//开始遍历数组;
?>
<tr>
<td><input name="a<?php echo $i; ?>" type="text" value="<?php echo $value[1] ?>" /></td>//表格中嵌套表单,表单名字随着循环递增,其中$value[1]就是字段a中的值;
<td><input name="b<?php echo $i; ?>" type="text" value="<?php echo $value[2] ?>" /></td>
<td><input name="c<?php echo $i; ?>" type="text" value="<?php echo $value[3] ?>" /></td>
</tr>
<input name="id<?php echo $i; ?>" type="hidden" value="<?php echo $value[0]; ?>" /> //这一行是用来取得本行对应的表ID。为隐藏域。
<?php $i++; }?>//到此遍历结束。
//以上程序结束后会将table表中的数据以表格的形式写入到表中的表单中,共十行。
<input name="hidden" type="hidden" value="<?php echo $i; ?>" />//这一行同为隐藏域,但它取得的是遍历次数。这个次数到后期循环写入数据库时作为基准,毕竟这十行也不固定嘛。
<input name="submit" type="submit" value="点击保存" />
</form>
//form表单显示结束。以上程序通过测试,没有任何问题,输出的源码也能按预想正确输出;
//以上会出现这样的格局:table表中的行1对应id假设为1,那么这个表单名字就对应:a1、b1、c1、还有它的id对应name=id1;
问题出在这里:
当我写数据库的时候,需要循环:
for($p=0; $p<$_POST[hidden]; $p++){
$a='$_POST[a' . $p . ']';
$b='$_POST[b' . $p . ']';
$c='$_POST[c' . $p . ']';
$id='$_POST[id' . $p . ']';
//问题出来了!$a、$b、$c输出的分别是:$_POST[a1]、$_POST[b1]、$_POST[c1];是原原本本的字符串,而不是我预想得到的POST来的值!下面写入数据库自然无法完成:
$arr=query(UPDATE `table` SET `a`=$a, `b`=$b, `c`=$c WHERE `id`= $id");//出错!
}
高手莫笑我省事,但我实在不想一个一个地提交,想找个一劳永逸的办法,但就卡在这里无法继续,请高手指教,不胜感激。
至于单双引号的问题我试过,如果在$a='$_POST[a' . $p . ']'; 改为:$a=“$_POST[a” . $p . “]”; 程序报错。
或许这种方法压根就是行不通的,如果有经验的高手有其它方法,还望不吝赐教。
找到了一种不是办法的应对办法,但我还是渴望有人能给出不像我这样旁门左道的方式,我的解决方法是:<td><input name="<?php echo $t; $t++; ?>" type="text" value="<?php echo $value[1] ?>" /></td>直接将表单命名为纯数字,最后39条。也就是最后POST了40条信息,像这样表达:$_POST[0];
后面循环的时候:
$w=0;
for($p=0; $p<$_POST[hidden]; $p++){
$a="$_POST[$w]";
$w++;
$b="$_POST[$w]";
$w++;
$c="$_POST[$w]";
$w++;
$id="$_POST[$w]";
$w++;
……写数据库语句略。
}
然后写入数据库,本方法测试可行,运行一切正常,但太偏门了,纯属乱用。希望高手给出一般解决方法,不胜感激。 展开
1个回答
展开全部
将表单中的文本框作为数组来处理,然后循环数组,这样效率高,不要写很多代码。看看我写的方法:
http://www.sunchis.com/html/php/2010/0314/70.html
http://www.sunchis.com/html/php/2010/0314/70.html
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询