Cześć mam duży problem z zapytaniem mającym za zadanie dodać nowy produkt na stronę poprzez wstawienie informacji o nim do tabeli 'products'.
Mam stworzoną klasę w PHP o nazwie 'Product', która posiada m. in. funkcję 'addProduct':
class Product
{
public $db = null;
public function __construct(DBController $db){
if(!isset($db->con)) return null;
$this->db = $db;
}
// add product
public function addProduct($item_genre, $item_brand, $item_name, $item_price, $item_image, $table){
if ($this->db->con != null) {
if(isset($item_name) && isset($item_genre) && isset($item_brand) && isset($item_price) &&
isset($item_image)){
if(is_double(doubleval($item_price))) {
$columns = 'item_genre, item_brand, item_name, item_price, item_image';
$result = $this->db->con->query("INSERT INTO {$table}({$columns}) VALUES ({$item_genre}, {$item_brand}, {$item_name}, {$item_price}, {$item_image})");
return $result;
} else {
echo "<div class='px-5 pb-2'><p style='color: red'>Cena musi być wartością numeryczną</p></div>";
}
} else {
echo "<div class='px-5 pb-2'><p style='color: red'>Proszę uzupełnić wszystkie dane</p></div>";
}
}
}
}
Chcę teraz, żeby po naciśnięciu odpowiedniego przycisku na stronie pojawił się formularz z polami do wpisania odpowiednich danych, wysłanych później jako zapytanie typu INSERT INTO do tabeli 'products'. Oto jak wygląda to na stronie:
<!-- New Products-->
<?php
if (!isset($_SESSION['logged'])) {
header('Location: ../login.php');
exit();
}
shuffle($product_shuffle);
// request method post
if($_SERVER['REQUEST_METHOD'] == "POST"){
if(isset($_POST['new_products_submit'])){
// call method addToCart
$Cart->addToCart($_POST['user_id'], $_POST['item_id']); // inna funkcja odpowiedzialna za dodawanie produktów do koszyka
}
// wywołanie funkcji aby dodać produkt
if(isset($_POST['add_product_confirm'])){
// call method addProduct
$product->addProduct($_POST['item_genre'], $_POST['item_brand'], $_POST['item_name'], $_POST['item_price'], $_POST['item_image'], 'product');
}
}
?>
<section id="new-products">
<div class="container">
<h4 class="font-rubik font-size-20">Nowe Produkty</h4>
<?php
if(!isset($_POST['add_product_submit'])){
?>
<form method="POST">
// przycisk, który ma wyświetlić formularz
<button type="submit" name="add_product_submit" class="btn btn-success text-white font-size-16">DODAJ PRODUKT</button>
</form>
<?php
} else { // jeżeli przycisk jest wciśnięty wyświetl formularz
echo "<div class='pt-2'><hr>";
echo "<h4 style='color: green'>Dodaj produkt:</h4>";
echo "<form method='post'>";
echo "<p>Nazwa produktu: <input type='text' name='item_name'></p>";
echo "<p>Gatunek muzyczny: <input type='text' name='item_genre'></p>";
echo "<p>Artysta: <input type='text' name='item_brand'></p>";
echo "<p>Cena produktu: <input type='text' name='item_price'></p>";
echo "<p>Ścieżka do obrazka: <input type='text' name='item_image'></p>";
echo "<p><input type='submit' name='add_product_confirm'></p>";
echo "</form>";
echo "<hr></div>";
}
?>
<hr>
<div class="owl-carousel owl-theme">
<?php foreach ($product_shuffle as $item) {?>
<div class="item p-2 bg-light">
<div class="product font-rale">
<a href="<?php printf('%s?item_id=%s', 'Admin_product.php', $item['item_id']); ?>"><img src="<?php echo $item['item_image'] ?? "/assets/products/1.png"; ?>" alt="product1" class="img-fluid"></a>
<div class="text-center pt-4">
<h6><?php echo $item['item_name'] ?? "Unknown";?></h6>
<p class="font-size-14"><?php echo $item['item_brand'] ?? "Brand"; ?></p>
<div class="price py-1">
<span>$<?php echo $item['item_price'] ?? '0'; ?></span>
</div>
<form method="POST">
<input type="hidden" name="item_id" value="<?php echo $item['item_id'] ?? '1'; ?>">
<input type="hidden" name="user_id" value="<?php echo '1'; ?>">
<?php
if (in_array($item['item_id'], $Cart->getCartId($product->getData('cart')) ?? [])){
echo '<button type="submit" disabled class="btn btn-success font-size-12">W Koszyku</button>';
}else{
echo '<button type="submit" name="top_sale_submit" class="btn color-skin-bg color-second font-size-12">Dodaj do Koszyka</button>';
}
?>
</form>
</div>
</div>
</div>
<?php } // closing foreach ?>
</div>
</div>
</section>
<!-- !New Products-->
Tak prezentuje się tabela product:

i przykładowe dane, które zwiera:

Problem pojawia się po wysłaniu przykładowych danych przez formularz:

Mianowicie wyświetla błąd:
Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Pop' in 'field list' in C:\Users\kawcz\PhpstormProjects\Sklep_Internetowy\database\Product.php:52 Stack trace: #0 C:\Users\kawcz\PhpstormProjects\Sklep_Internetowy\database\Product.php(52): PDO->query('INSERT INTO pro...') #1 C:\Users\kawcz\PhpstormProjects\Sklep_Internetowy\Admin Template\Admin_new-products.php(20): Product->addProduct('Pop', 'Tyler', 'IGOR', '10.40', 'assets/products...', 'product') #2 C:\Users\kawcz\PhpstormProjects\Sklep_Internetowy\Admin_Index.php(29): include('C:\\Users\\kawcz\\...') #3 {main} thrown in C:\Users\kawcz\PhpstormProjects\Sklep_Internetowy\database\Product.php on line 52
Pokazuje że na linii 52, ponieważ nie wklejałem tutaj niepotrzebnych w tej sprawie funkcji klasy Product, ale chodzi o linię:
$result = $this->db->con->query("INSERT INTO {$table}({$columns}) VALUES ({$item_genre}, {$item_brand}, {$item_name}, {$item_price}, {$item_image})");
Nie mam pojęcia czemu, ale wygląda na to, że skrypt przyjmuje wartości, które mają być przesłane jako nazwy kolumn (Column not found: 1054 Unknown column 'Pop' in 'field list'). Czy byłby ktoś w stanie pomóc rozwiązać ten problem, jest to dla mnie bardzo ważne. Z góry dziękuję.