🔓데이터베이스/쇼핑몰 프로젝트
쇼핑몰 만들기(3)
하얀성
2023. 12. 15. 18:41
구매 후기:3점
(구매 후기를 작성할 수 있는 폼을 만들었다.)
about.php
<?php
// 데이터베이스 연결
$conn = mysqli_connect('localhost', 'root', 'apmsetup', 'shop_db');
session_start();
$user_id = $_SESSION['user_id'];
if (!isset($user_id)) {
header('location:login.php');
}
// 리뷰 제출 처리
if (isset($_POST['nickname']) && isset($_POST['review']) && isset($_POST['rating'])) {
$nickname = mysqli_real_escape_string($conn, $_POST['nickname']);
$review = mysqli_real_escape_string($conn, $_POST['review']);
$rating = mysqli_real_escape_string($conn, $_POST['rating']);
$query = "INSERT INTO reviews (nickname, review, rating) VALUES ('$nickname', '$review', '$rating')";
if (mysqli_query($conn, $query)) {
// 리뷰 저장 성공시 사용자를 리뷰 페이지로 리디렉션
header('Location: about.php');
} else {
// 데이터베이스 오류 처리
echo "Error: " . mysqli_error($conn);
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>elecch?</title>
<!-- font awesome cdn link -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<!-- custom css file link -->
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<?php include 'header.php'; ?>
<div class="heading">
<h3>elecch?</h3>
<p> <a href="home.php">홈으로 가기</a> </p>
</div>
<section class="about">
<div class="flex">
<div class="image">
<img src="images/about.jpg" alt="">
</div>
<div class="content">
<h3>why choose us?</h3>
<p>신속하고 신선하게, elecch이 여러분의 문 앞까지 맛있는 라면을 배달합니다. 어디서나, 언제든, elecch과 함께라면 최고의 라면을 집에서 즐길 수 있습니다.</p>
<p>elecch은 라면을 사랑하는 모든 이들을 위해 마음을 담아 배송합니다. 맛의 만족을 집 앞으로 직접 전달하는 elecch, 라면 배송의 새로운 표준을 제시합니다.</p>
</div>
</div>
</section>
<h1 class="title">구매 후기 작성</h1>
<form action="about.php" method="post" class="review-form">
<div class="box">
<label for="nickname">닉네임:</label>
<input type="text" id="nickname" name="nickname" required>
<label for="review">후기:</label>
<textarea id="review" name="review" required></textarea>
</div>
<div class="form-group">
<label for="rating">별점:</label>
<select name="rating" id="rating">
<option value="1">1 별</option>
<option value="2">2 별</option>
<option value="3">3 별</option>
<option value="4">4 별</option>
<option value="5">5 별</option>
</select>
</div>
<button type="submit" class="btn">후기 제출</button>
</form>
<section class="reviews">
<h1 class="title">구매 후기</h1>
<div class="box-container">
<?php
$query = "SELECT * FROM reviews ORDER BY created_at DESC";
$result = mysqli_query($conn, $query);
while($row = mysqli_fetch_assoc($result)){
echo '<div class="box">';
echo '<h3>고객 ' . htmlspecialchars($row['nickname']) . '님</h3>';
echo '<p>' . htmlspecialchars($row['review']) . '</p>';
echo '<div class="stars">';
for($i = 0; $i < $row['rating']; $i++){
echo '<i class="fas fa-star"></i>';
}
echo '</div></div>';
}
?>
</div>
</section>
<?php include 'footer.php'; ?>
<!-- custom js file link -->
<script src="js/script.js"></script>
</body>
</html>
- 상품검색 기능: 3점
(불닭으로 검색해서 '불닭' 단어가 들어간 두 라면제품을 찾은 모습이다. 돋보기 아이콘을 통해 검색가능하다.)
search_page.php
<?php
$conn = mysqli_connect('localhost','root','apmsetup','shop_db');
session_start();
$user_id = $_SESSION['user_id'];
if(!isset($user_id)){
header('location:login.php');
};
if(isset($_POST['add_to_cart'])){
$product_name = $_POST['product_name'];
$product_price = $_POST['product_price'];
$product_image = $_POST['product_image'];
$product_quantity = $_POST['product_quantity'];
$check_cart_numbers = mysqli_query($conn, "SELECT * FROM `cart` WHERE name = '$product_name' AND user_id = '$user_id'");
if(mysqli_num_rows($check_cart_numbers) > 0){
$message[] = '이미 장바구니에 있습니다!';
}else{
mysqli_query($conn, "INSERT INTO `cart`(user_id, name, price, quantity, image) VALUES('$user_id', '$product_name', '$product_price', '$product_quantity', '$product_image')");
$message[] = '상품을 장바구니에 담았습니다!';
}
};
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>search page</title>
<!-- font awesome cdn link -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<!-- custom css file link -->
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<?php include 'header.php'; ?>
<div class="heading">
<h3>라면 검색</h3>
<p> <a href="home.php">홈으로 가기</a> </p>
</div>
<section class="search-form">
<form action="" method="post">
<input type="text" name="search" placeholder="검색할 상품을 입력하세요" class="box">
<input type="submit" name="submit" value="검색" class="btn">
</form>
</section>
<section class="products" style="padding-top: 0;">
<div class="box-container">
<?php
if(isset($_POST['submit'])){
$search_item = $_POST['search'];
$select_products = mysqli_query($conn, "SELECT * FROM `products` WHERE name LIKE '%{$search_item}%'");
if(mysqli_num_rows($select_products) > 0){
while($fetch_product = mysqli_fetch_assoc($select_products)){
?>
<form action="" method="post" class="box">
<img src="photo/<?php echo $fetch_product['image']; ?>" alt="" class="image">
<div class="name"><?php echo $fetch_product['name']; ?></div>
<div class="price">최저<?php echo $fetch_product['price']; ?>원 + 10포인트</div>
<input type="number" class="qty" name="product_quantity" min="1" value="1">
<input type="hidden" name="product_name" value="<?php echo $fetch_product['name']; ?>">
<input type="hidden" name="product_price" value="<?php echo $fetch_product['price']; ?>">
<input type="hidden" name="product_image" value="<?php echo $fetch_product['image']; ?>">
<input type="submit" class="btn" value="장바구니 담기" name="add_to_cart">
</form>
<?php
}
}else{
echo '<p class="empty">결과를 찾을 수 없습니다.</p>';
}
}else{
echo '<p class="empty">검색을 시도해보세요!</p>';
}
?>
</div>
</section>
<?php include 'footer.php'; ?>
<!-- custom js file link -->
<script src="js/script.js"></script>
</body>
</html>
css는 너무 길어서 생략하겠습니다.
admin_script.js
let navbar = document.querySelector('.header .navbar');
let accountBox = document.querySelector('.header .account-box');
document.querySelector('#menu-btn').onclick = () =>{
navbar.classList.toggle('active');
accountBox.classList.remove('active');
}
document.querySelector('#user-btn').onclick = () =>{
accountBox.classList.toggle('active');
navbar.classList.remove('active');
}
window.onscroll = () =>{
navbar.classList.remove('active');
accountBox.classList.remove('active');
}
document.querySelector('#close-update').onclick = () =>{
document.querySelector('.edit-product-form').style.display = 'none';
window.location.href = 'admin_products.php';
}
script.js
let userBox = document.querySelector('.header .header-2 .user-box');
document.querySelector('#user-btn').onclick = () =>{
userBox.classList.toggle('active');
navbar.classList.remove('active');
}
let navbar = document.querySelector('.header .header-2 .navbar');
document.querySelector('#menu-btn').onclick = () =>{
navbar.classList.toggle('active');
userBox.classList.remove('active');
}
window.onscroll = () =>{
userBox.classList.remove('active');
navbar.classList.remove('active');
if(window.scrollY > 60){
document.querySelector('.header .header-2').classList.add('active');
}else{
document.querySelector('.header .header-2').classList.remove('active');
}
}