Skip to content
Snippets Groups Projects
Commit 409d2f65 authored by Christophorus Dharma Winata's avatar Christophorus Dharma Winata
Browse files

feat: index.php in root

feat!: clicking an item from catalog redirect to make-purchase.php
feat: item_query.php
fix(catalog.js): inner html of items, deleting unnecessary function
fix: request method of item
feat: db+mock sql schema
fix: specifying navbar style
fix!: restyling login page
fix!: catalog display as grid
feat!: make-purchase styling
parent e8c2c78a
No related merge requests found
......@@ -34,6 +34,10 @@
}
.catalogview{
display: grid;
grid-template-columns: auto auto auto auto auto;
grid-template-rows: auto auto;
gap : 20px;
height: 85vh;
padding-top: 20px;
text-align: center;
......@@ -66,10 +70,15 @@
background-color: #ddd;
}
#item_field {
display: flex;
flex-direction: row;
align-items: stretch;
}
.showItem{
width: 18%;
margin: 10px;
height: 35vh;
height: inherit;
background-color: #e9e9e9;
border-radius: 10px;
border: none;
......@@ -78,10 +87,10 @@
}
.showItem img{
width: 90%;
height: 50%;
width: auto;
/* height: 50%; */
margin-bottom: 5px;
text-align: center;
align-self: center;
}
.showItem p{
......
......@@ -12,7 +12,7 @@
.container{
width: 100%;
height: 100vh;
background-image: linear-gradient(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.8)), url(../image/bg.webp);
/* background-image: linear-gradient(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.8)), url(../image/bg.webp); */
mix-blend-mode: multiply;
background-position: center;
background-size: cover;
......@@ -30,6 +30,9 @@
max-width: 740px;
max-height: 199px;
background-color: transparent;
padding: 15px;
background-color: #AA1E1E;
border-radius: 10px;
}
......@@ -91,12 +94,13 @@ form p{
text-align: center;
font-size: 20px;
margin-bottom: 10px;
color: #ffffffab;
/* color: #ffffffab; */
border-color: black;
}
form p a{
text-decoration: underline;
color: #ffffffab;
/* color: #ffffffab; */
}
.btn-field{
......@@ -121,4 +125,10 @@ form p a{
.btn-field button.disable{
background: linear-gradient(#ffffffab, rgba(255,255,255,0.67));
color: #555;
}
#registration{
padding: 15px;
background-color: #eaeaea;
border-radius: 10px;
}
\ No newline at end of file
......@@ -32,66 +32,50 @@
.purchaseform-group h1 {
font-size: 30px;
padding-bottom: 10px;
}
#price-criteria, #quantity-criteria {
text-align : left;
font-size : small;
color: red;
padding-left: 10px;
/* color : #ffffffab; */
}
@media screen and ((max-width: 600px)) {
.input-group{
display: flex;
flex-direction: column;
}
}
#purchaseform {
display: flex;
flex-direction: column;
flex: 1 1 auto;
flex-direction: row;
justify-content: space-between;
}
.input-group {
#image-seller-field {
display: flex;
flex: 1 1 auto;
}
.input-image-field {
width: 25vw;
max-height: 25vw;
display: inline-flex;
flex-direction: column;
border-radius: 10px;
flex-flow: column nowrap;
/* flex: 1 1 auto; */
height: fit-content;
transition: max-height 0.5s;
}
.input-text-fields {
flex: 1 1 auto;
#image-seller-field img {
height: 100%;
width: auto;
}
#input-text-fields {
padding: 10px;
display: flex;
flex-direction: column;
}
.input-field {
margin: 10px;
width: fit-content;
min-width: 25%;
/* padding: 10px; */
/* margin: 10px; */
border-radius: 10px;
align-items: center;
background-color: #eaeaea;
/* background-color: #eaeaea; */
transition: max-height 0.5s;
overflow: hidden;
color: black ;
}
#product_description-field{
display: flex;
flex-direction: column;
align-items: baseline;
width: fit-content;
}
#product_description {
#input-field p {
flex: 1 1 auto;
resize:vertical;
resize:none;
width: auto;
background-color: transparent;
padding: 10px;
font-size: small;
......@@ -100,12 +84,8 @@
.input-field ::placeholder {
color: black;
opacity: 1;
}
/* #product_image {
background-color: azure;
} */
.input-field input {
width: 100%;
padding: 18px;
......@@ -136,8 +116,77 @@
transition: background 1s;
}
#image-preview {
background-color: azure;
width: 24vw;
max-height: 24vw;
@media screen and (max-width: 768px){
#purchaseform {
flex-direction: column;
}
#image-seller-field {
padding: 10px;
align-self: center;;
}
#input-text-fields {
gap: 0;
}
}
#buy-details {
display: flex;
flex-shrink: 0;
flex-flow: column nowrap;
gap: 10px;
align-items: center;
margin-left: auto;
}
#buy-details button {
background: #3c00a0;
color: #fff;
height: 40px;
width: 40px;
border-radius: 10px;
font-size: 20px;
border: 0;
outline: 0;
cursor: pointer;
transition: background 1s;
}
#buy-quantity {
align-self: center;
}
#quantity-price-field {
flex: 1 1 auto;
display: flex;
flex-flow: row nowrap;
justify-content: space-between;
}
#buy-quantity-field {
gap: 10px;
display: flex;
flex-flow: row nowrap;
}
#buy-price-field {
align-self: center;
}
#add2cart-button-field {
display: flex;
background: #3c00a0;
color: #fff;
height: 40px;
/* width: 40px; */
border-radius: 10px;
font-size: 20px;
border: 0;
outline: 0;
cursor: pointer;
transition: background 1s;
align-items: center;
padding: 15px;
align-self: center;
}
#name-field {
margin-bottom: 0px;
}
\ No newline at end of file
......@@ -135,7 +135,7 @@ input{
width: 50%;
margin-top: 7px;
}
img{
.tabgroup img{
display: none;
}
}
......
......@@ -37,13 +37,13 @@ myPromises.then(
);
prevPage = () => {
activePage = document.getElementsByClassName("active").item(0).innerHTML;
if (activePage > 1){
activePage--;
changePage(activePage);
}
prevPage = () => {
activePage = document.getElementsByClassName("active").item(0).innerHTML;
if (activePage > 1){
activePage--;
changePage(activePage);
}
}
nextPage = () => {
activePage = document.getElementsByClassName("active").item(0).innerHTML;
......@@ -53,12 +53,6 @@ nextPage = () => {
}
}
function redirectToPurchase(id) {
location.href = "make-purchase.html";
// location.href = "make-purchase.php";
localStorage.setItem("purchase", id)
}
function changePage(page){
var btnNext = document.getElementById("btnNext");
var btnPrev = document.getElementById("btnPrev");
......@@ -74,8 +68,11 @@ function changePage(page){
var row = (page-1)*10;
formdata.append('rows', row);
// taking search keyword from search bar
formdata.append('search', document.getElementById("Searchinput").value);
console.log(document.getElementById("Searchinput").value);
const xhr = new XMLHttpRequest();
xhr.open('POST', '../../server/controllers/catalog.php', true);
//sending
......@@ -97,13 +94,19 @@ function changePage(page){
listingTable.innerHTML ="";
for (var i = 0; i < 10 && itemList.length ; i++){
listingTable.innerHTML += `<button class="showItem" onclick = "redirectToPurchase('${itemList[i][0]}')">
<img id="${itemList[i][0]}" src="../image/${itemList[i][2]}" alt="${itemList[i][1]}">
<p>${itemList[i][1]}</p>
<p>Rp${itemList[i][4]}</p>
<p>Quantity:${itemList[i][5]}</p>
<p>${itemList[i][6]}</p>
</button>`
// listingTable.innerHTML += `<button class="showItem" onclick = "redirectToPurchase('${itemList[i][0]}')">
listingTable.innerHTML += `
<form action="../pages/make-purchase.php" method="GET" id="item_field">
<button class="showItem" type="submit">
<input type="hidden" name="id" value="${itemList[i][0]}">
<img id="${itemList[i][0]}" src="../image/${itemList[i][2]}" alt="${itemList[i][1]}">
<p>${itemList[i][1]}</p>
<p>Rp${itemList[i][4]}</p>
<p>Quantity:${itemList[i][5]}</p>
<p>${itemList[i][6]}</p>
</button>
</form>
`
}
var endpage = numPages-5;
......
......@@ -10,29 +10,43 @@ function closeSidebar(){
document.getElementById("tabexpand").setAttribute("onclick","");
}
// function adminPrivilege() {
// document.getElementById("adduser").style.display = 'block';
// document.getElementById("manageuser").style.display = 'block';
// // else display none for each
// }
// function userPrivilege() {
// document.getElementById("manageitem").style.display = 'block';
// document.getElementById("makesale").style.display = 'block';
// document.getElementById("logout").style.display = 'block';
// // else display none for each
// }
addsidebar = () => {
/* FIXME: How to make sidebar take session data, so it can control access for admin, user, and guests
<script>
var username_js = '<?php echo $_SESSION['username'];?>'
var admin_status_js = '<?php echo $_SESSION['admin_status'];?>'
</script> */
return document.getElementById("sidebar").innerHTML = `
<li><a href='../pages/account-page.php' id="manageuser">
<i class="fa-solid fa-user"></i> Account
<li><a href='../pages/account-page.php' id="manageaccount">
<i class="fa-solid fa-user"></i>Account
</a></li>
<li><a href='../pages/user-manage.php' id="manageuser">
<i class="fa-solid fa-people-roof"></i>
Manage User
<i class="fa-solid fa-people-roof"></i>Manage User
</a></li>
<li><a href='#' id="manageitem">
<i class="fa-solid fa-layer-group"></i>
Manage Item
<i class="fa-solid fa-layer-group"></i>Manage Item
</a></li>
<li><a href='#' id="adduser">
<i class="fa-solid fa-user-plus"></i>
Add User
<i class="fa-solid fa-user-plus"></i>Add User
</a></li>
<li><a href='../pages/make-sale.php' id="makesale">
<i class="fa-solid fa-cart-plus"></i>
Make Sale
</a></li>
<i class="fa-solid fa-cart-plus"></i>Make Sale
</a></li>
<li><a href='../../server/controllers/signout.php' id="logout">
<i class="fa-solid fa-right-from-bracket"></i>
Log Out
</a></li>1`
<i class="fa-solid fa-right-from-bracket"></i>Log Out
</a></li>
`
}
\ No newline at end of file
<?php session_start();
require_once "../../server/controllers/loggedout_catch.php";
?>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial scale=1.0">
<title>Make Purchase</title>
<link rel="stylesheet" href="../css/make-purchase.css">
<link rel="stylesheet" href="../css/navbar.css">
<link rel="stylesheet" href="../css/sidebar.css">
<script src="../js/navbar.js"></script>
<script src="../js/sidebar.js"></script>
<script src="https://kit.fontawesome.com/8505941c5b.js" crossorigin="anonymous"></script>
<script src="../js/make-purchase.js"></script>
</head>
<body>
<div class="container">
<div class="tabgroup" id="tabgroup">
<script>addnavbar();</script>
</div>
<div class="purchaseform-group">
<h1 id="title">Make A Purchase</h1>
<div id="purchaseform">
<script>
itemDetail();
</script>
</div>
</div>
<div class="sidebar" id="sidebar">
<script>
addsidebar();
</script>
</div>
</div>
</body>
</html>
\ No newline at end of file
<?php session_start();
require_once "../../server/controllers/item_query.php";
$query_response = item_query($_GET['id']);
$response_data = $query_response[0];
$item_details = array(
"id" => $response_data['item_id'],
"name" => $response_data['name'],
"picture_path" => $response_data['picture_path'],
"description" => $response_data['description'],
"price" => $response_data['price'],
"quantity" => $response_data['quantity'],
"seller_username" => $response_data['Seller_username']
);
?>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial scale=1.0">
<title>Make Purchase</title>
<link rel="stylesheet" href="../css/make-purchase.css">
<link rel="stylesheet" href="../css/navbar.css">
<link rel="stylesheet" href="../css/sidebar.css">
<script src="../js/navbar.js"></script>
<script src="../js/sidebar.js"></script>
<script src="https://kit.fontawesome.com/8505941c5b.js" crossorigin="anonymous"></script>
<script src="../js/make-purchase.js"></script>
</head>
<body>
<div class="container">
<div class="tabgroup" id="tabgroup">
<script>addnavbar();</script>
</div>
<div class="purchaseform-group">
<h1 id="title">Make A Purchase</h1>
<div id="purchaseform">
<div id="image-seller-field">
<img src="../image/no_picture.jpeg">
<div class="input-field" id="seller-field">
<p type="text" id="seller_username"><?php echo $item_details["seller_username"]?></p>
</div>
</div>
<div id="input-text-fields">
<div class="input-field" id="name-field">
<h2 type="text" id="product_name" disabled><?php echo $item_details["name"]?> </h2>
</div>
<div class="input-field" id="product_price-field">
<h1 type="text" id="product_price" disabled>Rp<?php echo $item_details["price"]?> </h1>
</div>
<div class="input-field" id="product_quantity-field">
<p type="text" id="product_quantity" disabled> Stock: <?php echo $item_details["quantity"]?> </p>
</div>
<br>
<div class="input-field" id="product_description-field">
<p type="text" id="product_description" disabled><?php echo $item_details["description"]?> </p>
</div>
</div>
<div id= "buy-details">
<div id="buy-quantity-field">
<button id="min-quantity">
<i class="fa-solid fa-minus"></i>
</button>
<div id="buy-quantity">
<p>1</p>
</div>
<button id="plus-quantity">
<i class="fa-solid fa-plus"></i>
</button>
</div>
<div id="buy-price-field">
<p><?php echo $item_details["quantity"]?> </p>
</div>
<div id="add2cart-button-field">
<i class="fa-solid fa-cart-shopping">
</i>
Add To Cart
</div>
</div>
</div>
</div>
<div class="sidebar" id="sidebar">
<script>
addsidebar();
</script>
</div>
</div>
</body>
</html>
\ No newline at end of file
<?php
// Redirect to home.php
session_start();
header("Location: client/pages/catalog.php");
exit();
?>
<?php
require_once "connect_database.php";
function item_query($id) {
if ($_SERVER["REQUEST_METHOD"] == "GET"){
$id = $_GET["id"];
$conn = connect_database();
$query = "SELECT * FROM `item` WHERE item_id = (?)";
$stmt = $conn->prepare($query);
if (!$stmt){
die("Error in query preparation: ". $conn->error);
}
$stmt->bind_param("i", $id);
$result = $stmt->execute();
if (!$result){
die("Error in query execution: " . $stmt->error);
}
$resultSet = $stmt->get_result();
// $rows = $resultSet->fetch_all(MYSQLI_ASSOC);
// if (!empty($rows)){
// $response = array("success" => true, "message" => "data sent", "data" => $rows);
// } else {
// $response = array("success" => false, "message" => "Error: not found");
// }
mysqli_close($conn);
return $resultSet->fetch_all(MYSQLI_ASSOC);
}
}
?>
\ No newline at end of file
<?php
require_once "connect_database.php";
global $conn; $conn = connect_database();
if ($_SERVER["REQUEST_METHOD"] == "POST" and $_POST["signal"] == "make-purchase") {
global $conn;
$query = "SELECT * FROM `item` WHERE item_id = (?)
";
$item_id = $_POST["item_id"];
$stmt = $conn->prepare($query);
if (!$stmt) {
die("Error in query preparation". $conn->error);
}
$stmt->bind_param("i", $item_id);
$result = $stmt->execute();
$resultSet = $stmt->get_result();
if (!$result) {
$response = array("success" => "false", "message" => $stmt.error);
die ("Error in query execution: " . $stmt->error);
} else {
$response = array("success" => "true", "message" => "item has been added", "data" => $resultSet->fetch_all(MYSQLI_ASSOC));
}
echo json_encode($response);
mysqli_close($conn);
}
?>
\ No newline at end of file
This diff is collapsed.
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment