/api/products/readAllCountry.php?country_id=1
product_country
на против в таблице country_id=1
/api/products/readAllCountry.php
вывести только те товары у которых есть напротив в таблице и country_id=1
и country_id=2
то есть все города.product_country
выше если переход на страницу /api/products/readAllCountry.php
должен вывестись только товар с id 1 так как этот товар продается во всех странах в данном случае в двух. А перейдя по ссылке /api/products/readAllCountry.php?country_id=1
я должен получить уже два товара с id=1 и 2 $product->country_id = isset($_GET["country_id"]) ? $_GET["country_id"] : die();
/api/products/readAllCountry.php?country_id=1
и по ссылке /api/products/readAllCountry.php?country_id=2
// метод readCountryIdAll() - получение абсолютно всех товаров которы продаются во всех странах
function readCountryIdAll() {
// выбираем все записи
$query = "select
country.* ,
products.*
from country
join product_country on country.id = product_country.country_id
join products on products.id = product_country.product_id";
// подготовка запроса
$stmt = $this->conn->prepare($query);
// выполняем запрос
$stmt->execute();
return $stmt;
}
/api/products/readAllCountry.php
получаю два раза один и тот же продукт c id1 и один продукт с id2. Всего в бд 2 продукта<?php
// необходимые HTTP-заголовки
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
// подключение базы данных и файл, содержащий объекты
include_once "../config/database.php";
include_once "../models/products.php";
// получаем соединение с базой данных
$database = new Database();
$db = $database->getConnection();
// инициализируем объект
$product = new Product($db);
// запрашиваем товары
$stmt = $product->readCountryIdAll();
$num = $stmt->rowCount();
// проверка, найдено ли больше 0 записей
if ($num>0) {
// массив товаров
$products_arr = array();
$products_arr["records"] = array();
// получаем содержимое нашей таблицы
// fetch() быстрее, чем fetchAll()
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// извлекаем строку
extract($row);
$product_item = array(
"id" => $id,
"name" => $name,
"description" => html_entity_decode($description),
"price" => $price,
"subcategory_id" => $subcategory_id,
"subcategory_name" => $subcategory_name
);
array_push($products_arr["records"], $product_item);
}
// устанавливаем код ответа - 200 OK
http_response_code(200);
// выводим данные о товаре в формате JSON
echo json_encode($products_arr);
} else {
// установим код ответа - 404 Не найдено
http_response_code(404);
// сообщаем пользователю, что товары не найдены
echo json_encode(array("message" => "Товары не найдены."), JSON_UNESCAPED_UNICODE);
}
{"records":[
{"id":"1",
"name":"Sony Noise Cancelling Headphones WHCH710N: Wireless Bluetooth Over the Ear Headset with Mic for Phone-Call, Black","description":"Sony Noise Cancelling Headphones WHCH710N: Wireless Bluetooth Over the Ear Headset with Mic for Phone-Call, Black","price":"98","subcategory_id":"1","subcategory_name":null},
{"id":"1",
"name":"Sony Noise Cancelling Headphones WHCH710N: Wireless Bluetooth Over the Ear Headset with Mic for Phone-Call, Black","description":"Sony Noise Cancelling Headphones WHCH710N: Wireless Bluetooth Over the Ear Headset with Mic for Phone-Call, Black","price":"98","subcategory_id":"1","subcategory_name":null},
{"id":"2",
"name":"PlexDisc DVD-R 4.7GB 16x Branded Logo Recordable Media Disc - 100 Disc (no Container) FFP 632-817-BX","description":"PlexDisc DVD-R 4.7GB 16x Branded Logo Recordable Media Disc - 100 Disc (no Container) FFP 632-817-BX","price":"21","subcategory_id":"2","subcategory_name":null}]}
products_countries (product_id, country_id)
данное решение. Ну как быть если после того как пользователь выберет определенную страну, в ней выводить не все разделы, категории и подкатегории а только те в которых есть продукты относящиеся к выбранной стране? CREATE TABLE IF NOT EXISTS `product_country` (
`product_id` int(11) NOT NULL,
`country_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `product_shop` (
`product_id` int(11) NOT NULL,
`shop_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `product_section` (
`product_id` int(11) NOT NULL,
`section_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `product_category` (
`product_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `product_subcategory` (
`product_id` int(11) NOT NULL,
`subcategory_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
products
удалить shop_id
, country_id
и subcategory_id
? CREATE TABLE IF NOT EXISTS `product_country` (
`product_id` int(11) NOT NULL,
`country_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `product_shop` (
`product_id` int(11) NOT NULL,
`shop_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `product_section` (
`product_id` int(11) NOT NULL,
`section_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `product_category` (
`product_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `product_subcategory` (
`product_id` int(11) NOT NULL,
`subcategory_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
products
удалить shop_id
, country_id
и subcategory_id
? products_countries (product_id, country_id)
а таблицу products_countries_categories (product_id, country_id, categry_id,)
Что бы можно было выводить не все категории если пользователь выберет определенную страну а только те категории в которых есть товары которые относятся к указанной стране? products_countries (product_id, country_id)
а таблицу products_countries_categories (product_id, country_id, categry_id,)
Что бы можно было выводить не все категории если пользователь выберет определенную страну а только те категории в которых есть товары которые относятся к указанной стране? CREATE TABLE IF NOT EXISTS `country` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(256) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `shop` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(256) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `product_coutry` (
`product_id` varchar(256) NOT NULL,
`country_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CREATE TABLE IF NOT EXISTS `sections` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(256) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `categories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(256) NOT NULL,
`section_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `subcategory` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(256) NOT NULL,
`category_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(256) NOT NULL,
`description` varchar(256) NOT NULL,
`url` varchar(256) NOT NULL,
`price` double NOT NULL,
`shop_id` int(11) NOT NULL,
`created` datetime NOT NULL,
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
[06-Sep-2022 05:15:00 UTC] PHP Notice: Undefined index: username in /home/patedfrb/public_html/affiliateproduct/do_register.php on line 7
[06-Sep-2022 05:15:00 UTC] PHP Notice: Undefined index: username in /home/patedfrb/public_html/affiliateproduct/do_register.php on line 17
[06-Sep-2022 05:15:00 UTC] PHP Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'username' cannot be null in /home/patedfrb/public_html/affiliateproduct/do_register.php:18
Stack trace:
#0 /home/patedfrb/public_html/affiliateproduct/do_register.php(18): PDOStatement->execute(Array)
#1 {main}
thrown in /home/patedfrb/public_html/affiliateproduct/do_register.php on line 18
<?php
require_once __DIR__.'/boot.php';
// Проверим, не занято ли имя пользователя
$stmt = pdo()->prepare("SELECT * FROM `admin` WHERE `username` = :username");
$stmt->execute(['username' => $_POST['username']]);
if ($stmt->rowCount() > 0) {
flash('Это имя пользователя уже занято.');
header('Location: /'); // Возврат на форму регистрации
die; // Остановка выполнения скрипта
}
// Добавим пользователя в базу
$stmt = pdo()->prepare("INSERT INTO `admin` (`username`, `password`) VALUES (:username, :password)");
$stmt->execute([
'username' => $_POST['username'],
'password' => password_hash($_POST['password'], PASSWORD_DEFAULT),
]);
header('Location: login.php');
<div class="container w-100 p-3">
<div class="row justify-content-center">
<div class="col-4">col-4</div>
<div class="col-8">
<form class="row justify-content-center">
<div class="col-8">
<label for="inputPassword2" class="visually-hidden">URL</label>
<input type="text" class="form-control" id="inputUrl" placeholder="Url">
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary mb-3">Open</button>
</div>
</form>
</div>
</div>
</div>
<div class="col-8">
public class MaxArrayValue {
int[] numbers = {1, 7, 5, 2, 4};
public static int getMaxNumber(int[] numbers) {
//Write code below this line
int max = 1;
for(int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
return numbers[i];
}
}
i
я получаю индекс массива
или такого
То выбирает все записи по стране где cp.country_id IN (2) это id страны
А если запрос такого рода
То выбирает не просто все записи а дублирует их как в таблице
product_country
Товар 1 и товар 3 выводит по два раза.
Если взять такое условие то выводятся всего три товар то есть либо у которых country_id=1 или country_id=2
WHERE cp.country_id IN (1 || 2)";
А вот условие ниже работает по какой то причине точно так же как и то что выше, а должно выводить товары у которых и country_id=1 и country_id=2
WHERE cp.country_id IN (1 && 2)";