2012-04-21 2 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> 

업데이트 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가 있다고 가정하고 결과의 일부로 반환하면 아약스 호출 후에 반환됩니다. 그런 다음 해당 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

어떻게 그 주주를 할 수 있습니까? 각 레코드는 고유 한 ID를 가짐 yes – Liam

+0

@Liam : 업데이트 된 답변보기. – Shyju

+0

구문 오류가 발생합니다. @shyju – Liam

1

INSERT 쿼리를 사용하면 mysql_insert_id()을 사용하여 삽입 된 행에 대해 생성 된 AUTO_INCREMENT 필드의 값을 가져올 수 있습니다. Javascript가 새로 삽입 된 행의 ID를 인식 할 수 있도록 JSON으로 다시 보낼 수 있습니다. 그러나 다른 사용자가 다른 브라우저를 사용하여 다른 사용자가 페이지를 열었을 때 행을 추가하면 Javascript는 새 행을 가져 오지 않습니다. 예 :

사용자 1 페이지가로드되고 행이 표시되지 않습니다.
사용자 1은 행 # 1을 추가합니다.
사용자 2은 페이지를로드하고 행 # 1을 봅니다.
사용자 2이 행 2에 추가하고 지금보고 행 # 1,2
사용자 1은 행 # 3을 추가, 만보고 행 # 1,3

그리고 지금 사용자 2 만 볼 수 rows # 1,2

모든 쿼리 (다른 사용자가 삽입 한 행 포함)가 있는지 확인하기 위해 모든 쿼리를 수행 한 후에 실제로는 SELECT * from table이어야합니다. PDO도 고려해야합니다.

+0

Im은 PHP/AJAX의 새로운 기능이므로 100 % 확신 할 수 없습니다. AJAX 페이지 내에서 select all query를 실행할 수 있습니까? 그런 다음 데이터를 다시 게시 하시겠습니까? – Liam

+0

예. 다른 사용자가 행을 삽입 할 가능성이 있기 때문에 주기적으로 모든 행을'SELECT'해야합니다. –

관련 문제