Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoas, sou novato em PHP, estou estudando a linguagem e ao mesmo tempo tentando criar algo com o que aprendi. Quando tenho dúvidas procuro na net, tópicos e ou scripts já prontos que me façam entender. Todavia desta vez não encontrei algo claro.
Estou criando um mini sistema de vendas, do qual me permite adicionar uma lista de itens. Daí está o problema, como não tenho um conhecimento avançado de arrays não estou sabendo pegar os dados da lista criada e passar para o BD. Só consigo passar a última informação criada na lista.
Aqui está o exemplo.
<?php
// inicio consulta url
if(!isset($_SESSION['itens'])){
$_SESSION['itens'] = array();
}
if(isset($_GET['acao'])){
$id = $_GET['id'];
// Adiciona ao carrinho
if($_GET['acao'] == 'add'){
if(!isset($_SESSION['itens'][$id])){
$_SESSION['itens'][$id] = 1;
}else{
$_SESSION['itens'][$id] += 1;
}
}
// Diminui carrinho
if($_GET['acao'] == 'dim'){
if(!isset($_SESSION['itens'][$id])){
$_SESSION['itens'][$id] = 1;
}else{
if($_SESSION['itens'][$id] > 1)
$_SESSION['itens'][$id] -= 1;
}
}
//deleta item do carrinho
if($_GET['acao'] == 'del'){
$id = intval($_GET['id']);
if(isset($_SESSION['itens'][$id])){
unset($_SESSION['itens'][$id]);
}
}
}
// fim consulta url
// inicio consulta para adicionar
if(count($_SESSION['itens']) == 0){
?>
<br>
<div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>LISTA VAZIA:</strong> Para adicionar produtos/servicos realize a busca.
</div>
<br>
<?php
}else{
require_once('db.class.php');
$objDb = new db();
$link = $objDb -> conecta_mysql();
$total = 0;
foreach ($_SESSION['itens'] as $idProdutos => $quantidade) {
$sql = "SELECT * FROM produtos WHERE id='$idProdutos'";
$consultado = mysqli_query($link, $sql) or die(mysql_error());
$linha = mysqli_fetch_array($consultado);
$id = $linha['id'];
$codigo = $linha['codigo'];
$produto = $linha['produto'];
$quantidade_disp = $linha['qtd'];
$valor = $linha['valor'];
$subTotal = $linha['valor'] * $quantidade;
$total += $linha['valor'] * $quantidade;
?>
<tr>
<td><input type="hidden" name="codigo_produto" value=""><?= $codigo; ?></td>
<td><input type="hidden" name="nome_produto" value=""><?= $produto; ?></td>
<td><input type="hidden" name="qtd_produto" value=""><?= $quantidade_disp; ?></td>
<td>
<a href="gerar_pedidos_admin.php?acao=dim&id=<?= $id; ?>"><span class="glyphicon glyphicon-minus" style="color: red"></span></a>
<input type="number" name="qtd_produto1" min="1" max="<?= $quantidade_disp; ?>" value="<?= $quantidade; ?>">
<a href="gerar_pedidos_admin.php?acao=add&id=<?= $id; ?>"><span class="glyphicon glyphicon-plus" style="color: green"></span></a>
</td>
<td><input type="hidden" name="valor_produto" value="">R$ <?= number_format($valor,2,",", "."); ?></td>
<td>R$ <?= number_format($subTotal,2,",", ".");?></td>
<td><a href="gerar_pedidos_admin.php?acao=del&id=<?= $id; ?>"><span class="glyphicon glyphicon-remove" style="color: red;"></span></a></td>
</tr>
<?php
}
?>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td><label>Total</label><br>R$ <input type="hidden" name="total_pedido" value=""><?= number_format($total,2,",", ".");?></td>
</tr>
<?php
}
?>
A pergunta e dúvida é como posso pegar os dados da lista e adicionar ao BD. Eu sei que é para usar um foreach ou um while, todavia só consigo passar a última informação da lista de modo repetido. Gostaria de uma ajuda. Não precisa faz de acordo com o meu código, gostaria de um exemplo prático.
Abçs.Olá, infelizmente não consegui...
Fiz o mesmo exemplo é um código menor, para um melhor entendimento.
<?php
session_start();
if(!isset($_SESSION['itens'])){
$_SESSION['itens'] = array();
}
if(isset($_GET['acao'])){
$id = $_GET['id'];
if($_GET['acao'] == 'add'){
if(!isset($_SESSION['itens'][$id])){
$_SESSION['itens'][$id] = 1;
}else{
$_SESSION['itens'][$id] += 1;
}
}
//REMOVER CARRINHO
if($_GET['acao'] == 'del'){
$id = intval($_GET['id']);
if(isset($_SESSION['itens'][$id])){
unset($_SESSION['itens'][$id]);
}
}
}
?>
<form method="post" action="carrinho.php">
<table style="width: 900px">
<tr>
<td>ID</td>
<td>Produto</td>
<td>Qtd Disponível</td>
<td>Qtd Desejada</td>
<td>Valor</td>
<td>Sub-Total</td>
<td>Excluir</td>
</tr>
// EXIBE O CARRINHO
<?php
if(count($_SESSION['itens']) == 0){
echo '<tr><td colspan="5">Não há produto no carrinho</td></tr>';
}else{
require_once('db.class.php');
$objDb = new db();
$link = $objDb -> conecta_mysql();
$total = 0;
foreach($_SESSION['itens'] as $idProdutos => $quantidade){
$sql = "SELECT * FROM testando WHERE id= '$idProdutos'";
$qr = mysqli_query($link, $sql) or die(mysql_error());
$ln = mysqli_fetch_assoc($qr);
$id = $ln['id'];
$nome = $ln['produto'];
$qtd_disponivel = $ln['qtd'];
$preco = $ln['valor'];
$subTotal = $ln['valor'] * $quantidade;
?>
<tr>
<td><input type="hidden" name="idProd" value="<?= $id; ?>"><?= $id; ?></td>
<td><input type="hidden" name="nome" value="<?= $nome; ?>"><?= $nome; ?></td>
<td><?= $qtd_disponivel; ?></td>
<td><input type="number" name="qtd_escolhida" value="<?= $quantidade; ?>" min="1" max="<?= $qtd_disponivel; ?>"></td>
<td><input type="hidden" name="preco" value="<?= $preco; ?>"><?= number_format($preco,2,",", "."); ?></td>
<td><input type="hidden" name="subTotal" value="<?= $subTotal; ?>"><?= number_format($subTotal,2,",", "."); ?></td>
<td><a href="carrinho.php?acao=del&id=<?= $idProdutos?>">Excluir</a></td>
</tr>
<?php
}
}
?>
<?
if(isset($_POST['enviar'])){
require_once('db.class.php');
isset($_SESSION['itens']);
foreach ($_SESSION['itens'] as $indice => $valor) {
require_once('db.class.php');
$objDb = new db();
$link = $objDb -> conecta_mysql();
$sql_insere = "INSERT INTO salvando(nome, qtd_escolhida, valor, subTotal) VALUES('$nome', '$quantidade', '$idProdutos', '$idProdutos')";
$inserido = mysqli_query($link, $sql_insere);
}
}
?>
</table>
<input type="submit" value="enviar" name="enviar">
</form>
Sendo que o modo que fiz foi dessa forma, dessa forma ele consegue pegar o valor do ID e da Quantidade de Sessões, todavia só salva valores repetidos.
<?
if(isset($_POST['enviar'])){
require_once('db.class.php');
isset($_SESSION['itens']);
foreach ($_SESSION['itens'] as $indice => $valor) {
require_once('db.class.php');
$objDb = new db();
$link = $objDb -> conecta_mysql();
$sql_insere = "INSERT INTO salvando(nome, qtd_escolhida, valor, subTotal) VALUES('$nome', '$quantidade', '$preco', '$subTotal')";
$inserido = mysqli_query($link, $sql_insere);
}
}Alguém poderia me dar uma força no entendimento desta questão, desde já fico agradecido.
Olá, para adicionar ao seu BD creio que você precisa do id do produto(índice do array) e a quantidade(valor do array)..
pega o índice:
array_keys()
pega o valor:
array_values()
agora basta usar com INSERT.
>
2 horas atrás, rodolfo_alves disse:
foreach