基于复选框,按文本框更新数据库

时间:2012-04-06 16:11:17

标签: php database

**您好 我一直在研究这个PHP代码。

我想更新属于复选框的数量。 但我的代码的确切问题是:如果我有例如3个复选框,当我输入数量时,所有这些都在同一时间更新完成正确,如果我只更新第一个数量而不是其他2,则更新是也正确完成,但是当我单独更新第二个或第三个时,不是同时更新第一个旧值的数量:“”( 所以如何更改我的代码,以便我可以更新所有项目或只更新选中的项目。

这是我的代码,用于显示带有数量的复选框。

在文件manage_items.php中:**

<?php
$DB_HOST ='localhost';
$DB_USER ='root';
$DB_PASSWORD='';
$DB_DATABASE='dks';

$con= mysql_connect($DB_HOST ,$DB_USER , $DB_PASSWORD);
if(!$con){
die('Failed to connect to server :'.mysql_error());
}

$db=mysql_select_db($DB_DATABASE);
if(!$db){
die("unable to select database");
}?>

$qry="SELECT * FROM catalog";
$result= mysql_query($qry);
if($result){
while($info = mysql_fetch_array($result))
{

print "<h3><a href=\"\#\"> cat:".$info['name']."</a></h3><div>";


$qryitem="SELECT * FROM item WHERE Id=". $info['Cid'];
$resultitem=mysql_query($qryitem);
if($resultitem){

?>

<form method="post" action="manage_item_action.php">
<?php
while($info=mysql_fetch_array($resultitem))
{
?>
<input type="checkbox" name="op[]" value="<?php echo $info['Id'];?>"/><?php echo $info['name'];?>
<label> Quantity <input type="text" name="Quantity[]" value="<?php echo $info['Quantity'];?>"/></label>
<br/>

        <?php
        } 
    }


    else echo "There are no items.";


    print "</div>"; 

}
}

?>

</div>

<input type="submit" value="update" name="submit"/>
</form>

这是更新的执行 在文件manage_item_action.php

<?php
$DB_HOST ='localhost';
$DB_USER ='root';
$DB_PASSWORD='';
$DB_DATABASE='dks';

$con= mysql_connect($DB_HOST ,$DB_USER , $DB_PASSWORD);
if(!$con){
die('Failed to connect to server :'.mysql_error());
}

$db=mysql_select_db($DB_DATABASE);
if(!$db){
die("unable to select database");
}

$options=$_POST['op'];
$qun=$_POST['Quantity'];
$size =count($options);
for($i =0; $i<$size; $i++)
{

 //$qryop="UPDATE item SET Quantity =".$qun."WHERE Id =".$options[$i]."';"; 
$resultop=mysql_query("update item set Quantity='".$qun[i]."'where Id='".$options[$i]."'");


}
if($resultop){
header("location: manage_items.php");}
else echo "there was an error"

?>

我不知道如何解决这个问题! 但我认为我的主要问题是所有文本框都有相同的名称。 所以当我把它发送到另一个文件进行执行时,它只需要它,因为它是最后一个。

请帮助我:$

* 已更新 *

* 解决方案 *

所以我解决了我的代码的问题,它只需要在签入复选框之前禁用文本框,这样数组就没有任何空索引..只有输入的值没有任何空值 :))

2 个答案:

答案 0 :(得分:0)

您需要为“数量”输入字段指定一个唯一的名称,或者将其转换为列出的每个复选框的数组,否则在提交时,接收表单会将“数量”的最后一个值作为福音。

答案 1 :(得分:0)

那是因为在输入表单框中,您有:

Quantity <input type="text" name="Quantity" ...

因此,在插入每个数量时,正在更新转发的值。插入Quantity框的最后一个值将在更新中获取。相反,请将此表单输入更改为:

<!-- This will forward an array to php script -->
Quantity <input type="text" name="Quantity[]"... 

然后,在您的更新查询中,更改为:

$resultop=mysql_query("UPDATE item SET Quantity='" . $qun[$i] . "'where Id='".$options[$i]."'");