O nome do produto está sendo inserido de forma repetitiva no Mysql

09/02/2020

0

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é

André

Responder

Posts

10/02/2020

Kleber Santos

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.
Responder

10/02/2020

Kleber Santos

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.


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
}
Responder

10/02/2020

André Luis

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);
    }
Responder

11/02/2020

Kleber Santos

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?








Responder

11/02/2020

André Luis

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?
Responder

14/02/2020

Kleber Santos

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
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar