Ir ao conteúdo
  • Cadastre-se

Gravar os valores do array em um só campo da tabela.


Posts recomendados

ola, estou com essa dúvida(de novo:(), tenho um carrinho de compras em sessions e um array, usei o foreach pra inserir os dados no banco, só que ele grava cada item do carrinho em um campo do banco, e eu preciso mostrar no painel do usuario quais itens comprou, tentei usar um group by pelo nome do cliente pra mesclar tudo só que ele não mostra os produtos diferentes.

 

ou seja preciso gravar o nome do cliente que vem por um form e os produtos tudo em um campo chamado ProdComp e  um numero de compra so , que fiz usando rand();

 

 

Link para o comentário
Compartilhar em outros sites

@mario cesar berardo Não acho que seria isso, seria mais assim, ja que gerei o loop, a cada loop feito ele insere no banco de dados , não tenho ideia de fazer de outra forma para inserir.

 

Exemplo.

 

Nome:                   |                 Produto                                             |

fulano                          Super produto digital, 3 cabos super bons

Link para o comentário
Compartilhar em outros sites

Então @FabianoS segundo sua tabela, o problema está na modelagem mesmo.

Em banco de dados não se grava assim.

Tem de ter um registro para cada produto.

Seria algo mais ou menos assim :

ID | NOME  |  PRODUTO                   | QTD

01    fulano      Super Produto Digital     01

02    fulano      Cabo Super bom            03

 

O correto é ter uma tabela de PRODUTOS, com o código e descrição de cada produto, e esta tabela acima , que eu chamaria de CARRINHO. Na verdade na tabela CARRINHO você só grava códigos. No banco de dados, é muito mais rápido consultar números do que strings.

 

Entendeu ?

Qualquer coisa pergunta novamente.

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@FabianoS  mostra dessa forma mesmo, só que formata a tabela de uma forma mais apresentável.

Recomendo fazer o seguinte :

      1) Faça a tabela em HTML na página;

      2) Uma rotina em PHP no servidor que busque os dados no banco;

      3) Use o nosso "good and old" amigo AJAX para buscar os dados;

      4) Em javaScript , preencha a tabela usando JQuery;

Link para o comentário
Compartilhar em outros sites

@mario cesar berardo acho q você nao entendeu, eu tenho como fazer a busca pelo php no banco e mostrar os resultado eu so não quero resultado duplicado por exemplo ele vai grava o nome do cliente em um campo pra cada tipo de produto comprado, quando for exibir isso nao quero resultado duplicado exemplo:

 

ID | NOME  |  PRODUTO                   | QTD

01    fulano      Super Produto Digital     01

02    fulano      Cabo Super bom            03

 

seria mais assim.

 

ID | NOME  |                                 PRODUTO                      | QTD

01    fulano      Super Produto Digital, Cabo Super bom      01,03

 

 

    

                 

Link para o comentário
Compartilhar em outros sites

  Entendi, então você vai ter de fazer um for aninhado (for dentro do for) e ir montando uma string, concatenando os produtos e as quantidades, e depois colocar essa string na tabela. Como você está passando do PHP para a página ? me explica que eu monto um exemplo para você aqui.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@FabianoS Mas não é o nome que tens que gravar, mas sim a ID dele. o nome você traz  na consulta usando a clausula inner join para informa em qual tabela você vai  relacionar o id :D

 

O que o @mario cesar berardo  disse não deixa de estar certo.

Só para ratificar o que já foi dito,  não se grava no banco um campo com multivalores, mas sim a cada linha.

E no banco pode SIM ter a repetição.. o que você precisa fazer é  na hora de mostrar  tratar estas repetições na linguagem de programação PHP.

 

Uma dica:  use VIEWS para criar uma tabela espelhada... assim facilita a consulta e  você trata das repetições via php

 

 

Link para o comentário
Compartilhar em outros sites

@dif quando uso o foreach eu trago a quantidade de produto e id , ai eu fiz uma consulta pra buscar o nome do produto pela id ai sim eu gravo o nome do produto no banco de dados.

Não que eu queira duplicar os valores no mesmo campo, só não achei uma forma de exibir sem duplicalos.

 

http://i.imgur.com/jngywSy.png?1

 

Eu queria mostrar pro usuario, quem compro o produto  e a quantidade só isso sem duplica o nome .

Link para o comentário
Compartilhar em outros sites

  • Moderador

@FabianoS Embora eu não aprove o jeito que colocou ali.. usando os nomes( é melhor sempre trabalhar com IDs) não tem problema no campo estar o nome do fulano 3 vezes!

 

De repente tenta fazer o loop só com os produtos, e uma outra consulta trazendo só o nome do cliente.. eaí você acomoda com o php 

 

PS: eu lembro de ter feito algo parecido usando só o SQL, com a clasula group by... ou em conjunto com having... mas não lembro direito para dar um exemplo.

 

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, mario cesar berardo disse:

  Entendi, então você vai ter de fazer um for aninhado (for dentro do for) e ir montando uma string, concatenando os produtos e as quantidades, e depois colocar essa string na tabela. Como você está passando do PHP para a página ? me explica que eu monto um exemplo para você aqui.

eu não entendi sua pergunta, mas preciso achar um jeito de exibir pra o usuario o produto comprado, independente se estiver repetido no banco ou nao.

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@FabianoS Essa listagem, seria a lista de compras que está no carrinho dele no exato momento da compra antes de finalizar?

E tipo, seria mostrado apenas as compras dele? 

 

Ou seria mais para admin, gerenciar as compras mostrar ao admin quem está comprando o que?

 

Link para o comentário
Compartilhar em outros sites

@dif Nossa desculpe, eu nao falei direito, o usuario que eu falo e administrador do site eu fiz um painel pra ele e eu vou acrescertar a opção de ver quem comprou.

 

tenho um botão finalizar que vai abrir um form e ele vai enviar o comprovante e o form envia o email e eu cadastro  o produto no banco de dados.

Eu nao sei mais o que tentar, nem to pensando direito.

 

Tentei isso também, fazer a busca mesmo estando repetido no banco. mas não manjo muito sobre o loops então, ele me retorna 0 kkkk.

<?php 
session_start();
include('conexao.php');

$consulta = mysqli_query($conexao,"SELECT * FROM db_comprovante  GROUP BY NomeCliente");
while($retorno = mysqli_fetch_object($consulta)){
	echo$retorno->NomeCliente." : ";
	for($i = 0; $i < count($retorno->nome); $i++){
		echo$i;
	}
	

}


 ?>

 

Link para o comentário
Compartilhar em outros sites

 Amigo @FabianoS, Você quer exibir em uma tabela , os dados que estão no banco.  É que para essa simples tarefa, existe muita coisa no meio do caminho que você não pode atropelar.

Você não consegue fazer o que você quer, pois a sua necessidade de ser prático está esbarrando a falta de conceitos teóricos importantes e você realmente fica em loop sem saber o que fazer e as vezes não sabe nem como perguntar. Isso é normal, acontece com todos. Sei que muitas vezes a necessidade de fazer as coisas rapidamente gera em nós a necessidade de sermos mais práticos do que teóricos, mas no processamento web não é bem assim. Por favor "perca" 5 minutos lendo o que escrevi, pois vai fazer mudar a forma como está entendo o processamento web. 

Para fazer o que você quer precisamos rever um conceito básico de processamento web.

TODO sistema web, se divide em Processamento Server-side(servidor) e Processamento Client-side (cliente).

- Processamento server-side : Rotinas que são executadas no servidor. PHP, ASP.NET, NodeJS são linguagens server-side. TUDO em PHP roda no servidor.

- Processamento Client-side : Rotinas que são executadas na máquina local do cliente. São linguagens client-side o HTML, CSS, JavaScript. JQuery, Angular, são bibliotecas para facilitar para quem não conhece javaScript. OBRIGATORIAMENTE TUDO que roda no cliente é HTML, CSS e JavaScript, não existe outra forma. O ASP.NET permite alguns caminhos que você não escreve em JavaScript, mas depois tudo vira JavaScript.

Toda página web quando é carregada acessa o servidor para pegar os comandos html, css, dados do banco, imagens, etc... A quantidade de vezes que a página acessa ao servidor depende da estruturação que o programador faz na programação no cliente e no servidor.

PRATICO AGORA : quando uma página simples é lenta e demora para carregar, pode apostar que não está bem dividida e o cliente tem de ficar fazendo vários pequenos acessos ao servidor o tempo todo.

Em um sistema web bem estruturado, as tarefas são bem divididas.

Então quando eu perguntei "como você passa do PHP para a página" você não entendeu porque eu creio que não sabia esse conceito fundamental.

 

PRATICA : Dicas praticas da divisão de tarefas :

- Banco de dados : Armazenado sempre no servidor, não tem sentido ficar no cliente.

- Acesso ao banco : Rotinas em PHP ou ASP.NET rodando no servidor que rodam as consultas SQL e entrgam para a página.

- Imagens : Armazenadas no servidor

- LayOut e exibição da página : HTML e CSS e um pouco de JavaScript no cliente.

- Dinamismo na página : Ações que ocorrem como resposta a eventos provocados pelo usuário, após a página carregada e exibida. JavaScript e seus derivados JQuery, Angular, JQuery Mobile....JQuery ainda é a mais usada.  

O JavaScript é uma linguagem muito poderosa, pois ela permite acessar aos objetos da página HTML, que ficam armazenados em um estrutura chamada de DOM, e alterar os atributos dos mesmo em tempo de execução. Praticamente é possível fazer qualquer coisa no browser com JavaScript, inclusive desenhar uma página toda sem uma unica linha HTML !!!!!!!! Eu desconheço o que não é possível fazer, localmente é claro, em JavaScript. Alguns games são feitos em JavaScript.

Para fazer o acesso ao servidor depois da página carregada e trafegar dados entre cliente e servidor, existe uma técnica chamada AJAX que revolucionou os sistemas web. AJAX permite exibir dados após a página carregada !!!!!!

O que você quer fazer é um dinamismo e terá de usar AJAX.

Você quer exibir em uma tabela , os dados que estão no banco. 

Você terá de montar dinamicamente uma tabela, após usuário der um click em um botão, ou quando terminar de carregar a página, usando AJAX.

Faz o AJAX é disparado pelo JavaScript, executa a rotina em PHP que busca os valores no banco, retorna isso e depois o JavaScript monta a tabela da forma de exibição que você deseja.

Existe uma outra opção, mais "xula", que é inserir código em PHP no meio da página HTML, fazer as buscas e popular a tabela. Mas, só vai funcionar na carga da página , E eu disse "xula" pois mistura PHP (server side) com HTML (client-side) o que não é recomendável.

 

Tente usar no PHP "mysqli_fetch_assoc", ele reotrna os nomes dos campos.

Não é PHP orientado a objetos, mas funciona direitinho.

<while($row=msqli_fetch_assoc($consulta)){;
         $campo1=$row['campo1'];
          echo($campo1);
}
>

 

 

Abraços.

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Sabemos o que você que quer, só não temos tempo de fazer para você completamente e creio que aqui nesse forum ninguem o fará.

Damos dicas e orientamos. 

Vai pelo caminho do PHP que eu te mandei com aquela ideia de FOR aninhados e montando a string de saída, que funciona.

 

Abraços.

Link para o comentário
Compartilhar em outros sites

@mario cesar berardo Amigo acho que realmente mesmo você não me entendeu, mas obrigado pela ajuda, já fiz uma alternativa aqui.

 

Só uma coisa não acho necessidade de usar ajax pra fazer a consulta no servidor, até porque não estou exigindo o usuário não precisar atualizar a pagina.

 

Citação

O que você quer fazer é um dinamismo e terá de usar AJAX.

Você quer exibir em uma tabela , os dados que estão no banco. 

Você terá de montar dinamicamente uma tabela, após usuário der um click em um botão, ou quando terminar de carregar a página, usando AJAX.

 

Eu simplesmente passo uma variável usando GET e alguns "if's" pra mostrar o conteudo. 

 

Com certeza me falta bastante conhecimento mas acho que você esta um pouco fora da resposta.

Eu li tudo que escreveu e obrigado pela resposta.

Link para o comentário
Compartilhar em outros sites

Amigo, então não estás com dúvida. O que quer ? A rotina pronta ?

Te expliquei o conceito e te  dei o caminho. Segue o PHP que eu mandei com "loop while" aninhado dentro do "while principal" e montando a string com concatenação dos campos enquanto o nome for igual ao anterior, que vai montar sua tabela.

Se não entendeu o que eu expliquei nessa linha de cima e até agora, sinceramente, aconselho amigavelmente para que não se aventure em desenvolvimento web antes de estudar conceitos WEB, PHP e programação.

Abraços.

 

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@FabianoS Tem uma outra forma mais simples de resolver isso.. não é nada bonito.. mas você pode fazer duas rotinas sql.

 

1) busque só os nomes dos clientes.

2) busque só os produtos que estes clientes compraram..

 

E aí no final você monta sua tabela/estrutura para mostrar em tela ao admin.

 

Como eu disse, não é nada bonito mas resolve.

PS: podes fazer quantas sql quiser no seu código, desde que uma não atrapalhe a outra usando variáveis diferentes!

 

@mario cesar berardo Nesse caso em específico não precisa de ajax :) 

Não sei se você percebeu mas ele está tratando os dados como objeto!

por isso que ele usa o mysqli_fetch_object()  eu também uso assim e acho melhor :D 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

1) Eu não disse para ele usar AJAX, somente exemplifiquei a técnica, e disse que eu faria assim.

2) Eu percebi que ele está fazendo em PHP puro, e percebi que está orientando a objeto, só que ele não está entendendo o código em PHP , nem o algoritmo, então achei melhor não orientar a objeto, uma forma mais simples para ele entender e achar os campos do banco. Achei cedo ainda para ele se aventurar em Object PHP. 

@FabianoS, Infelizmente estou sem tempo para fazer a rotina pronta para você. Se tivesse tempo, eu o faria numa boa, com o maior prazer.

 

Abraços.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@mario cesar berardo Certo , mas não precisa fazer a rotina para ele! É dever dele! Nós estamos fazendo nossa parte de dar dicas e sugestões de resolução :) 

 

5 minutos atrás, mario cesar berardo disse:

e percebi que está orientando a objeto

Não..  rsrsrs parece ser mais não é.. pelo menos é o que eu vejo.. se fosse OO, ele estaria usando a classe PDO e seus métodos.. não que o mysqli não dê.. só o pdo é mais usado nesses casos :D

PS: dá para tratar os dados como objeto mesmo programando em modo procedural :tw_thumbsup:

 

Agora esperaremos o retorno do @FabianoS

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...