2014-02-13 70 views
0

我有一些麻烦让这段代码正常工作。我们的员工可以访问我们网站上的后端系统。这是如何设置输入字段等:PHP MySQL发票材料

<? 
$materialer_query = $db->query("SELECT faktura_materialer.id as materialer_id, faktura.*, faktura_materialer.* FROM faktura, faktura_materialer WHERE faktura_materialer.faktura_id = faktura.id"); 

while($mat = $materialer_query->fetch_object()){ 
    ?>      
    <tr> 
     <td><input style="width:450px;" class="text-input" type="text" name="beskrivelse_nu" value="<? print $mat->beskrivelse; ?>"></td> 
     <td><input style="width:60px;" class="text-input" type="text" name="enhed_nu" value="<? print $mat->enhed; ?>"></td> 
     <td><input style="width:30px;" class="text-input" type="text" name="stk_nu" value="<? print $mat->stk; ?>"></td> 
     <td><input style="width:205px;" class="text-input" type="text" name="vejl_eks_moms_nu" value="<? print number_format($mat->vejl_eks_moms,2,",","."); ?>"></td> 
     <td></td> 
     <td><a href="#" onclick="removeRow(this)" id="addNew" title="Slet produkt"><img src="images/icons/slet.gif" width="16" alt="Slet" /></a></td> 

     <input hidden name="materiale_id" value="<? print $mat->materialer_id; ?>"> 
    </tr>      
    <? 
} 
?> 

我希望能够更新一个页面中的每个材料。我试图解决这个问题,甚至在while循环中添加了一个隐藏的输入字段,其中包含每个材质ID。这是我当前如何更新表:

$beskrivelse_nu   = addslashes($_POST['beskrivelse_nu']); 
$enhed_nu    = addslashes($_POST['enhed_nu']); 
$stk_nu     = addslashes($_POST['stk_nu']); 
$vejl_eks_moms_nu  = addslashes($_POST['vejl_eks_moms_nu']); 

$db->query("UPDATE faktura_materialer 
    SET beskrivelse   = '".$beskrivelse_nu."', 
    enhed     = '".$enhed_nu."', 
    stk      = '".$stk_nu."', 
    vejl_eks_moms   = '".$vejl_eks_moms_nu."' 

    WHERE id    = '".$_POST['materiale_id']."' AND 
    faktura_id    = '".$_faktura->faktura_id."' 
"); 

每次我更改输入领域的东西,它只是每一行更改为相同.. 我希望你们都明白我想要什么:)

+0

所有输入字段和表名是丹麦数百场 - 对不起。 –

+0

您是否尝试更新表格中的每条记录? –

+0

我试图编辑指定发票的记录。但它只是将表格中的所有行更改为相同的.. –

回答

0

因为您通过循环生成字段,最终会生成多组字段,并且字段名称相同。 换句话说,如果你的​​3210返回4行,那么你的HTML将有4次<input hidden name="materiale_id" value="<? print $mat->materialer_id; ?>"> ...

如果你真的需要在同一页上的所有字段,那么你就可以做到这一点有两种方式:

第一个选项。您可以为每行创建单独的表单。并分别提交。

while($mat = $materialer_query->fetch_object()){ 
?> 
<form action="--somewhere-to-process--" method="post"> 
<table><tr> 
    <td><input style="width:450px;" class="text-input" type="text" name="beskrivelse_nu" value="<? print $mat->beskrivelse; ?>"></td> 
    <td><input style="width:60px;" class="text-input" type="text" name="enhed_nu" value="<? print $mat->enhed; ?>"></td> 
    <td><input style="width:30px;" class="text-input" type="text" name="stk_nu" value="<? print $mat->stk; ?>"></td> 
    <td><input style="width:205px;" class="text-input" type="text" name="vejl_eks_moms_nu" value="<? print number_format($mat->vejl_eks_moms,2,",","."); ?>"></td> 
    <td></td> 
    <td><a href="#" onclick="removeRow(this)" id="addNew" title="Slet produkt"><img src="images/icons/slet.gif" width="16" alt="Slet" /></a> 
<input type="submit" value="Update"> 
</td> 

    <input hidden name="materiale_id" value="<? print $mat->materialer_id; ?>"> 
</tr></table> 
</form>      
<? 
} 

第二个选项是您创建一个表单,但每个字段名称在整个表单中都是唯一的。 事情是这样的:

while($mat = $materialer_query->fetch_object()){ 
?> 
<tr> 
    <td><input style="width:450px;" class="text-input" type="text" name="faktura[<?=$mat->faktura_id?>][beskrivelse_nu]" value="<? print $mat->beskrivelse; ?>"></td> 
    <td><input style="width:60px;" class="text-input" type="text" name="faktura[<?=$mat->faktura_id?>][enhed_nu]" value="<? print $mat->enhed; ?>"></td> 
    <td><input style="width:30px;" class="text-input" type="text" name="faktura[<?=$mat->faktura_id?>][stk_nu]" value="<? print $mat->stk; ?>"></td> 
    <td><input style="width:205px;" class="text-input" type="text" name="faktura[<?=$mat->faktura_id?>][vejl_eks_moms_nu]" value="<? print number_format($mat->vejl_eks_moms,2,",","."); ?>"></td> 
    <td></td> 
    <td><a href="#" onclick="removeRow(this)" id="addNew" title="Slet produkt"><img src="images/icons/slet.gif" width="16" alt="Slet" /></a> 
<input type="submit" value="Update"> 
</td> 

    <input hidden name="faktura[<?=$mat->faktura_id?>][materiale_id" value="<? print $mat->materialer_id; ?>"> 
</tr> 
<? 
} 

这样你$_POST[faktura]将是一个关联数组faktura-ID键及其更新后的值。 滚动数组并更新每个数组中的数据库。

请记住,在一个表单域的数量是有限的。因此,确保不具有形式:)

+0

但是,如果我与第二个选项一起去查询应该如何? :) –

+0

初始查询不会更改。它已经拥有所有行的所有数据。只要确保一切都通过了帖子。 – cyadvert

+0

是的,但不应该查询传递数组而不是仅仅一个POST? –