LipeLauro 0 Denunciar post Postado Novembro 22, 2011 Amigos, bom dia. Sou novato em programação PHP e gostaria de receber uma ajuda de vocês. É o seguinte, tenho um banco de dados com as seguintes tabelas: ---------------------------------------- CLIENTES | SERVICOS ---------------------------------------- id | id nomecliente | cliente endereco | endereco telefone | descricao ---------------------------------------- Na pagina onde gravo o tipo de serviço prestado ao cliente eu tenho um Select(List/Menu) onde informo o nome do cliente previamente cadastrado no sistema e utilizo o seguinte código: <select name="txtCliente" size="1" class="estiloform2" id="txtCliente"> <option value="" selected="selected">Selecione...</option> <?php include_once "../../../include/config.php"; $consulta=mysql_query("SELECT *FROM clientes WHERE codigoempresa = $codigoempresa order by nomecliente ASC"); while ($dados = mysql_fetch_array($consulta)) { echo("<option value='".$dados['nomecliente']."'>".$dados['nomecliente']."</option>"); } ?> </select> Agora vem a dúvida! Como faço para gravar no banco, na tabela SERVICOS o endereço do cliente, uma vez que na pagina de cadastro de serviços não vou colocar campo para inserir o endereço desse cliente? Quero apenas puxar da tabela CLIENTES o endereço do cliente informado e gravar esse endereço na tabela SERVICOS, tudo isso de forma oculta, sem aparecer nada relativo a endereço na tela da pagina de cadastro de serviços. Abraços a todos! Compartilhar este post Link para o post Compartilhar em outros sites
wolfphw 60 Denunciar post Postado Novembro 22, 2011 Simples.. você faz um SELECt procurando pelo cliente especifico na tabela de clientes e depois grava os dados na outra tabela... Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Barbosa 1 Denunciar post Postado Novembro 22, 2011 O ideal é você colocar option value o id da tabela cliente, assim: echo("<option value='".$dados['idcliente']."'>".$dados['nomecliente']."</option>"); Depois receber essa informação, pesquisar na tabela cliente os dados pelo ID e atribuir os valores a variáveis, com essas variáves você poderá gravar onde quiser. Agora, uma dúvida, não seria melhor você gravar na tabela SERVIÇOS só o ID do cliente ? E sempre q quiser você poderá consultar o ID e pegar os dados do cliente. Compartilhar este post Link para o post Compartilhar em outros sites
LipeLauro 0 Denunciar post Postado Novembro 22, 2011 Não deu certo. E não encontrei nada relacionado a isso pelo forum... :( Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Barbosa 1 Denunciar post Postado Novembro 22, 2011 pô, sempre faço assim, vou posta um exemplo: <select name='idxx' id='idxx'> <?php $sql = mysql_query("SELECT * FROM tabela where codi1 = $codi1"); while($rs = mysql_fetch_array($sql)){ echo '<option value="'.$rs['id'].'">'.$rs[campoquevaiaparecer].'</option>; } Onde você receberá o valor, deve-se fazer assim: $id = $_POST['idxxx'] // que o name do select Agora, se você quiser pegar outros dados da tabela cliente, faça assim: Agora você já tem o id desejado que está na variável $id. $novaSLQ = mysql_query('SELECT * FROM clientes WHERE id = $id'); whihe ($rs = mysql_fetch_array($novaSQL)){ $campo1 = $rs['campo1']; $campo2 = $rs['campo2']; $campo3 = $rs['campo3]; echo $campo1.' - '.$campo2.' - '.$campo3; } Tente aí, caso não funcione, dá maiores detalhes de como está seu código. Compartilhar este post Link para o post Compartilhar em outros sites
LipeLauro 0 Denunciar post Postado Novembro 22, 2011 Não consegui novamente. Como pediu, segue o código. Desta forma aqui gravou apenas a palavra "endereco" no campo, ou seja, não trouxe da outra tabela o endereço propriamente dito. <select name="txtCliente" size="1" class="estiloform8"> <option value="Selecione" selected="selected">Selecione...</option> <?php include_once "../../../include/config.php"; $consulta=mysql_query("SELECT *FROM clientes WHERE codigoempresa = $codigoempresa order by nome ASC"); while ($dados = mysql_fetch_array($consulta)) { echo("<option value='".$dados['nome']."'>".$dados['nome']."</option>"); } ?> </select><input name="txtEndereco" type="hidden" id="codigo" value="<? echo $dados['endereco']; ?>"> Abraços Compartilhar este post Link para o post Compartilhar em outros sites
LipeLauro 0 Denunciar post Postado Novembro 22, 2011 Outra coisa, não quero informar na pagina de cadastro o endereço do cliente não, isso será feito automaticamente e ocultamente informando apenas o nome do cliente e através do nome do cliente, o sistema buscará na tabela Clientes e gravará na tabela Serviços. Compartilhar este post Link para o post Compartilhar em outros sites
Henrique Barcelos 290 Denunciar post Postado Novembro 22, 2011 Como faço para gravar no banco, na tabela SERVICOS o endereço do cliente, uma vez que na pagina de cadastro de serviços não vou colocar campo para inserir o endereço desse cliente? Você não deve fazer isso, o mais correto é relacionar o cliente com a entrada na tabela serviços através de uma chave estrangeira (foreign key). Quando for o caso, utilize um JOIN nessas duas tabelas para pegar o endereço do cliente relacionado àquele serviço. Se não entendeu o que eu falei, dê uma pesquisada por aí sobre 'SQL foreign keys' ou 'chaves estrangeiras SQL' e 'SQL JOIN'... Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Barbosa 1 Denunciar post Postado Novembro 22, 2011 Como é q você está recebendo a informação selecionada após clilcar no cliente desejado ? Outra coisa, no campo cliente da tabela de serviços você grava o nome ou o id do cliente ? Outra coisa, se o endereço já está na tabela de cliente, pq gravar novamente na tabela de serviços ? Se você gravar só o ID, pode a qualquer momento pegar todos os dados do cliente atravéz do INNER JOIN, como foi citado no POST de HENRIQUE Compartilhar este post Link para o post Compartilhar em outros sites
LipeLauro 0 Denunciar post Postado Novembro 24, 2011 Marcos, bom dia. Respondendo... 1 - Na realidade, na tela de cadastro de Serviços não tem campo para inserir o endereço do cliente, apenas o campo para inserir o nome do cliente; 2 - No campo cliente eu gravo o nome do cliente; 3 - Para não fazer a gravação novamente na tabela de serviços eu teria que relacionar as tabelas, e infelizmente ainda não sei fazer isso, pode me dar umas dicas? Abraços irmão! Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Barbosa 1 Denunciar post Postado Novembro 24, 2011 O relacionamento entre tabelas é uma boa prática de programação, e vai ajudar a diminuir vários problemas. Imagine que você tem no cadastro de cliente: ID CIENTE ENDEREÇO 01 JOÃO DA SILVA RUA XXXXX na tabela de vendas, você tem para esse cliente 50 vendas em dias e horários diferentes. Agora digamos de esse cliente mudou de endereço, como você fará p mudar o endereço em 50 registro diferentes. Esse é um dos motivos para fazer o relacionamento entre tabelas. Para fazer isso, eu uso o INNER JOIN, você pode pesquisar, no próprio manual do PHP você encontrará muitas coisas falando sobre o assunto. Um exemplo. Agora temos a tabela de vendas idVenda IdCliente qtdeVenda 01 ----- 02 ---- 50 02 ----- 02 ---- 30 03 ----- 03 ---- 40 04 ----- 01 ---- 20 05 ----- 01 ---- 15 06 ----- 01 ---- 60 Vamos selecionar todas as vendas que foram feitas para o cliente 01. $sql = "SELECT * FROM vendas JOIN clientes ON (vendas.idCliente = clientes.Idcliente) WHERE vendas.idcliente = $idCliente"; $query = mysql_query($sql); while($rs = mysql_fetch_array($query)){ $idCliente = $rs['idCliente']; $nomeCliente = $rs['nomeCliente'] ; $qtdVenda = $rs['qtdeVenda'] ; } É mais ou menos isso, dá uma pesquisa sobre o assunto, tenta fazer, caso não consiga posta novamente aí. Marcos, bom dia. Respondendo... 1 - Na realidade, na tela de cadastro de Serviços não tem campo para inserir o endereço do cliente, apenas o campo para inserir o nome do cliente; 2 - No campo cliente eu gravo o nome do cliente; 3 - Para não fazer a gravação novamente na tabela de serviços eu teria que relacionar as tabelas, e infelizmente ainda não sei fazer isso, pode me dar umas dicas? Abraços irmão! Compartilhar este post Link para o post Compartilhar em outros sites
LipeLauro 0 Denunciar post Postado Novembro 24, 2011 beleza, vamos imaginar que já fizemos essa rotina e tudo está gravado no banco. Agora, como vou exibir em uma pagina exibir.php o cliente e o endereço dele? como ficaria o select? Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Barbosa 1 Denunciar post Postado Novembro 24, 2011 No post acima, observe q eu já guardei o valores nas variáveis, agora é só você printar. tipo: sql = "SELECT * FROM vendas JOIN clientes ON (vendas.idCliente = clientes.Idcliente) WHERE vendas.idcliente = $idCliente"; $query = mysql_query($sql); while($rs = mysql_fetch_array($query)){ $idCliente = $rs['idCliente']; $nomeCliente = $rs['nomeCliente'] ; $qtdVenda = $rs['qtdeVenda'] ; echo $idCliente.'-'.$nomecliente.'-'. $qtdVenda; echo '<br />'; } Se quiser printar + dados do cliente, é só igualar a variável ao campo dentro do while, tipo: while($rs = mysql_fetch_array($query)){ $idCliente = $rs['idCliente']; $nomeCliente = $rs['nomeCliente'] ; $endereco = $rs[enderecoCliente] $qtdVenda = $rs['qtdeVenda'] ; echo $idCliente.'-'.$nomecliente.'-'.$enderecoCliente.'-'. $qtdVenda; echo '<br />'; beleza, vamos imaginar que já fizemos essa rotina e tudo está gravado no banco. Agora, como vou exibir em uma pagina exibir.php o cliente e o endereço dele? como ficaria o select? Compartilhar este post Link para o post Compartilhar em outros sites
LipeLauro 0 Denunciar post Postado Novembro 25, 2011 Amigão, infelizmente não consegui... Veja bem, vou postar o codigo do arquivo da pagina onde quero exibir os registros. Me ajude... :( <?php session_start(); if (!isset($_SESSION["login"]) || !isset($_SESSION["senha"]) || !isset($_SESSION["empresa_id"]) || ($_SESSION["nivel"] <> 2)) { header("location: ../../../formulario.php"); exit;} $con = mysql_pconnect('localhost','user','senha'); mysql_select_db('db'); $num_por_pagina = 20; if (!$pagina) { $pagina = 1; } $primeiro_registro = ($pagina*$num_por_pagina) - $num_por_pagina; $consulta = "SELECT id, date_format(datafinal, '%d/%m/%Y'), cliente, endereco, descricao FROM servico WHERE empresa_id = $empresa_id ORDER BY id DESC LIMIT $primeiro_registro, $num_por_pagina"; $res = mysql_query($consulta,$con); ?> <p> </p></td> <table width="800" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#000000" class="bordasimples"> <tr> <td width="66" bgcolor="#4B87C2"><div align="left" class="tabelas"><strong>Número</strong></div></td> <td width="73" height="25" bgcolor="#4B87C2"><div align="left" class="tabelas"><strong>Abertura</strong></div></td> <td width="191" bgcolor="#4B87C2"><div align="left" class="tabelas"><strong>Cliente</strong></div></td> <td width="192" bgcolor="#4B87C2"><div align="left" class="tabelas"><strong>Endereço</strong></div></td> <td width="96" bgcolor="#4B87C2"><div align="left" class="tabelas"><strong>Descrição</strong></div></td> <td width="73" colspan="2" align="center" valign="middle" bgcolor="#4B87C2"><div align="center" class="tabelas"><strong>Ações</strong></div></td> </tr> <?php while (list($id, $datafinal, $cliente, $endereco) = mysql_fetch_array($res)) { echo " <tr> <td height='23px' valign='top' style='font-family:Lucida Sans Unicode, Lucida Grande, sans-serif; font-size:11px;'><font class=grid> $id </td> <td height='23px' valign='top' style='font-family:Lucida Sans Unicode, Lucida Grande, sans-serif; font-size:11px;'><font class=grid> $datafinal </td> <td height='23px' valign='top' style='font-family:Lucida Sans Unicode, Lucida Grande, sans-serif; font-size:11px;'><font class=grid> $cliente </td> <td height='23px' valign='top' style='font-family:Lucida Sans Unicode, Lucida Grande, sans-serif; font-size:11px;'><font class=grid> $endereco</td> <td height='23px' valign='top' style='font-family:Lucida Sans Unicode, Lucida Grande, sans-serif; font-size:11px;'><font class=grid> $descricao</td> <td valign='top'><div align=center valign=top><a href=\"editar.php?id=$id\"><img src=\"../../../imagens/ico_lupa.gif\" border='0' /></a></td><td valign='top'><div align=center valign=top><a href=\"layout/imprimir.php?id=$id\" target=_blank><img src=\"../../../imagens/icone_impressora.gif\" border='0' /></a></div></td> </tr>\n"; } @mysql_close(); ?> </table> <table width="800" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <th align="left" scope="col" class="gridconsulta"><? $consulta = "SELECT COUNT(*) FROM servico"; list($total_usuarios) = mysql_fetch_array(mysql_query($consulta,$con)); $total_paginas = $total_usuarios/$num_por_pagina; $prev = $pagina - 1; $next = $pagina + 1; if ($pagina > 1) { $prev_link = "<a class='gridconsulta' href=\"$PHP_SELF?pagina=$prev\">Anterior</a>"; } else { $prev_link = "<a class='gridconsulta'>Anterior<a>"; } if ($total_paginas > $pagina) { $next_link = "<a class='gridconsulta' href=\"$PHP_SELF?pagina=$next\">Próxima</a>"; } else { $next_link = "<a class='gridconsulta'>Próxima<a>"; } $total_paginas = ceil($total_paginas); $painel = ""; for ($x=1; $x<=$total_paginas; $x++) { if ($x==$pagina) { $painel .= "<a class='gridconsulta'>$x,<a>"; } else { $painel .= " <a class='gridconsulta' href=\"$PHP_SELF?pagina=$x\">$x,</a>"; } } echo "$prev_link $painel $next_link"; ?></th> </tr> </table> <tr> <th scope="col"> <table width="900" align="center"> </table> </th> </tr> <p> </p> <div align="center"> <table width="600" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <th height="80" scope="col"><? include "../../../footer.php"; ?></th> </tr> </table> </div> <p> </p> Observe que estou tentando exibir na tela o cliente e o endereço dele. E não soube fazer isso utilizando o modelo de código que você me passou! Nossa! Sou lerdo demais pra entender as coisas.... :( E o pior de tudo é que depois que você deu a dica de usar apenas o idCliente, estou querendo fazer assim.... hehehehehe... muito melhor mesmo, mas primeiro preciso entender como fazer... Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Barbosa 1 Denunciar post Postado Novembro 25, 2011 Vamos fazer o seguinte, hj eu não estou no trabalho nem em ksa, mas chegarei mais tarde, então eu pego o seu código e analiso, pode ser ? Compartilhar este post Link para o post Compartilhar em outros sites
LipeLauro 0 Denunciar post Postado Novembro 28, 2011 beleza então! Tenho certeza que desta forma vou aprender de uma vez por todas o relacionamento de tabelas. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Marcos Barbosa 1 Denunciar post Postado Novembro 28, 2011 Olá, desculpe a demora... Pelo q vi, você ñ está usando o JOIN ON, acho q deveria usa-lo, você pode pesquisar na net, tem vários tuto falando sobre. Outra coisa, do jeito q você não está funcionando ? Está linha: while (list($id, $datafinal, $cliente, $endereco) = mysql_fetch_array($res)) Não deveria ser assim: while ($list = mysql_fetch_array($res)) { $ID = $list['$id'] ... } Compartilhar este post Link para o post Compartilhar em outros sites
LipeLauro 0 Denunciar post Postado Dezembro 1, 2011 Certo, na página listarservicos.php tenho o seguinte código que utilizo com campos de filtro para uma pesquisa mais detalhada: if($nomecliente == "Nomecliente") $nomecliente = ""; if($nomefantasia == "Nomefantasia") $nomefantasia = ""; if($telefone == "Telefone") $telefone = ""; if($endereco == "Endereco") $endereco = ""; if($cpf == "Cpf") $cpf = ""; if($cnpj == "Cnpj") $cnpj = ""; if($cidade == "Cidade") $cidade = ""; if($bairro == "Bairro") $bairro = ""; if ($nomecliente) $filtro1 = "and nomecliente like '%$nomecliente%'"; if ($nomefantasia) $filtro2 = "and nomefantasia like '%$nomefantasia%'"; if ($endereco) $filtro3 = "and endereco like '%$endereco%'"; if ($datainicial and $datafinal) $filtro4 = "and datacadastro BETWEEN '$datamysql1' AND '$datamysql2'"; if ($cpf) $filtro5 = "and cpf like '%$cpf%'"; if ($cnpj) $filtro6 = "and cnpj like '%$cnpj%'"; if ($telefone) $filtro7 = "and telefone like '%$telefone%'"; if ($cidade) $filtro7 = "and cidade like '%$cidade%'"; if ($bairro) $filtro7 = "and bairro like '%$bairro%'"; $consulta = "SELECT idclientes, nomecliente, endereco, bairro, cidade, cpf, cnpj FROM servicos WHERE empresas_idempresas = $empresas_idempresas $filtro1 $filtro2 $filtro3 $filtro4 $filtro5 $filtro6 $filtro7 ORDER BY idclientes DESC LIMIT $primeiro_registro, $num_por_pagina"; $res = mysql_query($consulta,$con); ?> como faço para modificar os "if" e o "select" para que os filtros funcionem com o relacionamento entre as tabelas CLIENTES e SERVICOS ???? Compartilhar este post Link para o post Compartilhar em outros sites