1

我有一个用 HTML 创建的表单。有时,我们的代表需要回来编辑他们之前输入表格的数据。我已经设置了他们可以输入 OrderForm ID(例如 1234)的位置,它将相应地填充字段。我希望他们能够更新或更改字段,然后当他们点击提交时,它将创建一个附加 .1 的新数字(1234.1),并更新 MySQL 数据库。

我已经能够创建表单、填充搜索字段,但不知道如何更新和分配“.1”给表单 ID。

这是我的代码:

<?php

$connection = mysql_connect('localhost','username','*******') or die ("Couldn't connect to server."); 
$db = mysql_select_db('DBName', $connection) or die ("Couldn't select database.");

// -------------------------------------------------------------------
// Field Names
// -------------------------------------------------------------------

$drepid=mysql_real_escape_string($_POST['drepid']);
$datepicker=mysql_real_escape_string($_POST['datepicker']);
$repemail=mysql_real_escape_string($_POST['repemail']);
$dateneeded=mysql_real_escape_string($_POST['dateneeded']);
$description=mysql_real_escape_string($_POST['description']);
$qty=mysql_real_escape_string($_POST['qty']);
$pgsizeh=mysql_real_escape_string($_POST['pgsizeh']);
$pgsizew=mysql_real_escape_string($_POST['pgsizew']);
$pageno=mysql_real_escape_string($_POST['pageno']);
$stock=mysql_real_escape_string($_POST['stock']);
$ink=mysql_real_escape_string($_POST['ink']);
$inknote=mysql_real_escape_string($_POST['inknote']);
$rfq=mysql_real_escape_string($_POST['rfq']);
$finishing=mysql_real_escape_string($_POST['finishing']);
$dfirstname=mysql_real_escape_string($_POST['dfirstname']);
$dlastname=mysql_real_escape_string($_POST['dlastname']);
$dorganization=mysql_real_escape_string($_POST['dorganization']);
$email=mysql_real_escape_string($_POST['email']);
$daddress1=mysql_real_escape_string($_POST['daddress1']);
$daddress2=mysql_real_escape_string($_POST['daddress2']);
$dcity=mysql_real_escape_string($_POST['dcity']);
$dstate=mysql_real_escape_string($_POST['dstate']);
$dzip=mysql_real_escape_string($_POST['dzip']);
$phone=mysql_real_escape_string($_POST['phone']);
$fax=mysql_real_escape_string($_POST['fax']);
$proof=mysql_real_escape_string($_POST['proof']);
$whoproof=mysql_real_escape_string($_POST['whoproof']);
$quote=mysql_real_escape_string($_POST['quote']);
$amount=mysql_real_escape_string($_POST['amount']);
$delivery=mysql_real_escape_string($_POST['delivery']);
$notes=mysql_real_escape_string($_POST['notes']);

$data = "UPDATE DB_Table SET drepid='$drepid', datepicker='$datepicker', repemail='$repemail', dateneeded='$dateneeded', description='$description', qty='$qty', pgsizeh='$pgsizeh', pgsizew='$pgsizew', pageno='$pageno', stock='$stock', ink='$ink', inknote='$inknote', rfq='$rfq', finishing='$finishing', dfirstname='$dfirstname', dlastname='$dlastname', dorganization='$dorganization', email='$email', daddress1='$daddress1', daddress2='$daddress2', dcity='$dcity', dstate='$dstate', dzip='$dzip', phone='$phone', fax='$fax', proof='$proof', whoproof='$whoproof', quote='$quote', amount='$amount', delivery='$delivery', notes='$notes' WHERE drfq=.$drfq";
$query = mysql_query($data) or die("Couldn't execute query\"$data\" Error:" . mysql_error()); 
?>
4

2 回答 2

1
  • 你永远不会更新一行,你将永远插入一个新行
  • 如果多人同时使用系统,你如何处理冲突?如果 A 加载记录,B 加载记录,A 保存更改并且... B 覆盖这些更改,会发生什么情况
  • 您的 id 字段是小数(数字)还是字符串?假设您正在多次编辑记录 1004。当达到记录 1004.9 时会发生什么,您是否递增到 1004.10(在数学上相当于 1004.1)。您如何对 ID 进行排序?您如何确定哪个 ID 是“最后一次”更新?

另一种可能值得考虑的方法是使用历史表。基本上,您将原始表保留为每条记录一条记录,并在历史记录表中跟踪所做的更改、日期、用户 ID。通过这种方式,您可以重建任何先前版本的记录。冲突也可以相当容易地解决。您还可以使用您想要的任何伪十进制表示法来呈现记录的每个版本,而不会出现排序问题。

于 2013-01-29T15:00:37.550 回答
0

另一种方法是像其他答案一样添加几个字段。添加一个名为 deleted 的字段和一个 child_id/parent_id 字段或类似的东西。当用户修改记录时,将记录标记为已删除并复制记录(不设置已删除字段)并将 parent_id 设置为父记录。添加到代码以进行更新等,您只需要搜索未删除的记录。而且还允许您查看一段时间内记录的更改。

于 2013-01-29T15:11:34.293 回答