5) { sleep(1); header("Location:" . $WebSite . "login/login_form.php"); exit; } // 에러 표시 설정 ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // **대량 등록용 임시 key 발급** $bulkTimeKey = bin2hex(random_bytes(16)); include $_SERVER['DOCUMENT_ROOT'] . '/load_header.php'; $title_message = '금전 출납부'; $tablename = 'account'; require_once $_SERVER['DOCUMENT_ROOT'] . '/load_GoogleDriveSecond.php'; // attached, image에 대한 정보 불러오기 ?> <?=$title_message?> prepare($sql); foreach ($sql_params as $param => $value) { $stmh->bindValue($param, $value); } $stmh->execute(); $total_row = $stmh->rowCount(); // 수입, 지출을 기반으로 초기 잔액 계산 $initialBalanceSql = "SELECT SUM(CASE WHEN inoutsep = '수입' THEN REPLACE(amount, ',', '') ELSE 0 END) + SUM(CASE WHEN inoutsep = '최초전월이월' THEN REPLACE(amount, ',', '') ELSE 0 END) - SUM(CASE WHEN inoutsep = '지출' THEN REPLACE(amount, ',', '') ELSE 0 END) AS balance FROM $tablename WHERE is_deleted = '0' AND registDate < :fromdate AND (dueDate = '0000-00-00' OR dueDate IS NULL OR dueDate = '')"; $initialBalanceStmh = $pdo->prepare($initialBalanceSql); $initialBalanceStmh->bindParam(':fromdate', $fromdate); $initialBalanceStmh->execute(); $initialBalance = $initialBalanceStmh->fetch(PDO::FETCH_ASSOC)['balance']; $totalIncomeSql = "SELECT SUM(REPLACE(amount, ',', '')) AS totalIncome FROM $tablename WHERE is_deleted = '0' AND (inoutsep = '수입' OR inoutsep = '최초전월이월') AND registDate BETWEEN :fromdate AND :todate AND (dueDate = '0000-00-00' OR dueDate IS NULL OR dueDate = '')"; $totalIncomeStmh = $pdo->prepare($totalIncomeSql); $totalIncomeStmh->bindParam(':fromdate', $fromdate); $totalIncomeStmh->bindParam(':todate', $todate); $totalIncomeStmh->execute(); $totalIncome = $totalIncomeStmh->fetch(PDO::FETCH_ASSOC)['totalIncome']; $totalExpenseSql = "SELECT SUM(REPLACE(amount, ',', '')) AS totalExpense FROM $tablename WHERE is_deleted = '0' AND inoutsep = '지출' AND registDate BETWEEN :fromdate AND :todate AND (dueDate = '0000-00-00' OR dueDate IS NULL OR dueDate = '')"; $totalExpenseStmh = $pdo->prepare($totalExpenseSql); $totalExpenseStmh->bindParam(':fromdate', $fromdate); $totalExpenseStmh->bindParam(':todate', $todate); $totalExpenseStmh->execute(); $totalExpense = $totalExpenseStmh->fetch(PDO::FETCH_ASSOC)['totalExpense']; $finalBalance = $initialBalance + $totalIncome - $totalExpense; // Bankbook options $bankbookOptions = []; $jsonFile = $_SERVER['DOCUMENT_ROOT'] . "/account/accoutlist.json"; $accounts = []; $selectedAccount = null; $accountBalances = []; if (file_exists($jsonFile)) { $jsonContent = file_get_contents($jsonFile); $accounts = json_decode($jsonContent, true); if (is_array($accounts) && !empty($accounts)) { // 선택된 계좌 또는 기본 계좌(첫 번째) 설정 $selectedAccountIndex = isset($_REQUEST['selected_account']) ? intval($_REQUEST['selected_account']) : 0; $selectedAccount = $accounts[$selectedAccountIndex] ?? $accounts[0]; // 각 계좌별 잔액 계산 foreach ($accounts as $index => $account) { $accountDisplay = $account['company'] . ' ' . $account['number']; if (!empty($account['memo'])) { $accountDisplay .= ' (' . $account['memo'] . ')'; } // 해당 계좌의 잔액 계산 $accountBalanceSql = "SELECT SUM(CASE WHEN inoutsep = '수입' AND bankbook = ? THEN REPLACE(amount, ',', '') ELSE 0 END) + SUM(CASE WHEN inoutsep = '최초전월이월' AND bankbook = ? THEN REPLACE(amount, ',', '') ELSE 0 END) - SUM(CASE WHEN inoutsep = '지출' AND bankbook = ? THEN REPLACE(amount, ',', '') ELSE 0 END) AS balance FROM $tablename WHERE is_deleted = '0' AND (dueDate = '0000-00-00' OR dueDate IS NULL OR dueDate = '')"; $accountBalanceStmh = $pdo->prepare($accountBalanceSql); $accountBalanceStmh->bindValue(1, $accountDisplay, PDO::PARAM_STR); $accountBalanceStmh->bindValue(2, $accountDisplay, PDO::PARAM_STR); $accountBalanceStmh->bindValue(3, $accountDisplay, PDO::PARAM_STR); $accountBalanceStmh->execute(); $accountBalances[$index] = $accountBalanceStmh->fetch(PDO::FETCH_ASSOC)['balance'] ?? 0; } } } // 각 계좌별 요약 정보를 담을 배열 초기화 $accountSummaries = []; if (is_array($accounts)) { foreach ($accounts as $index => $account) { $accountDisplay = $account['company'] . ' ' . $account['number']; if (!empty($account['memo'])) { $accountDisplay .= ' (' . $account['memo'] . ')'; } // 1. 계좌별 기초 잔액 (기간 이전) $initialSql = "SELECT (SUM(CASE WHEN inoutsep = '수입' OR inoutsep = '최초전월이월' THEN REPLACE(amount, ',', '') ELSE 0 END) - SUM(CASE WHEN inoutsep = '지출' THEN REPLACE(amount, ',', '') ELSE 0 END)) AS balance FROM $tablename WHERE is_deleted = '0' AND registDate < :fromdate AND bankbook = :bankbook AND (dueDate = '0000-00-00' OR dueDate IS NULL OR dueDate = '')"; $initialStmh = $pdo->prepare($initialSql); $initialStmh->bindParam(':fromdate', $fromdate); $initialStmh->bindParam(':bankbook', $accountDisplay); $initialStmh->execute(); $initialBalanceAccount = $initialStmh->fetch(PDO::FETCH_ASSOC)['balance'] ?? 0; // 2. 기간 내 수입 $incomeSql = "SELECT SUM(REPLACE(amount, ',', '')) AS totalIncome FROM $tablename WHERE is_deleted = '0' AND (inoutsep = '수입' OR inoutsep = '최초전월이월') AND registDate BETWEEN :fromdate AND :todate AND bankbook = :bankbook AND (dueDate = '0000-00-00' OR dueDate IS NULL OR dueDate = '')"; $incomeStmh = $pdo->prepare($incomeSql); $incomeStmh->bindParam(':fromdate', $fromdate); $incomeStmh->bindParam(':todate', $todate); $incomeStmh->bindParam(':bankbook', $accountDisplay); $incomeStmh->execute(); $totalIncomeAccount = $incomeStmh->fetch(PDO::FETCH_ASSOC)['totalIncome'] ?? 0; // 3. 기간 내 지출 $expenseSql = "SELECT SUM(REPLACE(amount, ',', '')) AS totalExpense FROM $tablename WHERE is_deleted = '0' AND inoutsep = '지출' AND registDate BETWEEN :fromdate AND :todate AND bankbook = :bankbook AND (dueDate = '0000-00-00' OR dueDate IS NULL OR dueDate = '')"; $expenseStmh = $pdo->prepare($expenseSql); $expenseStmh->bindParam(':fromdate', $fromdate); $expenseStmh->bindParam(':todate', $todate); $expenseStmh->bindParam(':bankbook', $accountDisplay); $expenseStmh->execute(); $totalExpenseAccount = $expenseStmh->fetch(PDO::FETCH_ASSOC)['totalExpense'] ?? 0; // 4. 최종 잔액 $finalBalanceAccount = $initialBalanceAccount + $totalIncomeAccount - $totalExpenseAccount; // 계산된 정보를 배열에 저장 $accountSummaries[$index] = [ 'name' => $accountDisplay, 'income' => $totalIncomeAccount, 'expense' => $totalExpenseAccount, 'balance' => $finalBalanceAccount ]; } } // 각 계좌별 최종 잔액 정보를 담을 배열 초기화 $accountFinalBalances = []; if (is_array($accounts)) { foreach ($accounts as $index => $account) { $accountDisplay = $account['company'] . ' ' . $account['number']; if (!empty($account['memo'])) { $accountDisplay .= ' (' . $account['memo'] . ')'; } // 계좌별 전체 기간의 최종 잔액 계산 $balanceSql = "SELECT (SUM(CASE WHEN inoutsep = '수입' OR inoutsep = '최초전월이월' THEN REPLACE(amount, ',', '') ELSE 0 END) - SUM(CASE WHEN inoutsep = '지출' THEN REPLACE(amount, ',', '') ELSE 0 END)) AS balance FROM $tablename WHERE is_deleted = '0' AND bankbook = :bankbook AND (dueDate = '0000-00-00' OR dueDate IS NULL OR dueDate = '')"; $balanceStmh = $pdo->prepare($balanceSql); $balanceStmh->bindParam(':bankbook', $accountDisplay); $balanceStmh->execute(); $balanceResult = $balanceStmh->fetch(PDO::FETCH_ASSOC); // 계산된 정보를 배열에 저장 $accountFinalBalances[$index] = [ 'name' => $accountDisplay, 'balance' => $balanceResult['balance'] ?? 0 ]; } } // print $sql; ?>
  기간  
기간 설정
  ~    
       
계좌 잔액: 0): ?>
:
prepare($initialBalanceSql); $initialBalanceStmh->bindParam(':fromdate', $fromdate); $initialBalanceStmh->bindParam(':bankbook', $accountDisplay); $initialBalanceStmh->execute(); $result = $initialBalanceStmh->fetch(PDO::FETCH_ASSOC); $runningBalances[$accountDisplay] = $result['balance'] ?? 0; } } $start_num = $total_row; $counter = 1; // 2. 루프를 돌며 각 거래에 대한 계좌별 잔액을 계산하고 출력 // 이 while 루프는 페이지 상단에서 시작된 try 블록 안에서 실행됩니다. while($row = $stmh->fetch(PDO::FETCH_ASSOC)) { include '_row.php'; // $num, $registDate, $bankbook 등의 변수 할당 $amount = floatval(str_replace(',', '', $row['amount'])); // json에 없는 계좌의 거래가 있을 경우를 대비해 초기화 if (!isset($runningBalances[$bankbook])) { $runningBalances[$bankbook] = 0; } // 해당 계좌의 잔액을 업데이트 (어음이 아닌 경우만) if ($dueDate === '0000-00-00' || !$dueDate || $dueDate === '' || $bankbook === '전자어음') { if ($row['inoutsep'] === '수입' || $row['inoutsep'] === '최초전월이월') { $runningBalances[$bankbook] += $amount; } else { // 지출 $runningBalances[$bankbook] -= $amount; } } ?> getMessage(); } ?>
번호 등록일자 구분 항목 세부항목 상세내용 수입 지출 잔액 계좌 만기일자 배서일자 ✅ 첨부서류
합계  
prepare($imageSql); $imageStmh->bindParam(':num', $num); $imageStmh->execute(); $images = $imageStmh->fetchAll(PDO::FETCH_COLUMN); // 모든 결과를 배열로 가져옴 if (!empty($images)) { foreach ($images as $fileId) { if ($fileId) { $imageId = 'account_image_' . $num . '_' . array_search($fileId, $images); // 고유 ID 생성 $link = "https://drive.google.com/file/d/{$fileId}/view?usp=drivesdk"; ?>