UPDATE用于HTML表单和php的语法

时间:2013-01-29 14:25:31

标签: php mysql sql-update

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

我已经能够创建表单,填充搜索字段,但无法弄清楚如何更新并为表单ID分配“.1”。

这是我的代码:

<?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()); 
?>

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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