2012-04-21 12 views
1

私はちょっとした不思議な状況があります。私のサイトでは、アウトゴーイングを追跡するサイトを構築しています。私のウェブサイトでは、私のテーブルに、これはAJAXを使って行われます。PHP/AJAXでdb行を追加して更新する

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

私の問題は、レコードが挿入されてポストバックされたときに、レコードがそのテーブルに何の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> 

UPDATEの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()); 

答えて

1

新しいレコードを挿入しながら、が新しくを追加取得 id(テーブルから各レコードの一意のIDを持っていると仮定して、結果の一部としてAjax呼び出しの後に戻ってきます。次に、そのIDをレコードの更新に使用できます。

あなたがIDを想定すると、この

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

のようなあなたのクエリを変更、更新ページ

$("#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をページ内に更新するための詳細を送信するには、以下のスクリプトを使用することができますテーブルレコードを更新するために使用できる、テーブル内の一意のID /主キーです。

+0

どのように私はそのShyjuをやるのだろうか?各レコードは固有のIDを持っています。 – Liam

+0

@Liam:私の更新された答えを見てください。 – Shyju

+0

文法エラーが発生する@shyju – Liam

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の使用を検討する必要があります。

+0

私はPHP/AJAXの新機能ですので、私のAJAXページ内で100%確信しているわけではありません。データをポストバックしますか? – Liam

+0

はい。他のユーザーが行を挿入している可能性があるため、すべての行を定期的に 'SELECT'する必要があります。 –

関連する問題