Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Carrinho de compras, array de $_SESSION

Gente é o seguinte, fiz um formulário bem simples

<form action="add-to-cart.php" method="post">
   <label for="">Name</label>
   <input type="text" name="name">
   <br> <br>

   <label for="">Money</label>
   <input type="text" name="money">
   <br> <br>

   <input type="submit" value="Submit">
</form>

Ao colocar os valores, irá para a página add-to-cart.php, criando um Array de Session e armazenando o valor de $_POST

<?php

   session_start();

   if (empty($_SESSION['cart'])) {
      $_SESSION['cart'] = [];
   }

   array_push($_SESSION['cart'], $_POST);

?>

<p>
   O Lançamento foi feito com sucesso.
   <a href="lancamento.php">Clique aqui</a>
</p>

Quando chegar na página lancamento.php, coloquei um print_r com a tag pre para ter uma melhor visualização do Array de Session, obtendo o seguinte resultado:

Array
(
    [0] => Array
        (
            [name] => Mathews
            [money] => 50
        )

    [1] => Array
        (
            [name] => Jonas
            [money] => 15
        )
)

Código da página lancamento.php:

<?php
   session_start();

echo "<pre>";
   print_r($_SESSION['cart']);
echo "</pre>";

foreach ($_SESSION['cart'] as $key => $value) :
   $query = implode(',', $value);
   echo "INSERT INTO teste (nome, dinheiro) VALUES ('{$query}')";

endforeach;

O resultado do echo é:

INSERT INTO tb01 (name, money) VALUES ('Mathews,10')INSERT INTO tb01 (nome, dinheiro) VALUES ('Nate,500')

Eu tentei fazer o Insert, mas não estou conseguindo. Caso tenha algum campo NN no Schema, aparece o erro:

Column count doesn't match value count at row 1

Eu também percebi que no echo ele colocou os dois valores em aspas simples, sendo que o campo name é varchar e o campo money é decimal. Imaginei que este seja o motivo do erro, estou certo?

Minha idéia é fazer como se fosse um carrinho de compras,receber vários valores do Input e armazenar tudo em uma $_SESSION, tendo a possibilidade de excluir uma posição fazendo o session_unset(), e no final fazer vários insert no banco de dados.

Gostaria de saber se estou no caminho certo. Quero saber apenas como fazer multiplos insert, seguindo esta lógica de carrinho de compras.

2 respostas
solução!

O problema do insert é esse que você relatou, os campos tem tipos diferentes, no seu exemplo, você quer gravar dois campos, mas na parte do values, os dois valores estão dentro das aspas, é como se fosse apenas 1 informação. Uma forma de resolver o problema seria fazer algo assim:

foreach ($_SESSION['cart'] as $key => $value) :
   echo "INSERT INTO teste (nome, dinheiro) VALUES ('" . $value["name"] . "'," . $value["money"] . ")";

endforeach;

Puts mano, que fácil... E eu não sabia como arrumar kkk

Vivendo e aprendendo :)

Daniel Bins, muito obrigado... Cara, você não imagina minha felicidade por ter conseguido fazer isto ᕕ( ᐛ )ᕗ