1

ちょっと変わった状況です。送信を追跡するサイトを構築しています。私の Web サイトでは、無限の数の「送信」または「請求書」をテーブルに挿入できます。これは AJAX を使用して行われます。

レコードが挿入されると、ページに表示され、ユーザーはレコードを更新または削除することができます。

私の問題は、レコードが挿入されてポストバックされると、レコードがテーブルから取得した ID がわからないため、更新機能が正しく機能しないことです。ユーザーがレコードを挿入すると乱数が挿入され、これが更新機能のためにポストバックされる隠しフィールド「ランダムキー」を追加しようとしましたが、機能していないようです。

これを実行する最善の方法について誰か考えがありますか?

ありがとう

私のコード...

PHPフォーム

 <form id='bill-upd'>
     <input type='hidden' value='".$info['rand']."' name='rand2' id='rand2'>
     <input type='hidden' value='".$info['id']."' name='billid' id='billid'>
     Total <input type='text' id='total' name='total' /><br />
     Bill name<input type='text' id='bill-name' name='bill-name' /><br />
     Bill descriptiion <input type='text' id='bill-description' name='bill-description' /><br />
     Bill colour<input type='text' id='bill-colour' name='bill-colour' />
     <input type='button' value='submit' onClick='updateBill();' />
 </form>   

PHPページを更新

   $uid = $_SESSION['oauth_id'];
   $id = mysql_real_escape_string($_POST['billid']);       
   $bill = mysql_real_escape_string($_POST['total']);
   $billname = mysql_real_escape_string($_POST['bill-name']);
   $billdescription = mysql_real_escape_string($_POST['bill-description']);
   $billcolour  = mysql_real_escape_string($_POST['bill-colour']);
   $rand = mysql_real_escape_string($_POST['rand2']);



        #update Record
       $query = mysql_query("UPDATE `outgoings` SET id = '$id', user_id = '$uid', bill = '$bill', bill_name = '$billname', bill_description = '$billdescription', bill_colour = '$billcolour', rand = '$rand' WHERE user_id = '$uid' AND rand = '$rand' ") or die(mysql_error());
4

2 に答える 2

1

新しいレコードの挿入中に、テーブルから新しく追加されたID (各レコードに一意の ID があると仮定) を取得し、ajax 呼び出しの後に返される結果の一部としてそれを返します。次に、その ID を使用してレコードを更新できます。

以下のスクリプトを使用して、更新する詳細を更新ページに送信できます。

$("#bill-upd").submit(function(e){
   e.preventDefault();

     $.post("update.php",{ 
                     billid: $("#billid").val()
                     total: $("#total").val();
                     bill-name : $("#bill-name").val();
                     bill-description :  $("#bill-description").val();
                     bill-color: $("#bill-color").val();
                     },
                     function(result){
                        //Update / Show a message to user about the action. 
                        //alert(result);   
                     });    
     });
  });

update.php ページで、クエリを次のように変更します。

$query = mysql_query("UPDATE `outgoings` user_id = '$uid', bill = '$bill', bill_name = '$billname', bill_description = '$billdescription', bill_colour = '$billcolour', rand = '$rand' WHERE id = '$uid' AND rand = '$id' ") or die(mysql_error());

ID は、テーブル レコードの更新に使用できるテーブル内の一意の ID / プライマリ キーであると仮定します。

于 2012-04-21T19:54:30.787 に答える
1

INSERTクエリを使用する場合、mysql_insert_id()AUTO_INCREMENTを使用して、挿入された行用に作成されたフィールドの値を取得できます。これを JSON で送り返すことができるので、Javascript は新しく挿入された行の ID を認識します。ただし、別のユーザー (別のブラウザーを使用) がページを開いている間に別のユーザーが行を追加した場合、Javascript は新しい行を取得しません。例:

ユーザー 1がページを読み込み、行が表示されません。
ユーザー 1が行 #1 を追加します。
ユーザー 2がページをロードすると、行 #1 が表示されます。
ユーザー 2が行 #2 を追加すると、行 #1、2 が表示され
ます ユーザー 1が行 #3 を追加しますが、行 #1、3 のみが表示されます

これで、ユーザー 2には行 #1,2 のみが表示されます

SELECT * from tableすべてのクエリの後に、すべての行 (他のユーザーが挿入した可能性のある行を含む) があることを確認する必要があります。PDOの使用も検討する必要があります。

于 2012-04-21T19:58:29.567 に答える