1
This commit is contained in:
commit
de9583cfed
23
config/dbconfig.php
Normal file
23
config/dbconfig.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
$servername = 'dsm.sokuree.com';
|
||||
$port = 3307;
|
||||
$dbuser = 'sokuree';
|
||||
$dbpassword = '^Ocean1472bk';
|
||||
$dbname = 'memsite';
|
||||
|
||||
try {
|
||||
// MariaDB 10 도 DSN 은 mysql 사용
|
||||
$dsn = "mysql:host={$servername};port={$port};dbname={$dbname};charset=utf8mb4";
|
||||
$db = new PDO($dsn, $dbuser, $dbpassword);
|
||||
|
||||
// PDO 설정
|
||||
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // 실제 prepared statement 사용
|
||||
$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); // 버퍼링 쿼리
|
||||
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 예외 던지기
|
||||
|
||||
//echo "DB 연결 성공";
|
||||
|
||||
} catch (PDOException $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
22
config/member.php
Normal file
22
config/member.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
// Member Class file
|
||||
|
||||
class Member {
|
||||
// 멤버 변수, 프로퍼티
|
||||
private $conn;
|
||||
|
||||
// 생성자
|
||||
public function __construct($db) {
|
||||
$this->conn = $db; // PDO 객체 주입
|
||||
}
|
||||
|
||||
// 아이디 중복체크용 멤버 함수, 메소드
|
||||
public function id_exists($id) {
|
||||
$sql = "SELECT * FROM member WHERE id=:id";
|
||||
$stmt = $this->conn->prepare($sql);
|
||||
$stmt->bindParam(':id', $id);
|
||||
$stmt->execute();
|
||||
|
||||
return $stmt->rowCount() ? true : false;
|
||||
}
|
||||
}
|
||||
15
config/phpMyAdmin.txt
Normal file
15
config/phpMyAdmin.txt
Normal file
@ -0,0 +1,15 @@
|
||||
CREATE TABLE `memsite`.`member` (
|
||||
`idx` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`id` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||
`name` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||
`email` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
|
||||
`password` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`zipcode` CHAR(5) NOT NULL DEFAULT '',
|
||||
`addr1` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`addr2` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`photo` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`create_at` DATETIME NULL,
|
||||
`ip` VARCHAR(20) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`idx`),
|
||||
UNIQUE (`id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
19
dbtest.php
Normal file
19
dbtest.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
include __DIR__ . '/config/dbconfig.php'; // DB 연결
|
||||
include __DIR__ . '/config/member.php'; // 파일명 정확히 수정!!! (member1.php ❌)
|
||||
|
||||
// 아이디 중복 테스트
|
||||
$id = 'sokuree';
|
||||
|
||||
$mem = new Member($db);
|
||||
|
||||
if ($mem->id_exists($id)) {
|
||||
echo "ID '{$id}'는 이미 존재합니다.";
|
||||
} else {
|
||||
echo "ID '{$id}'는 사용 가능합니다.";
|
||||
}
|
||||
17
footer.php
Normal file
17
footer.php
Normal file
@ -0,0 +1,17 @@
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<footer class="footer mt-5 py-3 bg-primary">
|
||||
<div class="container d-flex gap-1">
|
||||
<img src="images/bootstrap-logo.png" style="width: 5rem" class="me-2">
|
||||
<div class="d-flex flex-column">
|
||||
<span class="text-bg-primary">수많은 데이터에서 필요한 정보만 쏙 </span>
|
||||
<span class="text-bg-primary">SOKUREE.com</span>
|
||||
<span class="text-bg-primary">TEL: 010-1234-5678</span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
44
header.php
Normal file
44
header.php
Normal file
@ -0,0 +1,44 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Document</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet"
|
||||
integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js"
|
||||
integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI"
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="js/member.js?v=<?php echo date('YmdHis'); ?>"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<header class="d-flex flex-wrap justify-content-center py-3 mb-4 border-bottom">
|
||||
<a href="/"
|
||||
class="d-flex align-items-center mb-3 mb-md-0 me-md-auto link-body-emphasis text-decoration-none">
|
||||
<img src="images/bootstrap-logo.png" style="width: 2rem" class="me-2">
|
||||
<use xlink:href="#bootstrap"></use>
|
||||
</svg>
|
||||
<span class="fs-4">Simple header</span>
|
||||
</a>
|
||||
<ul class="nav nav-pills">
|
||||
<li class="nav-item">
|
||||
<a href="#" class="nav-link active" aria-current="page">Home</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#" class="nav-link">Features</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#" class="nav-link">Pricing</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#" class="nav-link">FAQs</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#" class="nav-link">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</header>
|
||||
BIN
images/bootstrap-logo.png
Normal file
BIN
images/bootstrap-logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 42 KiB |
BIN
images/person.jpg
Normal file
BIN
images/person.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.2 KiB |
25
js/member.js
Normal file
25
js/member.js
Normal file
@ -0,0 +1,25 @@
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
|
||||
const btn_member = document.querySelector("#btn_member")
|
||||
|
||||
btn_member.addEventListener("click", () => {
|
||||
|
||||
const member_chk1 = document.querySelector("#member_chk1")
|
||||
if(member_chk1.checked !== true) {
|
||||
alert('회원약관에 동의해 주셔야 가입이 가능합니다.')
|
||||
return false
|
||||
}
|
||||
|
||||
const member_chk2 = document.querySelector("#member_chk2")
|
||||
if(member_chk2.checked !== true) {
|
||||
alert('개인정보 취급방침에 동의해 주셔야 가입이 가능합니다.')
|
||||
return false
|
||||
}
|
||||
|
||||
const f = document.stipulation_form
|
||||
f.chk.value = 1
|
||||
f.submit()
|
||||
|
||||
})
|
||||
|
||||
})
|
||||
80
member_input.php
Normal file
80
member_input.php
Normal file
@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
if (!isset($_POST['chk']) || $_POST['chk'] != '1') {
|
||||
// die("<script>
|
||||
// alert('약관에 동의하셔야 접근이 가능합니다.');
|
||||
// self.location.href='./stipulation.php';
|
||||
// </script>");
|
||||
}
|
||||
|
||||
include 'header.php';
|
||||
|
||||
?>
|
||||
|
||||
<main class="w-50 mx-auto border rounded-5 p-5">
|
||||
<h1 class="text-center">회원가입</h1>
|
||||
|
||||
<div class="d-flex gap-2 align-items-end">
|
||||
<div class="flex-grow-1">
|
||||
<label for="f_id">아이디</label>
|
||||
<input typ="text" class="form-control" id="f_id" placeholder="아이디를 입력하세요">
|
||||
</div>
|
||||
<button class="btn btn-secondary"> 아이디 중복확인 </button>
|
||||
</div>
|
||||
|
||||
<div class="d-flex mt-3 gap-2 justify-content-between">
|
||||
<div class="w-50">
|
||||
<label for="f_pwd" class="form-label">비밀번호</label>
|
||||
<input typ="pwd" class="form-control" id="f_pwd" placeholder="비밀번호를 입력하세요">
|
||||
</div>
|
||||
<div class="w-50">
|
||||
<label for="f_pwd2" class="form-label">비밀번호 확인</label>
|
||||
<input typ="pwd" class="form-control" id="f_pwd2" placeholder="비밀번호를 입력하세요">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex gap-2 align-items-end">
|
||||
<div class="flex-grow-1">
|
||||
<label for="f_email">이메일</label>
|
||||
<input typ="text" class="form-control" id="f_email" placeholder="이메일을 입력하세요">
|
||||
</div>
|
||||
<button class="btn btn-secondary"> 이메일 중복확인 </button>
|
||||
</div>
|
||||
|
||||
<div class="d-flex gap-2 mt-3 align-items-end">
|
||||
<div>
|
||||
<label for="f_zipcode">우편번호</label>
|
||||
<input type="text" name="zipcode" id="zipcode" class="form-control" maxlength="5" minlength="5">
|
||||
</div>
|
||||
<button class="btn btn-secondary">우편번호 찾기</button>
|
||||
</div>
|
||||
|
||||
<div class="d-flex mt-3 gap-2 justify-content-between">
|
||||
<div class="w-50">
|
||||
<label for="f_addr1" class="form-label">주소</label>
|
||||
<input typ="pwd" class="form-control" id="f_addr1" placeholder="주소를 입력하세요">
|
||||
</div>
|
||||
<div class="w-50">
|
||||
<label for="f_addr2" class="form-label">상세주소</label>
|
||||
<input typ="pwd" class="form-control" id="f_addr2" placeholder="상세주소를 입력하세요">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-3 d-flex gap-5">
|
||||
<div>
|
||||
<lable for="f_photo" class="form-label">프로필 이미지</lable>
|
||||
<input type="file" name="profile" class="form-control">
|
||||
</div>
|
||||
<img src="images/person.jpg" class="w-25" alt="profile image">
|
||||
</div>
|
||||
|
||||
<div class="mt-3 d-flex gap-2">
|
||||
<button class="btn btn-primary flex-grow-1">가입확인</button>
|
||||
<button class="btn btn-secondary flex-grow-1">가입취소</button>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<?php
|
||||
include 'footer.php';
|
||||
?>
|
||||
38
stipulation.php
Normal file
38
stipulation.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php include 'header.php'; ?>
|
||||
|
||||
<main>
|
||||
<h1 class="text-center mt-5">회원 약관 및 개인정보 취급방침 동의"</h1>
|
||||
<h4>회원 약관</h4>
|
||||
<textarea name="" id="" cols="30" rows="10" class="form-control">
|
||||
Lorem ipsum dolor sit amet consectetur adipisicing elit. Soluta, dicta, dignissimos modi fuga minus amet repellat quo error assumenda quidem, quisquam harum voluptates ullam eaque deserunt fugit et veritatis corporis iusto similique quos reprehenderit dolor sit! Voluptatibus unde tempore minima corrupti harum veritatis velit reiciendis pariatur, minus ad distinctio ex accusantium vero adipisci delectus nisi, ratione facere possimus tenetur suscipit iusto tempora quaerat quisquam cumque? Explicabo, inventore animi. Delectus quis ad magnam, corporis ratione quia itaque quod in eum eveniet animi consequuntur deleniti minima quibusdam laboriosam suscipit, aspernatur doloribus hic blanditiis dicta natus magni libero ex? Ipsam nisi quaerat, facere sed quasi veritatis eveniet odit aspernatur nihil ex. Modi neque placeat corporis deleniti impedit? Molestias expedita, enim ipsum mollitia temporibus delectus distinctio et sed quos non. Dolor rem dicta itaque eligendi atque quia sed maiores pariatur, consectetur magni! Corrupti obcaecati aliquid eius eos cum laborum dolorum fugit distinctio. Excepturi, eos repellat eius rem tenetur quod modi quasi necessitatibus dicta, et ullam corrupti autem quae possimus enim facere. Eveniet nesciunt consectetur eius autem aut beatae enim assumenda minus error nihil dolore saepe, voluptas distinctio provident dolorum consequatur dolores sapiente itaque adipisci! Mollitia cum enim incidunt illo aliquam, facere corporis laboriosam, provident, impedit tenetur quae ullam illum sunt. Quasi explicabo libero deserunt culpa vel nesciunt quo commodi eaque eius enim ipsam, quod voluptate similique, aliquid necessitatibus? Aspernatur obcaecati minus dolor non nemo earum omnis officiis tempore blanditiis dignissimos maxime mollitia accusamus enim aut culpa maiores quas, ut beatae saepe at ullam unde nesciunt. Assumenda eum perferendis cumque, eos excepturi fugiat ut libero, nisi rem culpa ea quasi natus. Voluptate iste vitae mollitia cumque aut, veritatis quasi ipsa amet! Non illum dolore mollitia maiores molestias quo exercitationem labore quidem omnis officiis nam ea hic inventore quaerat consequatur, corporis fugiat velit debitis sint quisquam.
|
||||
</textarea>
|
||||
<div class="form-check mt-2">
|
||||
<input class="form-check-input" type="checkbox" value="1" id="member_chk1">
|
||||
<label class="form-check-label" for="member_chk1">
|
||||
위 약관에 동의하시겠습니까?
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<h4 class="mt-3">개인정보 취급방침</h4>
|
||||
<textarea name="" id="" cols="30" rows="10" class="form-control">
|
||||
Lorem ipsum dolor sit amet consectetur adipisicing elit. Soluta, dicta, dignissimos modi fuga minus amet repellat quo error assumenda quidem, quisquam harum voluptates ullam eaque deserunt fugit et veritatis corporis iusto similique quos reprehenderit dolor sit! Voluptatibus unde tempore minima corrupti harum veritatis velit reiciendis pariatur, minus ad distinctio ex accusantium vero adipisci delectus nisi, ratione facere possimus tenetur suscipit iusto tempora quaerat quisquam cumque? Explicabo, inventore animi. Delectus quis ad magnam, corporis ratione quia itaque quod in eum eveniet animi consequuntur deleniti minima quibusdam laboriosam suscipit, aspernatur doloribus hic blanditiis dicta natus magni libero ex? Ipsam nisi quaerat, facere sed quasi veritatis eveniet odit aspernatur nihil ex. Modi neque placeat corporis deleniti impedit? Molestias expedita, enim ipsum mollitia temporibus delectus distinctio et sed quos non. Dolor rem dicta itaque eligendi atque quia sed maiores pariatur, consectetur magni! Corrupti obcaecati aliquid eius eos cum laborum dolorum fugit distinctio. Excepturi, eos repellat eius rem tenetur quod modi quasi necessitatibus dicta, et ullam corrupti autem quae possimus enim facere. Eveniet nesciunt consectetur eius autem aut beatae enim assumenda minus error nihil dolore saepe, voluptas distinctio provident dolorum consequatur dolores sapiente itaque adipisci! Mollitia cum enim incidunt illo aliquam, facere corporis laboriosam, provident, impedit tenetur quae ullam illum sunt. Quasi explicabo libero deserunt culpa vel nesciunt quo commodi eaque eius enim ipsam, quod voluptate similique, aliquid necessitatibus? Aspernatur obcaecati minus dolor non nemo earum omnis officiis tempore blanditiis dignissimos maxime mollitia accusamus enim aut culpa maiores quas, ut beatae saepe at ullam unde nesciunt. Assumenda eum perferendis cumque, eos excepturi fugiat ut libero, nisi rem culpa ea quasi natus. Voluptate iste vitae mollitia cumque aut, veritatis quasi ipsa amet! Non illum dolore mollitia maiores molestias quo exercitationem labore quidem omnis officiis nam ea hic inventore quaerat consequatur, corporis fugiat velit debitis sint quisquam.
|
||||
</textarea>
|
||||
<div class="form-check mt-2">
|
||||
<input class="form-check-input" type="checkbox" value="1" id="member_chk2">
|
||||
<label class="form-check-label" for="member_chk2">
|
||||
개인정보 취급방침에 동의하시겠습니까?
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 d-flex justify-content-center gap-2">
|
||||
<button class="btn btn-primary w-50" id="btn_member">회원가입</button>
|
||||
<button class="btn btn-secondary w-50">가입취소</button>
|
||||
</div>
|
||||
|
||||
<form method="POST" name="stipulation_form" action="./member_input.php">
|
||||
<input type="hidden" name="chk" value="0">
|
||||
</form>
|
||||
|
||||
</main>
|
||||
|
||||
<?php include 'footer.php'; ?>
|
||||
Loading…
x
Reference in New Issue
Block a user