1

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

2 に答える 2

1
  • 行を更新することはありません。常に新しい行を挿入します。
  • 複数の人が同時にシステムを使用している場合、競合にどのように対処しますか? 人 A がレコードを読み込み、人 B がレコードを読み込み、人 A が変更を保存し、人 B がそれらの変更を上書きするとどうなるか
  • ID フィールドは 10 進数 (数値) ですか、それとも文字列ですか? レコード 1004 を何度も編集しているとします。レコード 1004.9 に達した場合、1004.10 (数学的には 1004.1 に相当) にインクリメントしますか? IDはどのように並べ替えますか?どの ID が「最後の」更新であるかをどのように判断しますか?

検討する価値のあるもう 1 つのアプローチは、履歴テーブルを使用することです。基本的に、レコードごとに 1 つのレコードで元のテーブルを保持し、変更、日付、ユーザー ID を履歴テーブルで追跡します。この方法で、以前のバージョンのレコードを再構築できます。競合もかなり簡単に解決できます。また、レコードの各バージョンを任意の疑似 10 進数表記で表示することもでき、並べ替えに問題はありません。

于 2013-01-29T15:00:37.550 に答える
0

これに関する別のアプローチは、他の回答のようにいくつかのフィールドを追加することです。削除されたというフィールドと、child_id/parent_id フィールドなどを追加します。ユーザーがレコードを修正する場合、レコードを削除済みとしてマークし、レコードを複製して (削除済みフィールドを設定せずに)、parent_id を親レコードに設定します。更新などのコードに追加し、削除されていないレコードのみを検索する必要があります。また、一定期間にわたるレコードの変更を確認することもできます。

于 2013-01-29T15:11:34.293 に答える