我是新手,但我試圖將這件事情放在一起。更新表單根據所選行提交
我正在嘗試構建一個計費系統。在數據庫中,每張發票都有一個包含發票日期,截止日期等項目的PK。我有另一張表列出了兩個表中的發票ID之間的關係(itemID是PK)。我的問題是與物品表。
如果發票上只有一個項目,我可以更新記錄。但是,我的問題是,當我有多個條目時,我只能編輯該行中的最後一個條目。
下面是我的表看起來像一個例子。綠色箭頭表示項目列表中的最後一行(我可以更新);紅色箭頭表示我無法更新的行。
正如你所看到的,我能夠拿到個人ITEMID到一個變量旁顯示的形式提交按鈕:
<td>
<input type="submit" name="submit_items" value="Submit" />'
.$row->item_id.'
</td>
我想知道我將如何「連接」 /「副」單個項目的ID,所以它會運行相應的MySQL。例如,當我單擊itemID 4164的提交按鈕時,我正在查找MySQL查詢以更新itemID行4164.目前,我的代碼僅更新最後一個itemID。
下面是MySQL數據庫的查詢,它能夠更新最後一個項目:
UPDATE o70vm_invoices_items SET
invoice_id = $invoiceID,
name = '$program',
`desc` ='$forWeek',
value = $value,
amount = $qty
WHERE id=$id
我試圖改變WHERE語句來此:
WHERE id=".$row->item_id.""
但是,不顯示任何項目。我覺得我非常接近。一直工作了幾天。如果有辦法改變代碼以自動獲取表單提交按鈕所在位置的行ID,那麼我將是完成此項目的又一步。我自己似乎無法完成的一步。謝謝,如果有人在傾聽。 :)
有關如何處理此操作的任何建議,非常感謝。
這裏是我完整的代碼,萬一有很多問題我還沒有足夠的細節回答:
$queryItems = "select
o.`id` as 'item_id',
o.`invoice_id` as 'invoice_id_on_items',
o.`name` as 'program',
o.`value` as 'fee',
o.`amount` as 'qty',
o.`desc` as 'forweek',
group_concat(o.`desc` separator ' & ') as 'forweekgroup',
round(sum((o.`value`) * (o.`amount`)),2) as 'inv-total'
from `o70vm_invoices_items` o
where o.`invoice_id` = $invoiceSelected
GROUP BY o.id";
// storing the result of this MySQL query
$resultItems = mysql_query($queryItems);
echo'
<form action="" method="post">
<div>';
echo "<h2>Invoice Items</h2>";
if($resultItems){
echo '
<table>
<tr>
<th scope="col">Invoice ID</th>
<th scope="col">Item ID</th>
<th scope="col">For Services Rendered</th>
<th scope="col">Program</th>
<th scope="col">Fee</th>
<th scope="col">Quantity</th>
<th scope="col">Total Fees</th>
<th scope="col">Edit</th>
</tr>';
$id=0; /* Each field/element that has an id must have a unique id ~ use a counter to achieve this */
$Invoice_Amount=0.00;
while($row = mysql_fetch_object($resultItems)){
$id++;/* Increment the id counter */
echo '
<tr>
<td>'.$row->invoice_id_on_items.'</td>
<input type="hidden" title="'.$row->invoice_id_on_items.'" name="invoice_id" size="10" id="invoice_id" value="' . $row->invoice_id_on_items. '" />
<td>'.$row->item_id.'</td>
<input type="hidden" title="'.$row->item_id.'" name="id" size="13" id="id" value="'.$row->item_id. '" />
<td>
<input type="text" title="'.$row->forweek.'" name="desc" size="15" id="desc" value="' . $row->forweek. '" />
</td>
<td>
<input type="text" title="'.$row->program.'" name="name" size="50" id="name" value="' . $row->program. '" />
</td>
<td>
<input type="number" title="'.$row->fee.'" name="value" size="3" id="value" value="' . $row->fee. '" />
</td>
<td>
<input type="number" title="'.$row->qty.'" name="amount" size="3" id="amount" value="' . $row->qty. '" />
</td>
';
$Fee = floatval($row->fee);
$Qty = floatval($row->qty);
$ItemFee=$Fee*$Qty;
echo '
<td>
<input type="text" title="'.$ItemFee.'" name="total_fee" size="3" id="total_fee" value="' . $ItemFee. '" />
</td>
<td>
<input type="submit" name="submit_items" value="Submit" />'
.$row->item_id.'
</td>
</tr>';
$Invoice_Amount+=$ItemFee;
}
echo '
<tr>
<td colspan=6></td>
<td>$'.$Invoice_Amount.'</td>
</tr></table>
</div>
</form>';
} else {/* Do not give away too much information and degrade gracefully */
echo "We can't seem to pull the data information on this one, baby. Sorry. Code must be wrong.";
echo "Error:".mysql_error();
}
/*
EDIT RECORD START
*/
// get variables from the URL/form
$id = $_POST['id'];
$invoiceID = htmlentities($_POST['invoice_id'], ENT_QUOTES);
$program = htmlentities($_POST['name'], ENT_QUOTES);
$forWeek = htmlentities($_POST['desc'], ENT_QUOTES);
$value = htmlentities($_POST['value'], ENT_QUOTES);
$qty = htmlentities($_POST['amount'], ENT_QUOTES);
//NOTE: desc is a MySQL reserved word so we need to `desc`
$stmt = "UPDATE o70vm_invoices_items SET
invoice_id = $invoiceID,
name = '$program',
`desc` ='$forWeek',
value = $value,
amount = $qty
WHERE id=$id";
你的代碼只更新了最後一排,因爲你的所有輸入字段爲每個錶行相同的名稱,因此他們互相覆蓋其他情況下,PHP從POST數據中提取它們。但即使你解決了這個問題,單擊一個提交按鈕仍然會提交整個表單,從而提供_all_行的數據。如果只想更新單個行,則應使用單獨的表單,每行一個。 (但是請記住,'form'元素只能放在'table'的周圍,或者放在HTML中的'td'中 - 你不能在表格行中放置它。) – CBroe
謝謝。點擊一下就可以更新所有的行。關於如何讓每行在MySQL語句中有不同的變量的任何建議?我知道你可能沒有時間來編寫代碼,所以一兩個可以幫助我理解如何做到這一點的鏈接將會如此讚賞。 – kentrenholm
您可以使用輸入字段名稱,例如'name =「id []」''''name =「desc []」'等 - 然後您將在您的PHP腳本中獲取數組值。 ('var_dump($ _ POST);'有助於理解你將得到的數據的確切結構。) – CBroe