O nome do produto está sendo inserido de forma repetitiva no Mysql
No meu código, $this->details() me retorna todos os detalhes dos produtos, tais como ID, nome do produto, descrição etc. No carrinho de compras quando o usuário finaliza a compra os dados dos itens que ele pediu são inseridos no BD. O problema é que cada produto tem um nome, e quando o usuário finaliza a compra está sendo inserido apenas o Nome do primeiro produto do carrinho repetitivamente. o ID do produto inserido na hora da compra é diferente para cada produto, mas o nome é repetido em todos, quando na verdade, cada produto deveria ter um nome diferente. Tentei fazer um foreach para tentar resolver o problema, mas continua a mesma coisa. Se alguém puder me ajudar por gentileza, agradeço :)
$this->start(); foreach($this->details() as $product_name){ $product = $product_name['product_name']; } // Insert the items if ($pass) { $this->details(); $this->orderID = $this->lastID; $sql = "INSERT INTO `orders_items` (`order_id`, `product_id`, `quantity`, `product_name`) VALUES "; $cond = []; foreach ($_SESSION['cart'] as $id=>$qty) { $sql .= "(?, ?, ?, ?),"; array_push($cond, $this->orderID, $id, $qty, $product); } $sql = substr($sql, 0, -1) . ";"; $pass = $this->exec($sql, $cond); }
André
Curtidas 0
Respostas
Kleber Santos
09/02/2020
Achei meio confusa essa tua lógica.
Sugiro você pegar um papel e anotar o valor das variáveis linha por linha respeitando as validações e loops, assim você consegue entender o que está acontecendo no teu código.
Sugiro você pegar um papel e anotar o valor das variáveis linha por linha respeitando as validações e loops, assim você consegue entender o que está acontecendo no teu código.
GOSTEI 0
Kleber Santos
09/02/2020
Achei meio confusa essa tua lógica.
Sugiro você pegar um papel e anotar o valor das variáveis linha por linha respeitando as validações e loops, assim você consegue entender o que está acontecendo no teu código.
Sugiro você pegar um papel e anotar o valor das variáveis linha por linha respeitando as validações e loops, assim você consegue entender o que está acontecendo no teu código.
Eu não lembro muito bem a sintaxe do PHP, más acredito que você vai ter que montar um array de objetos mais ou menos assim:
produtos: [
{ order_id= 1,
product_id= 2
quantity = 3,
product_name= nome1
},
{ order_id= 2,
product_id= 2
quantity = 3,
product_name= nome2
},
{ order_id= 3,
product_id= 2
quantity = 3,
product_name= nome3
}
]
depois fazer um foreach percorrendo o array de produtos
foreach ($produtos as $produto) {
echo produto
}
GOSTEI 0
André Luis
09/02/2020
Mudei algumas coisas no código, vê se fica menos confuso
if ($pass) { $this->details(); foreach ($this->details() as $nome) { $product_name = $nome[$id]['product_name']; } $this->orderID = $this->lastID; $sql = "INSERT INTO `orders_items` (`order_id`, `product_id`, `quantity`, `product_name`) VALUES "; $cond = []; foreach ($_SESSION['cart'] as $id=>$qty) { $sql .= "(?, ?, ?, ?),"; array_push($cond, $this->orderID, $id, $qty, $product_name); } $sql = substr($sql, 0, -1) . ";"; $pass = $this->exec($sql, $cond); }
GOSTEI 0
Kleber Santos
09/02/2020
Mudei algumas coisas no código, vê se fica menos confuso
if ($pass) { $this->details(); foreach ($this->details() as $nome) { $product_name = $nome[$id]['product_name']; } $this->orderID = $this->lastID; $sql = "INSERT INTO `orders_items` (`order_id`, `product_id`, `quantity`, `product_name`) VALUES "; $cond = []; foreach ($_SESSION['cart'] as $id=>$qty) { $sql .= "(?, ?, ?, ?),"; array_push($cond, $this->orderID, $id, $qty, $product_name); } $sql = substr($sql, 0, -1) . ";"; $pass = $this->exec($sql, $cond); }
foreach ($_SESSION['cart'] as $id=>$qty) {
$sql .= "(?, ?, ?, ?),";
array_push($cond, $this->orderID, $id, $qty, $product_name);
}
o loop do foreach está assim:
id qty $product_name
0 qty[0] $product_name[0]
1 qty[1] $product_name[0]
2 qty[2] $product_name[0]
3 qty[3] $product_name[0]
Percebeu que você não está percorrendo o array de produtos?
GOSTEI 0
André Luis
09/02/2020
Mudei algumas coisas no código, vê se fica menos confuso
if ($pass) { $this->details(); foreach ($this->details() as $nome) { $product_name = $nome[$id]['product_name']; } $this->orderID = $this->lastID; $sql = "INSERT INTO `orders_items` (`order_id`, `product_id`, `quantity`, `product_name`) VALUES "; $cond = []; foreach ($_SESSION['cart'] as $id=>$qty) { $sql .= "(?, ?, ?, ?),"; array_push($cond, $this->orderID, $id, $qty, $product_name); } $sql = substr($sql, 0, -1) . ";"; $pass = $this->exec($sql, $cond); }
foreach ($_SESSION['cart'] as $id=>$qty) {
$sql .= "(?, ?, ?, ?),";
array_push($cond, $this->orderID, $id, $qty, $product_name);
}
o loop do foreach está assim:
id qty $product_name
0 qty[0] $product_name[0]
1 qty[1] $product_name[0]
2 qty[2] $product_name[0]
3 qty[3] $product_name[0]
Percebeu que você não está percorrendo o array de produtos?
Poderia me dar um exemplo de como ficaria o código corretamente?
GOSTEI 0
Kleber Santos
09/02/2020
Mudei algumas coisas no código, vê se fica menos confuso
if ($pass) { $this->details(); foreach ($this->details() as $nome) { $product_name = $nome[$id]['product_name']; } $this->orderID = $this->lastID; $sql = "INSERT INTO `orders_items` (`order_id`, `product_id`, `quantity`, `product_name`) VALUES "; $cond = []; foreach ($_SESSION['cart'] as $id=>$qty) { $sql .= "(?, ?, ?, ?),"; array_push($cond, $this->orderID, $id, $qty, $product_name); } $sql = substr($sql, 0, -1) . ";"; $pass = $this->exec($sql, $cond); }
foreach ($_SESSION['cart'] as $id=>$qty) {
$sql .= "(?, ?, ?, ?),";
array_push($cond, $this->orderID, $id, $qty, $product_name);
}
o loop do foreach está assim:
id qty $product_name
0 qty[0] $product_name[0]
1 qty[1] $product_name[0]
2 qty[2] $product_name[0]
3 qty[3] $product_name[0]
Percebeu que você não está percorrendo o array de produtos?
Poderia me dar um exemplo de como ficaria o código corretamente?
Faça um echo em $this->details() e também em $_SESSION['cart'], e envie aki
GOSTEI 0