#javascript #php #jquery #mysql
#javascript #php #jquery #mysql
Вопрос:
У меня нет правильного названия вопроса, но я постараюсь задать свой вопрос как можно более четко.
product_table
ID | product_code | product name | company_id
1 | 12345 | beer cake |343434defee
2 | 12346 | vodka cake |343434deereee
product_table
Product_code |Quantity | price | weight
12345 | 34 |345 |0.5
12345 | 343 |600 |1.0
12345 | 4 |845 |1.5
12346 | 341 |345 |0.5
Вот как выглядят мои две таблицы на стороне базы данных, product_code
во второй таблице — внешний ключ, а product_code
и weight
являются составными ключами для второй таблицы.
В первой таблице ID
первичный ключ product_code
является уникальным.
Mysql используется на стороне базы данных, Php на стороне сервера, а JS / Jquery используется на стороне клиента.
Предположим, я должен отобразить эти продукты на целевой странице продукта.
У него есть два варианта веса 0.5
1.0
, и их может быть больше.В зависимости от веса для соответствующего присутствующего продукта.
Чего я пытался добиться, так это каким-то образом отобразить эти продукты на целевой странице, и когда пользователь нажимает на конкретный вес, должны отображаться цена и количество соответствующего веса.
Учтите, что в первых трех строках второй таблицы должны появиться три отдельные кнопки для них, и далее, если какая-либо из них имеет значение ноль, она должна быть отключена или этот вес не должен отображаться.
Во-вторых, если все веса имеют количество, равное нулю, отобразите распроданное изображение.
Как я могу добиться этого с помощью JS / JQUERY / HTML / PHP?
С уважением,
BOTJr.
Спасибо.
Комментарии:
1. дорогой друг, я рад, что мне удалось вам помочь, если вы можете просто отметить это правильным ответом 🙂
Ответ №1:
База данных:
CREATE TABLE `product_table` (
`id` INT NOT NULL AUTO_INCREMENT,
`product_code` INT NULL,
`product_name` VARCHAR(45) NULL,
`company_id` VARCHAR(45) NULL,
PRIMARY KEY (`id`));
CREATE TABLE `product_table_price` (
`product_code` int(11) NOT NULL,
`quantity` int(11) DEFAULT NULL,
`price` varchar(45) DEFAULT NULL,
`weight` varchar(45) DEFAULT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
)
INSERT INTO `product_table` (`product_code`, `product_name`, `company_id`) VALUES ('12345', 'beer cake', '343434defee');
INSERT INTO `product_table` (`product_code`, `product_name`, `company_id`) VALUES ('12346', 'vodka cake', '343434deereee');
INSERT INTO `product_table_price` (`product_code`, `quantity`, `price`, `weight`) VALUES ('12345', '34', '345', '0.5');
INSERT INTO `product_table_price` (`product_code`, `quantity`, `price`, `weight`) VALUES ('12345', '343', '600', '1.0');
INSERT INTO `product_table_price` (`product_code`, `quantity`, `price`, `weight`) VALUES ('12345', '4', '845', '1.5');
INSERT INTO `product_table_price` (`product_code`, `quantity`, `price`, `weight`) VALUES ('12346', '341', '345', '0.5');
db.php подключение к базе данных:
<?php
$username = 'kmoshe';
$password = 'password';
$host = 'localhost';
$dbname = 'test';
$conn = new PDO("mysql:host=$host;dbname=$dbname",$username, $password
,
array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => false,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
));
index.php:
<?php
require_once './db.php';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>StackOverFlow</title>
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous">
</script>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="text/javascript" src="app.js"></script>
</head>
<body>
<div id="products">
<?php
// In this part of the code i'm building div's that have tag attributes that i've created with the
// row-id, product-code, that those attributes contain the values from the db
// i have given a class name of item, and i'm going to catch the click event on this with JQuery
$sql = "SELECT * FROM product_table";
$stmt = $conn->prepare($sql);
$stmt->execute();
while ($row = $stmt->fetch()){ ?>
<div class="item" row-id="<?=$row['id'];?>" product-code="<?=$row['product_code']?>"><span><?= $row['product_name'];?></span></div>
<?php } ?>
</div>
</body>
</html>
app.js:
$(document).ready( function(){
$(document).on('click','.item', function(e) {
let pressedRowID =$(this).attr('row-id');
let pressedProductCode =$(this).attr('product-code');
let fd = new FormData();
fd.append('id', pressedRowID);
fd.append('product_code', pressedProductCode);
console.log(pressedRowID, pressedProductCode);
// In this part of the code according to the pressed product-code, we are going to fetch
// the rows from the second table, the php will return a json structure that contains the 3 rows
// or more with the price and the quantity.
$.ajax({
url: "get_buttons.php",
type: "POST",
data: fd,
processData: false,
contentType: false,
complete: function (results) {
try {
let str = JSON.parse(results.responseText);
updateDOM(str);
console.log(str)
} catch (e) {
console.error(e.message);
}
},
});
}) ;
updateDOM = (buttons) => {
let disabled;
let weight;
let buttons_dom='';
let buttons_container = $('#buttons-container');
for (let property in buttons) {
if(buttons[property].hasOwnProperty('quantity') amp;amp; parseInt(buttons[property]['quantity']) !== 0) {
disabled = '';
} else if (buttons[property].hasOwnProperty('quantity') amp;amp; parseInt(buttons[property]['quantity']) === 0) {
disabled = 'disabled';
}
if(buttons[property].hasOwnProperty('weight')) {
weight = buttons[property]['weight'];
}
buttons_dom = `<button ${disabled}>${weight}</button>`;
}
buttons_container.html ('');
buttons_container.append(buttons_dom);
};
});
get_buttons.php:
<?php
require_once 'db.php';
$product_code = $_REQUEST['product_code'];
$sql = "SELECT * FROM product_table_price where product_code=$product_code";
$stmt = $conn->prepare($sql);
$stmt->execute();
$product_items = [];
$product_item = [];
while ($row = $stmt->fetch()){
$product_item['product_code'] = $row['product_code'];
$product_item['quantity'] = $row['quantity'];
$product_item['price'] = $row['price'];
$product_item['weight'] = $row['weight'];
$product_item['id'] = $row['id'];
array_push($product_items, $product_item);
}
echo json_encode($product_items);