2016-09-14 1 views
3

내 문제에 대한 다른 해결책이있는 사람이 있습니까?첫 번째 양식 제출 행 삽입 후속 제출 동일한 행을 업데이트하십시오.

제출 버튼을 처음 클릭하면 MYSQL 데이터베이스에 행을 삽입하려고합니다. 그러나이 양식은 오류 항목을 확인하므로 오류가 발견되면 사용자는 제출 단추를 다시 클릭해야합니다. 이제 데이터베이스의 행을 업데이트하려고합니다.

저는 이것을 달성하기 위해 세션 변수를 사용하고 있었지만 웹 사이트가 Realex 지불 게이트웨이를 사용하기 때문에 지금은 코드가 자신의 사이트에 있으므로 지불이 성공하면 세션을 해제 할 방법이 없습니다. 그래서 여기

은 내가 가진 것입니다 :

if(!isset($_SESSION['jid']))  
{     
$sql = "INSERT INTO ..."; 
      $result = $db->query($sql); 
      if($result === false) 
       sql_failure_handler($sql, $db->error); 
      $jid = $db->insert_id; 
      $_SESSSION["jid"] = $jid; 
     } 
     else  
     { 
      $sql = "UPDATE ... WHERE ID = '$_SESSION['jid']"; 
      $result = $db->query($sql); 
      if($result === false) 
       sql_failure_handler($sql, $db->error); 
     } 
     } 

이 코드는 내가 필요한 아이디어를 제공하는 것입니다.

if(empty($_POST['jid'])) // insert on first click of one of the buttons 
     {     
      $sql = "INSERT INTO table ..."; 
      $result = $db->query($sql); 
      if($result === false) 
       sql_failure_handler($sql, $db->error); 
      $jid = $db->insert_id; 
     } 
     else 
     { 
      $sql = "UPDATE table SET ... WHERE ID = '" . $db->real_escape_string($_POST['jid']) . "'"; 
      $result = $db->query($sql); 
      if($result === false) 
       sql_failure_handler($sql, $db->error); 
     } 

을 다음 숨겨진 변수가 있지만이 작동하지 않을 수 :

나는 게시물 변수를 사용하여 생각했다. 처음에는 jid 값을 설정하는 jquery일까요?

답변

0

숨겨진 필드는 좋은 옵션입니다. PHP에서

<input type="hidden" name="jid" value="" id="jid"> 

:

은 양식에 빈 숨겨진 필드를 포함합니다. $ _POST [ 'JID는'] 비어있는 경우, 새 행을 삽입하고 새로 생성 된 행의 ID로 응답을 반환 : 클라이언트에

$sql = "INSERT INTO table..."; 
$result = $db->query($sql) or die('Errant query: '.$sql); 
$newid = $db->insert_id; 
header('Content-type: application/json'); 
echo '{"message":"new field added", "id":"'.$newid.'"}'; 

를 성공적으로 게시합니다. 즉

$('#jid').val(response.id) 

이후 게시물이 이제 JID가됩니다 숨겨진 필드의 값을 업데이트

또 다른 옵션 : 없음 삽입하면 ID가 이미 DB에있는 경우 PHP에서

이 확인하는 경우 예 업데이트.

$sql = "SELECT id FROM table WHERE id = '$jid' LIMIT 1"; 
$result = $db->query($sql) or die('Errant query: '.$sql); 
$row_cnt = $result->num_rows; 

if($row_cnt > 0){ 
    UPDATE 
} 
else{ 
    INSERT 
}