2011-02-02 2 views
0

これは簡単な問題です。私は顧客やベンダーに関連するPHPプロジェクトに取り組んでいます。データベースからcustomeridを選択すると、その顧客の未払い請求書が自動的に表に移入されるため、表には小切手、請求書番号、請求額、支払額、および「削除」列が含まれます。ラベル値または表のセル値またはPHPの隠しテキスト値

このリンクを削除すると、その行が削除されるため、一部の請求書に対してのみ支払いが可能です。 (未払いの手形が5枚ある場合は、3枚の手形を取り除き、他の2枚の手形のデータを入力することができます)。ここでは、ラベルとしてbillnobillamountを表示し、額を入力するためのテキストボックスとして支払い金額を表示します。いくつかの行が削除される可能性があるので、billnoをサーバーに送信する必要があります。 PHPの$_POSTはラベルを認識しません。私はtdのID(テーブルセルID)と入力タイプ "hidden"で試しましたが、うまくいきませんでした。これを行う方法を提案できますか?

表コード:

<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値を投稿することはできませんよ

は、ここに私のコードです。そんなことをする方法はありますか?ラベルには読み取り専用の値が必要なので、それらをサーバーに戻す必要があります。前もって感謝します。
編集

私はAjaxRequestHandlerページでは、この

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

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

のようなAJAXリクエストを送信しています。この問題を回避する

 $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"; 
+0

前の質問に戻って助けてください。あなたが以前の質問に助けを必要としていて、十分な牽引力が得られない場合は、chat.stackoverflow.com/rooms/5/the-so-tavern-generalにアクセスして質問にお答えください。ここのコミュニティは、質問を解決して受け入れていることを示しているので、将来の質問者はあなたのために働いたものを見て、自分の質問をする必要はありません。私は助けてうれしいです。 – jcolebrand

+0

@Drachensternリンク – jony

答えて

2

私はあなたがやろうとしているものを理解していた場合は、その後、ここに私の提案です:

変更

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

へ:$row['id']は、このデータベースの実際のIDです

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

行。そのように、POSTデータが入ってくるとき、あなたは次のように支払っているかの行を知ることができるようになります:

<?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で送信されないため、更新されません。

それは意味がありますか?

+0

ありがとう。しかし、私はこれを理解することができません、私はdb2を使用しています、そしてどこからこの行['id']を取得しましたか、もう少し詳しく説明できますか?事前に感謝し、問題を編集していただきありがとうございます。 – jony

+0

@jony:あなたの質問を編集し、データベースからデータをどのように選択しているかについてのコードを共有してください。 – Josh

+0

私はあなたのために必要な情報を追加しました、plsはそれを見ています。ありがとう。 – jony

1

一つの方法は、の行を削除することではありませんとにかく悪い練習である支払われた請求書。どうしてあなたは支払われた法案の記録を削除していますか...問題が発生し、過去の支払いを確認する必要がある場合はどうなりますか?代わりに、私はテーブルに "有料"の列を追加し、支払いが完了すると値を0から1に変更します。その後、ラベルをサーバーに送り返す必要はなく、有料サイトに表示するために、支払い済みの値が0の請求書のデータを取り出すことができます。

+0

のおかげでこれは "会計"と呼ばれています;)...真剣に言って、私は同意して、二重入帳会計についてもっと知り合うようOPに勧めます。 – jcolebrand

+0

私は*彼が '

'行を削除することを話していると思います。しかし、私は間違っている可能性があります... – Josh

+0

@ジョシュ - あなたは正しい、ちょうど私がデータベースからテーブルから行を削除しています。応答のために – jony

関連する問題