728x90

나이 계산은 은근히 스크립트로 계산 하려면 코드를 많이 써야 한다. sql 쿼리문에서 나이 계산이 되어야 하는 경우도 종종 있어서 쿼리문에서 바로 뽑아서 쓸수 있는 코드 예시를 공유해본다. 

회원코드값으로 user 테이블에서 생년월일 필드로 만나이를 계산하는 공식이다. 

 

mysql 쿼리문에서 나이 계산하기

SELECT
    DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(CONCAT(birth_year, '-', birth_month, '-', birth_day), '%Y') - 
    (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(CONCAT(birth_year, '-', birth_month, '-', birth_day), '00-%m-%d')) AS age
FROM
    user
WHERE
    user_seq = #{user_seq};

 

리액트에서 나이 계산 하기 

import React, { useState } from 'react';

const AgeCalculator = () => {
  const [birthDate, setBirthDate] = useState('');
  const [age, setAge] = useState(null);

  const calculateAge = (dateString) => {
    const birthDate = new Date(dateString); // YYYY-MM-DD 형태의 문자열을 Date 객체로 변환
    const today = new Date();

    // 만 나이 계산
    let calculatedAge = today.getFullYear() - birthDate.getFullYear();
    if (today < new Date(today.getFullYear(), birthDate.getMonth(), birthDate.getDate())) {
      calculatedAge--;
    }
    
    return calculatedAge;
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    setAge(calculateAge(birthDate));
  };

  return (
    <div>
      <form onSubmit={handleSubmit}>
        <input
          type="date" // HTML5의 date 입력 형식 사용
          value={birthDate}
          onChange={(e) => setBirthDate(e.target.value)}
        />
        <button type="submit">나이 계산하기</button>
      </form>
      {age !== null && <p>만 나이: {age}세</p>}
    </div>
  );
};

export default AgeCalculator;
728x90
728x90

정산내역을 작업하다 보면 추가 금액을 입력하는 경우가 종종 생긴다. 전산으로 모두 계산하지만 추가 비용을 지불해야 한다던지 추가 비용을 차감해야 한다던지 하는 예외적인 상황은 별도로 입력해주는 폼을 추가 해주고 db 에 저장해 주는것이 좋다. 

<form action="process.php" method="post">
    <td>
        <select name="operation" id="operation" style="width:60px;">
            <option value="+">+</option>
            <option value="-">-</option>
        </select>
        <input type="number" name="extra_amount" class="w180" required title="금액">원
        <button type="submit">전송</button>
    </td>
</form>

 

select box 에서 기호를 선택하고 입력하는 방식으로 구현 한다면 태그를 작성하고 post 로 받는 화면은 아래와 같이 floatval 로 변환해 주어야 마이너스로 입력이 된다. db 에 필드도 float 로 잡아 주어야 한다. 

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $operation = $_POST['operation'];
    $amount = $_POST['extra_amount'];

    // 금액에 + 또는 - 기호 붙이기
    $extra_amount = ($operation === '-') ? -floatval($amount) : floatval($amount); // 입력값을 float으로 변환

    // 선생님 정산 테이블 업데이트
    $paramArray = [];   
    $paramArray = compact('extra_amount'); 
    $paramArray["payment"] = $total_amount - $tax + $extra_amount; 

    // 데이터베이스 업데이트
    $rsArry = $this->UpdateData("reservation_settle_teacher", $paramArray, $where_com);
}
728x90
728x90

php 엑셀다운로드 예시 
 
php 코드에서 엑셀다운로드를 사용 하려면 vendor 에서 설치하고 사용해야 한다. 
composer require phpoffice/phpspreadsheet
컴포저에서 설치 후 이용해야 한다. 

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

function downloadExcel($filename = 'example.xlsx') {
    // 새로운 스프레드시트 객체 생성
    $spreadsheet = new Spreadsheet();

    // 시트 1 생성
    $sheet1 = $spreadsheet->getActiveSheet();
    $sheet1->setTitle('첫 번째 시트');
    
    // 헤더 추가
    $sheet1->setCellValue('A1', '헤더 1');
    $sheet1->setCellValue('B1', '헤더 2');
    $sheet1->setCellValue('A2', '데이터 1');
    $sheet1->setCellValue('B2', '데이터 2');

    // 시트 2 생성
    $sheet2 = $spreadsheet->createSheet();
    $sheet2->setTitle('두 번째 시트');
    
    // 헤더 추가
    $sheet2->setCellValue('A1', '헤더 A');
    $sheet2->setCellValue('B1', '헤더 B');
    $sheet2->setCellValue('A2', '데이터 A');
    $sheet2->setCellValue('B2', '데이터 B');

    // 파일 다운로드를 위한 헤더 설정
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header("Content-Disposition: attachment; filename=\"$filename\"");
    header('Cache-Control: max-age=0');

    // 엑셀 파일 작성
    $writer = new Xlsx($spreadsheet);
    $writer->save('php://output');
    exit;
}

// 함수 호출
downloadExcel('내_엑셀파일.xlsx');
?>

 
엑셀업로드예시

<?php
$host = 'localhost'; // 데이터베이스 호스트
$db = 'your_database'; // 데이터베이스 이름
$user = 'your_username'; // 사용자 이름
$pass = 'your_password'; // 비밀번호
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>

 
파일 업로드 후 db 에 insert 하는 예시

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;

// 파일 업로드 처리
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['excel_file'])) {
    $file = $_FILES['excel_file']['tmp_name'];

    // 엑셀 파일 읽기
    $spreadsheet = IOFactory::load($file);

    // 모든 시트 순회
    foreach ($spreadsheet->getAllSheets() as $sheet) {
        $sheetData = $sheet->toArray();

        // 첫 번째 행은 헤더로 가정하고 데이터 삽입
        for ($row = 1; $row < count($sheetData); $row++) {
            $data = $sheetData[$row];

            // 데이터 삽입 쿼리 (여기서 예시로 'your_table'을 사용)
            $stmt = $pdo->prepare("INSERT INTO your_table (column1, column2) VALUES (?, ?)");
            $stmt->execute([$data[0], $data[1]]);
        }
    }

    echo "데이터가 성공적으로 삽입되었습니다.";
}
?>

<!-- HTML 업로드 폼 -->
<form method="post" enctype="multipart/form-data">
    <input type="file" name="excel_file" accept=".xlsx, .xls" required>
    <button type="submit">업로드</button>
</form>
728x90

+ Recent posts