티스토리 뷰

반응형

php에서 키값을 서버에 저장하고 관리한다.

서버 받아주는 곳 :

isset($_REQUEST["originNum"])  ? $originNum = $_REQUEST["originNum"] :   $originNum=""; 

xmlgrid을 임시키 부여한 곳에 복사하려고 할때, sql 이용해서 db의 값 복사

'parentKey'가 'num'과 같은 데이터를 임시번호 'aaaa'의 'parentKey'로 데이터 전체를 복사하는 코드

require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();

$tmp_spec = "";

try {
  $pdo->beginTransaction(); // 트랜잭션 시작

  // 'parentKey'가 'num'과 같은 데이터를 선택하는 쿼리문
  $sql_select = "SELECT * FROM dbeunsungbiz.xmlgrid WHERE parentKey = 'num'";
  $stmh_select = $pdo->prepare($sql_select);
  $stmh_select->execute();

  // 선택된 데이터들을 복사하는 쿼리문
  $sql_insert = "INSERT INTO dbeunsungbiz.xmlgrid (parentKey, childKey, value, depth) VALUES (?, ?, ?, ?)";
  $stmh_insert = $pdo->prepare($sql_insert);

  while ($row = $stmh_select->fetch(PDO::FETCH_ASSOC)) {
    // 새로운 parentKey를 'aaaa'로 지정하여 데이터 복사
    $stmh_insert->bindParam(1, $tmp_spec);
    $stmh_insert->bindParam(2, $row['childKey']);
    $stmh_insert->bindParam(3, $row['value']);
    $stmh_insert->bindParam(4, $row['depth']);
    $stmh_insert->execute();
  }

  $pdo->commit(); // 트랜잭션 커밋
} catch (PDOException $Exception) {
  $pdo->rollBack(); // 에러 발생 시 트랜잭션 롤백
  print "오류: ".$Exception->getMessage();
}

먼저 트랜잭션을 시작하여 데이터베이스 작업을 원자적으로 수행

그 다음, 'parentKey'가 'num'과 같은 데이터를 선택하는 쿼리문과 데이터를 복사하는 쿼리문을 작성

복사 과정에서는 선택된 데이터의 'parentKey'를 'aaaa'로 변경하여 복사

마지막으로, 모든 작업이 성공적으로 수행되면 트랜잭션을 커밋하고, 에러 발생 시 트랜잭션을 롤백

실제 이렇게 해서 성공한 코드는 아래에 기록함.

if($parentxml_num !=='')
{
			
	try {
	  $pdo->beginTransaction(); // 트랜잭션 시작

	  // 'parentKey'가 'num'과 같은 데이터를 선택하는 쿼리문
	  $sql_select = "SELECT * FROM dbeunsungbiz." . $selectedmenubar . " WHERE parentKey = '$parentxml_num' " ;
	  $stmh_select = $pdo->prepare($sql_select);
	  $stmh_select->execute();

	  // 선택된 데이터들을 복사하는 쿼리문
	  $sql_insert = "INSERT INTO dbeunsungbiz.ETxmlgrid(parentKey, description , material , length , width , thickness , weights , donenum , donetime , laserfee , unitfee , bendingNum , bendingFee , bendingUnitFee , bendingAmount , paintingArea , paintingChoice , paintingUnit , paintingUnitFee , paintingAmount , lastworkUnitFee , lastwork , unit_Amount , est_Amount , device , outfitgrid , item_code_grid , item_name_grid , item_desc_grid , vat_grid , deadline_grid , memo_grid , jpgurl  ) "; 
	  $sql_insert .= " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? , ?, ?, ?, ?, ?, ?, ?, ?) ";
	  	  
	  $stmh_insert = $pdo->prepare($sql_insert);

	  while ($row = $stmh_select->fetch(PDO::FETCH_ASSOC)) {
		// 새로운 parentKey를 'tmpKey'로 지정하여 데이터 복사
		$stmh_insert->bindValue(1, $tmpKey,PDO::PARAM_STR);                   // 임시부여키 적용함
		$stmh_insert->bindValue(2 , $row['description'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(3 , $row['material'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(4 , $row['length'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(5 , $row['width'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(6 , $row['thickness'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(7 , $row['weights'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(8 , $row['donenum'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(9 , $row['donetime'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(10, $row['laserfee'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(11, $row['unitfee'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(12, $row['bendingNum'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(13, $row['bendingFee'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(14, $row['bendingUnitFee'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(15, $row['bendingAmount'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(16, $row['paintingArea'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(17, $row['paintingChoice'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(18, $row['paintingUnit'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(19, $row['paintingUnitFee'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(20, $row['paintingAmount'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(21, $row['lastworkUnitFee'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(22, $row['lastwork'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(23, $row['unit_Amount'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(24, $row['est_Amount'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(25, $row['device'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(26, $row['outfitgrid'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(27, $row['item_code_grid'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(28, $row['item_name_grid'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(29, $row['item_desc_grid'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(30, $row['vat_grid'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(31, $row['deadline_grid'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(32, $row['memo_grid'],PDO::PARAM_STR); 
		$stmh_insert->bindValue(33, $row['jpgurl'],PDO::PARAM_STR); 

		$stmh_insert->execute();
		
		// print $row['description'];
	  }

	  $pdo->commit(); // 트랜잭션 커밋
	} catch (PDOException $Exception) {
	  $pdo->rollBack(); // 에러 발생 시 트랜잭션 롤백
	  print "오류: ".$Exception->getMessage();
	}
			
}

 

주문서, 판매서, 견적서 등 불러오는 객체에 따라 xmlgrid를 다르게 불러와야 하는 과제 생김 // 작업지시서에서 주문서 불러오기 실행
$("#workparentorderloadtBtn").click( function() {
// 버튼 비활성화
var btn = $(this);
if(btn.prop('disabled')) return false;
btn.prop('disabled', true);
 const num =  $("#num").val();
 console.log('num saveBtn 변화 관찰 : ' + $("#num").val() );     
 popupCenter("./work/orderreloadlist.php" , '주문서 불러오기 검색', 1600, 810);               
btn.prop('disabled', false); // 버튼 다시 활성화시킴
});

// 작업지시서에서 작업지시 불러오기 실행	
$("#workloadtBtn").click( function() {

// 버튼 비활성화
var btn = $(this);
if(btn.prop('disabled')) return false;
btn.prop('disabled', true);


    const num =  $("#num").val();

     console.log('num saveBtn 변화 관찰 : ' + $("#num").val()	);

     // ?selectedmenubar=work  항상 다름 주의

     popupCenter("./work/reloadlist.php?selectedmenubar=work" , '작업지시서 불러오기 검색', 1600, 1000);	              

    btn.prop('disabled', false); // 버튼 다시 활성화시킴


});

// 불러오기 메뉴 기록 (판매)
 $("#selectedmenubar").val('estimate');

변수로 기록함.

xml파일의 이름을 초기화 한다.

 // 부모번호 초기화
  $("#parentxml_num").val('');

자바스크립트 문자열키 만들어주는 함수 그리고 문자공백 등 여부 체크하는 함수

// 6자리 문자열의 임시키만들어준다.	
function generateRandomKey() {
  const length = 6;
  const chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  let result = '';
  for (let i = 0; i < length; i++) {
    result += chars[Math.floor(Math.random() * chars.length)];
  }
  return result;
}	

// 문자, 공백, 혹은 null일때 null 반환
function isNumValid(num) {
  return !isNaN(num) && num !== null && num !== '' && num !== ' ';
}

// 레코드 번호를 저장한다.
if(isNumValid(num) !== null)
  {
$("#num").val(num);
$("#tmpKey").val('' );  // 임시키 초기화
  }
  else
    {
$("#num").val('');
$("#tmpKey").val(generateRandomKey() );  // 임시키 생성해서 넣어준다.
}

			// 레코드 번호를 저장한다.
			if(isNumValid(num) !== null)
			  {
				$("#num").val(num);
				$("#tmpKey").val('' );  // 임시키 초기화
			  }
			  else
			    {
					$("#num").val('');
					$("#tmpKey").val(generateRandomKey() );  // 임시키 생성해서 넣어준다.
				}

레코드 수정여부 확인

    if( isNumValid(num)!== null )  // 레코드 번호로 수정과 삽입을 구분함.
  $("#SelectWork").val('update');  // 저장이 수정버튼의 역할을 함/ 파일 추가업로드시도 동작.
else
$("#SelectWork").val('insert');

 

saveBtn   이후

success : function(data){  // 이 후 코드 적용

  $("#num").val(data);   
  $("#tmpKey").val(''); // 임시키 초기화

Ecount 클릭 후도 적용

  $("#num").val(data);   
  $("#tmpKey").val(''); // 임시키 초기화

 

반응형
댓글