Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

LipeLauro

Gravar dado apartir de outro dado - Mysql

Recommended Posts

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

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

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

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

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

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

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
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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.