在php中发布标签值或表格单元格值或隐藏文本值

时间:2011-02-02 16:32:37

标签: php javascript html

这是一个简单的问题。我正在开发一个与客户和供应商相关的PHP项目。当我从数据库中选择customerid时,该客户的未付帐单会自动填入表格中,因此该表格包含支票,帐单编号,帐单金额,付款金额和“删除”列。

此删除链接将删除该行,以便我只需支付一些账单。 (如果我有5张未付账单,我可以删除3张账单并输入其他2张账单的数据)。在这里,我想将billnobillamount显示为标签,将付款金额显示为输入金额的文本框。我需要将billno发布到服务器,因为我可能会删除一些行。但PHP的$_POST无法识别标签。我尝试使用td id(表格单元格ID)和输入类型“隐藏”,但这不起作用。你能建议一种方法吗?

这是我的代码:

表格代码:

    <TABLE id="mytable1">
     <tr>
     <th>Select</th>
     <th>Bill No</th>
     <th>Bill Amount</th>
     <th>Received Amount</th>
     <th>Remove</th>
     </tr>
  <TR>
  <td ><INPUT type="checkbox" name="chk[]" ></td>        
  <td ><label id="labelidinv"></label><input type="hidden" name="invhide[]" value="12" ></td>
  <TD><label id="labelidinvamt"></label> </TD>
  <TD><input name="receivedamt[]" type="text" size="6" id="receivedamt" ></TD>
  <td> <a href="#" onClick="deleteRowReceipt('mytable1')">Remove </a> </td>
  </TR>
</table>

Ajax代码:

    var inv_id = xmlDoc.getElementsByTagName("inv_id");
    var inv_amt = xmlDoc.getElementsByTagName("inv_amt");
    var count = xmlDoc.getElementsByTagName("count");
    var inv_id_desc = inv_id[0].firstChild.nodeValue;
    var inv_amt_desc = inv_amt[0].firstChild.nodeValue;
    var countdesc = count[0].firstChild.nodeValue;

   document.getElementById('labelidinv').innerHTML =inv_id_desc;
   document.getElementById('labelidinvamt').innerHTML=inv_amt_desc;                                                                                      
             var table = document.getElementById('mytable1');
                    for(var j=1;j<countdesc;j++)
                    {
                        var rowCount = table.rows.length;
                        var row = table.insertRow(rowCount);
                        var colCount = table.rows[0].cells.length;

                        for(var i=0; i<colCount; i++)
                        {

                  var newcell = row.insertCell(i);
                           newcell.innerHTML = table.rows[1].cells[i].innerHTML;
                              if(i==1)
                               newcell.innerHTML =   inv_id[j].firstChild.nodeValue;                
                              if(i==2)
                                newcell.innerHTML= inv_amt[j].firstChild.nodeValue;

                        }
                    }

此处我无法发布标签ID值。有没有办法这样做?我想要标签中的只读值,我需要将它们发回服务器。提前致谢。
编辑

我发送像这样的ajax请求

 var custname = document.getElementById('customer').options[document.getElementById('customer').selectedIndex].value;

 xmlhttp.open("POST","../MODEL/AjaxRequestHandler.php?action=custdetails&CUST_NAME="+custname,true)

在AjaxRequestHandler页面:

        $CUST_NAME = $_GET['CUST_NAME'];
        $querry1 = "select * from RECEIVABLES where CUSTOMER_NAME = $cust_name and FULL_PART_PAID !='F' and voucher_type='SI' ";
/*full_part_paid column is whether that bill fully paid or not, and voucher type = "Sales invoice"*/
        $res1 = odbc_exec($conn,$querry1);
        $i = 0;
        echo '<?xml version="1.0" encoding="utf-8"?>'."\n";
                echo '<XmlResponse>'. "\n";
                while(odbc_fetch_row($res1))
                {
                    $inv_id= odbc_result($res1, "invoice_id");
                    echo '<inv_id>'.$inv_id.'</inv_id>'. "\n";
                    $inv_amt = odbc_result($res1,"invoice_amount");
                    echo '<inv_amt>'.$inv_amt.'</inv_amt>'. "\n";
                    $i++;

                }
                echo '<count>'.$i.'</count>'."\n";

        echo '</XmlResponse>'. "\n";

2 个答案:

答案 0 :(得分:2)

如果我理解你想要做什么,那么这是我的建议:

更改

<input name="receivedamt[]" type="text" size="6" id="receivedamt">

为:

<input name="receivedamt_<?= $row['id'] ?>" type="text" size="6" id="receivedamt_<?= $row['id'] ?>">

其中$row['id']是此数据库行的实际ID。这样,当postdata进入时,您将能够知道支付的行如下:

<?php

foreach($_POST as $key => $value) {
    $key_parts = explode('_',$key);
    if($key_parts[0] == 'receivedamt' && !empty($value) {
      $id = intval($key_parts[1]);
      $amt = doubleval($value);
      mysql_query("UPDATE `some_table` SET `receivedamt`=$amt WHERE `id`=$id");
    }
}

这样,您甚至不必担心复选框或删除行。只需将您不想支付的任何款项留空,服务器就不会更新它们。或者,如果您愿意,可以从DOM中删除行,服务器仍然不会更新它们,因为它们不会在$_POST中发送。

这有意义吗?

答案 1 :(得分:1)

解决这个问题的一种方法是不删除付费账单的行,这无论如何都是不好的做法。为什么要删除已支付账单的记录...如果出现问题并且您需要确认过去的付款怎么办?相反,我会在表中为“付费”添加一列,并在付款时将值从0更改为1。然后,您不必将标签发送回服务器,只需提取“付费”值为0的帐单数据,以便在付费网站上显示。