Jump to content
Rodrigo Vieira E da Silva

ID e Múltiplos dados

Recommended Posts

 

Olá pessoal do Forúm tudo bem com vocês?

 

Eu estou com a seguinte dúvida eu tenho um formulário com um grupo de checkbox relacionado alguns serviços veja abaixo:

 

  • Mecânica

  • Funilaria

  • Pintura

  • Cristalização

  • Box (Mêcanica / Fulinaria / Pintura / Cristalização)

 

Eu tenho duas tabelas no meu banco de dados chamada pedido e serviço.

 

A tabela de PEDIDO eu tenho os seguintes campos

 

ID

ID_SERVICO

 

A tabela de SERVIÇOS eu tenho os seguintes campos

 

ID

SERVICO

 

A minha dúvidas são:

 

  1. Como eu faço para adicionar um pedido para cada serviço selecionado?

  2. No item Box eu preciso gerar um único número de pedido mas para o Box na tabela na serviço tem que guardar separado cada serviço mas o numero desse pedido é o mesmo, como fazer isso?

 

Eu estou usando Mysqli como drive de banco de dados.

 

Share this post


Link to post
Share on other sites

Olá!
Aparentemente é da forma que você está fazendo mesmo
na tabela itermediária ficaria assim:

pedido 7
serviço 1

pedido 7
seviço 2

pedido 7
serviço 3
...

a não ser que você queira usar json, então ficaria assim:
servicos {"7":[1,2,3]}

 

nesse caso, talvez fosse melhor salvar na própria tabela do pedido

Share this post


Link to post
Share on other sites

Na verdade o que quero é o seguinte

 

Exemplo:

 

Pedido: 01

Serviço: Mecânica

 

Pedido: 02

Serviço: Funilaria

 

Pedido: 03

Serviço: Pintura

 

Caso selecione somente o Box ficar assim:

 

Pedido: 04

Serviço: Mecânica

 

Pedido: 04

Serviço: Funilaria

 

Pedido: 04

Serviço: Pintura

 

Pedido: 04

Serviço: Cristalização.

 

Como chegar nessa lógica.

Share this post


Link to post
Share on other sites

Acho que o nome da tabela acabou dificultando a interpretação, pelo que entendi cada pedido pode ter vários itens só que você está utilizando a tabela PEDIDO para armazenar os itens, nesse caso o ideal seria criar uma tabela adicional para os itens.

Tabela: PEDIDO
ID
...
Tabela: PEDIDO_ITENS
ID
ID_PEDIDO
ID_SERVICO
Tabela: SERVIÇOS
ID
SERVICO

 

Não recomendo o que direi a seguir, mas supondo que o número seja a única informação do pedido você poderia então alterar sua tabela PEDIDO e adicionar um campo NUMERO que será igual para todos os itens do mesmo pedido (como gerar esse número é outra história).

Tabela: PEDIDO
ID
NUMERO
ID_SERVICO

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Guilherme Luiz
      Olá pessoal,
       
      Estou com uma pequena dúvida em relação a buscar dados em json no MySQL.
      No meu banco eu tenho uma table com o seguinte campo em json.
       
      table - contacts
      column - groups_id
       
      Na coluna groups_id eu armazeno ids de grupos em json por exemplo:
      ["252","222","666"]  
      Quando eu realizo a seguinte query
      SELECT * FROM user_contacts WHERE JSON_CONTAINS(group_id, '["252"]')  
      Beleza... Ele me resulta em todos os contatos que possuem o registro 252.
      O que acontece é que essa table é 1 > N, ou seja, um contato pode fazer parte de vários grupos, sendo assim:
       
      quando eu consulto
      SELECT * FROM user_contacts WHERE JSON_CONTAINS(group_id, '["252","222"]') Ele não me resulta nos contatos que estão com grupo 252 ou 222.
      Ele me resulta nos contatos que estão com o grupo 252 e 222, ou seja, ele me retorna somente os contatos que o group id tenha ["252","222"]
       
      Eu vi que nessa situação eu poderia criar um INDEX na minha tabela usando:
      ALTER TABLE user_contacts ADD INDEX groups ( (CAST(group_id->'$.groups' AS UNSIGNED ARRAY)) );  
      Mas o CAST() na versão que Mysqli que eu possuo no servidor 4.6.X me retorna Syntax error.
      Alguem teria uma sugestão ou luz de qual caminho posso seguir nessa situação sem que seja atualizando a versão do bd?
       
       
    • By Jeovane Carvalho
      Olá senhoras e senhores, venho aqui tirar uma dúvida !
       
      Eu desenvolvi um projeto em php para um cliente e hospedei na Hostgator,  como já trabalho com a hospedagem Hostgator há alguns anos, nunca tive problema até quando comecei a trabalhar com PREPARE STATEMENT ,  e aí me gerou uma grande dor de cabeça, e como não tinha muita experiência usando instrução preparada,  comecei a desenvolver meus projetos através desta instrução e rodando de boa localmente, e foi só hospedar remotamente e já deu alguns erros, e o principal de foi    *   Call to undefined method mysqli_stmt::get_result() in  *     e consultando o site  stackoverflow  li um seguinte trecho de um desenvolvedor experiente que:  O mysqli foi introduzido no php 5, já a função get_result pertence ao pacote mysqlnd que é o driver nativo.
       
      E como não tinha ciência desta função MYSQLND  e pelo que eu li, ELA É NATIVA DO MYSQL, e para não perder o plano já contratado, tive que usar em vez de get_result() usar o bind_result (), só que tive dificuldades de alguns dias para resolver, mas consegui fazer com que na classe A, onde esta minhas instruções e conexões com o banco e o loop do while estão , fazer que ao instanciar um objeto e chamar cada variável usando [ ] como array conseguisse pegar todos os dados dentro do loop do while e irei mostrar logo abaixo:
      E a minha dúvida é saber se estaria fazendo de forma correta ou existiria outra forma de usar o foreach para percorrer um array.
       
      Segue abaixo o código de exemplo:
       
       
          CLASSE A:
       
      <?php class DadosAmortecedoresEletricos { private $conecta_banco; public function __construct(){ $this->conecta_banco=new Conexao(); $this->conecta_banco->Conectar(); } public $ativo; public $com_foto; public $sem_foto; public $linha; public $id; public $produto_id; public $negocio; public $negocio_tipo; public $tipos; public $tipo; public $imgP; public $valor; public $negocio_d; public $sqlL_2; public $sqlL_1; // ESSA CLASSE SERVE PARA PAGINAÇÃO public function BuscarDadosAmortecedoresEletricos(){ $conexao=$this->conecta_banco->banco; $Dados=new DadosEmpresa(); $Dados->BuscarDadosEmpresa(); $limit=$Dados->qtd_secao_eletrico; $ativo=$this->ativo=1; $sql_1=$conexao->prepare("SELECT i.id,i.id_produto_tipo,i.id_produto_subtipo,t.tipo,n.tipo_nome FROM dados_anuncio i LEFT JOIN tipo_produto t ON (t.id = i.id_produto_tipo)LEFT JOIN subtipo_produto n ON (n.id = i.id_produto_subtipo) WHERE i.ativo=? AND n.tipo_nome LIKE '%el%' ORDER BY i.id DESC LIMIT ".$limit.""); $sql_1->bind_param('s',$ativo); $sql_1->execute(); $sqlL_1=$sql_1->bind_result($id,$id_produto_tipo,$id_produto_subtipo,$tipo, $tipo_nome); while ($sql_1->fetch()) { $this->produto_id=$id_produto_tipo; $this->subproduto_id=$id_produto_subtipo; } $dados=""; $ativo=$this->ativo=1; // ESSA CLASSE SERVE PARA RESGATAR OS DADOS $sql_1 = $conexao->prepare("SELECT i.id AS idi,i.id_produto_tipo,i.foto_exibicao,i.foto_grande,foto_titulo,i.valor, t.tipo_nome, n.tipo AS tipo FROM dados_anuncio i LEFT JOIN subtipo_produto t ON (t.id = i.id_produto_subtipo) LEFT JOIN tipo_produto n ON (n.id =".$this->produto_id.") WHERE i.ativo=? AND t.tipo_nome LIKE '%el%' AND i.id_produto_subtipo LIKE '%".$this->subproduto_id."%' ORDER BY RAND () LIMIT ".$limit."") ; if($sql_1){ $sql_1->bind_param('s',$ativo); $sql_1->execute(); $sql_1->store_result(); $this->sqlT_3=$sql_1->bind_result($id,$id_produto_tipo,$foto_exibicao,$foto_grande,$foto_titulo,$valor, $tipo_nome, $tipo); while ($sql_1->fetch()) { $this->id[]=$id; $this->tipo[]=$tipo; $this->tipo_nome[]=$tipo_nome; $this->foto_exibicao[]=$foto_exibicao; $this->foto_grande[]=$foto_grande; $this->foto_titulo[]=$foto_titulo; $this->valor[]=$valor; } }} } ?> Minha página onde instancio o objeto abaixo:
       
       
      <?php // Aqui é onde uso os foreach para percorrer cada variável $n=0; $tipos=array(); $n=0; foreach ($dados_elet->id as $key=> $thing) { $tipos[$n][1] = $thing; $n++; } if(is_array($dados_elet->tipo)){ $n=0; foreach ($dados_elet->tipo as $thing) { $tipos[$n][2] = $thing; $n++; }} if(is_array($dados_elet->tipo_nome)){ $n=0; foreach ($dados_elet->tipo_nome as $thing) { $tipos[$n][3] = $thing; $n++; }} if(is_array($dados_elet->foto_exibicao)){ $n=0; foreach ($dados_elet->foto_exibicao as $thing) { $tipos[$n][4] = $thing; $n++; }} if(is_array($dados_elet->foto_grande)){ $n=0; foreach ($dados_elet->foto_grande as $thing) { $tipos[$n][5] = $thing; $n++; }} if(is_array($dados_elet->foto_titulo)){ $n=0; foreach ($dados_elet->foto_titulo as $thing) { $tipos[$n][6] = $thing; $n++; }} if(is_array($dados_elet->valor)){ $n=0; foreach ($dados_elet->valor as $thing) { $tipos[$n][7] = $thing; $n++; }} foreach($tipos as $dados_inf){ $imgP= $dados_inf[4]; $descricao= $dados_inf[6]; $id= $dados_inf[1]; $negocio= $dados_inf[2]; $negocio_id= $dados_inf[2]; $subtipo= $dados_inf[3]; $negocio_tipo= $dados_inf[2]; $tipos= $dados_inf[2]; $valor= $dados_inf[7]; if($valor=='0.00' || $valor==''){$valor='Consulte-nos';}else{ $valor ="R$ ".$valor;} $tipo= $tipos;$tipo= strtolower(str_replace(" ","-",strtr(utf8_decode(trim($tipo)),utf8_decode("áàãâéêíóôõúüñçÁÀÃÂÉÊÍÓÔÕÚÜÑÇ"),"aaaaeeiooouuncAAAAEEIOOOUUNC-"))); $imgP2='img_produtos/thumbs/'.$imgP.''; if(file_exists($imgP2)){$foto='<img class="lozad" data-src="'.$Dados->site.'img_produtos/thumbs/'.$imgP.'" alt="'.$tipo.'" />';}else{$foto='<img src="'.$Dados->site.'images/sem_foto.jpg" alt="'.$tipo.'" />';} echo $com_foto='<ul class="menu"><div class="favoritos_add"> <a data-id="'.$id.'" data-toggle="modal" title="'.$id.'" data-target="#myModalfavoritos'.$id.'" id="'.$id.'" class="hvr-pulse"><img src="images/coracao_fav_ext.png" alt="Favoritos" /></a></div> <li><a title="'.$tipo.' | valor: '.$valor.'" href="'.$Dados->site.'contato">'.$foto.'</a> <div class="fundo_dados"> <div class="dados_tipo">'.$tipos.' </div> <div class="dados_subtipo">'.$subtipo.'</div> <div class="dados_titulo">'.$descricao.'</div> <div class="dados_valor">'.$valor.'</div> <div class="informacoes"><a title="'.$negocio.' | '.$tipo.'| valor: '.$valor.'" href="'.$Dados->site.'contato">MAIS INFORMAÇÕES</a></div> <div class="comparar"> <label><input name="comparar[]" type="checkbox" id="comparar" value="'.$id.'" /> Comparar</label><div class="dados_codigo">código: '.$id.'</div></div> </div></li></ul>'; ?> Notem que para cada variável eu uso um foreach para varrer as informações do while da outra página e por último eu uso um foreach que pega cada variável do foreach e distribuo as informações de cada variável na sua matriz na ordenação  de [1] , [2], [3]  e assim por diante.
      Resumindo , funciona mas queria saber se existe outra maneira com menos linha de código e que fique mais rápido na hora do php compilar ..
      Lembrando que não posso usar GET_RESULLT().
      E acredito que muitos terão este problema quando começarem a atualizar seus códigos..
      Obrigado :)
    • By ma_gr
      Boa tarde, tudo certo?! Estou querendo montar uma query de update de uma forma mais otimizada, sem precisar usar tantos if's.
       
      No meu formulário o usuário irá, da primeira vez, obrigatoriamente ter que enviar a imagem do perfil, documento com foto e comprovante de residência (arquivos de imagens).
      Já nas próximas vezes em que o usuário puder alterar suas informações, os arquivos poderão ser substituídos ou não, ficando a cargo do usuário.
       
      Da primeira vez eu atualizo o status quando as imagens são enviadas.
       
      Pensei em fazer uma concatenação caso !empty()  mas penso que deva ter uma forma melhor de se fazer, além do que eu teria que fazer outros if's para o bind_param().
       
      Espero ter sido claro.
       
      Minha consulta seria basicamente:
       
      $updateData = "UPDATE members SET username=?, lastname=?, nickname=?, emailOpt=?, address=?, number=?, neighborhood=?, city=?, state=?, country=?, cep=?, phone=?, cellphone=?, cpf=?, rg=?, born=?, facebook=?, instagram=?, profile_img=?, profileImgStatus=?, doc_img=?, docStatus=?, address_img=?, addressImgStatus=? WHERE userId = ? "; $stmt = $mysqli->prepare($updateData); $stmt->bind_param( 'sssssssssssssssssssis', $username, $lastname, $nickname, $emailOpt, $address, $number, $neighborhood, $city, $state, $country, $cep, $phone, $cellphone, $cpf, $rg, $born, $facebook, $instagram, $profile_img, $profileImgStatus, $doc_img, $docStatus, $address_img, $addressImgStatus, $userId );  
    • By marcelobbt
      Estou tentando fazer um aplicativo que salva dados num banco mysql e para isso estou usando o php, só que está apresentando o erro abaixo que não consigo corrigir.
       
      Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result_boolean given in <endereço .../query.php> on line 8
       
      Abaixo os arquivos:
      query.php
      <?php require "Db.class.php"; $db = new Db(); $sqlBusca = $_POST['sql'];// Pega o codigo sql enviado pelo aplicativo $resultado = $db->query($sqlBusca); // Transforma o resultado da consulta em um array associativo while ($array = mysqli_fetch_assoc($resultado)) { $dados[] = $array; } echo json_encode($dados);// Retorna o resultado da consulta no formato JSON ?> a classe: Db.class.php
      <?php /** * conex達o com o banco de dados usando mysqli */ class Db{ private $con; function __construct(){ $this->con = mysqli_connect ('LOCALHOST', 'usuario', 'senha', 'banco'); // verifica conex達o if (mysqli_connect_errno($this->con)) { echo "Problemas para conectar no banco. Verifique os dados! ".mysqli_connect_error($this->con); die(); } } // Faz a consulta sql public function query($sql){ //echo $sql; return mysqli_query($this->con, $sql); } } ?>  
       
    • By GobsRuiz
      Estou tentando criar um sistema de envios de comentários. Estou tendo problema com alerta. Primeiramente era do envio. Depois que eu preenchia os campos, enviava e dava um refresh na página(f5), ele envia os mesmos dados, mas colocando o ‘header(location)’, resolvi mas a mensagem não aparece mais e não sei como consigo resolver isso. O outro problema é que quando os campos estão vazios e aparece a mensagem como programei para preencher os campos e dou um f5, ele aparece um alert. A página dá um refresh e continua a mensagem lá e se eu dou refresh de novo, acontece a mesma coisa. Fica nesse loop infinito. Tive que fazer junção das imagen
       
      <?php $host = 'localhost'; $user = 'root'; $password = ''; $banco = 'comentarios'; $bdconnect = mysqli_connect($host, $user, $password, $banco); ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Sistema de comentários</title> </head> <body> <form action="" method="post"> <span>Nome: </span><input type="text" name="nome"><br> <span>Email: </span><input type="text" name="email"><br> <span>Mensagem: </span><input type="text" name="mensagem"><br> <input type="submit" name="enviar" value="Enviar"><br> </form> <?php if(isset($_POST['enviar'])){ $nome = $_POST['nome']; $email = $_POST['email']; $mensagem = $_POST['mensagem']; if($nome == '' and $email == '' and $mensagem == ''){ echo 'Preencha todos os campos'; } else{ echo 'Enviado com sucesso'; $insert = mysqli_query($bdconnect, "INSERT INTO comentario_bd(nome, email, mensagem) VALUES('$nome', '$email', '$mensagem')"); header('Location:index.php'); } } ?> </body> </html>


×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.