Ir para conteúdo

POWERED BY:

Arquivado

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

Carlos Antoliv

Como Gravar ID de checkbox que vem de tabelas em outra tabela?

Recommended Posts

Senhores,

como Gravar ID de checkbox que vem de tabelas em outra tabela?

 

Tenho um arquivo que exibe os produtos de uma lista(exibe_lista.php). Ao lado de cada produto tem um "checkbox". Esse produtos são alimentados de acordo com o banco, ou seja, existe apenas 1(um) checkbox que se repete mediante a quantidade de produtos no banco.

A ideia é gravar o ID do produto e de sua categoria em outra tabela. Até grava a categoria, mas ao gravar o id do produto, grava apenas o último número desse produto, ex:

 

Se o id da categoria é 5 e o id do produto é o 14, então, no banco, grava: 5 4 , ou seja, não grava o primeiro número e assim por diante.

Estava tentando colocar um input txt para inserir o valor do produto, também nao estou conseguindo.

 

Já passei alguns dias procurando a solução, mas não encontrei. Deixe aqui no fórum, mas ninguem respondeu ainda.

 

Será quem tem alguém que passou pela mesma situação que possa me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema é que você quer gravar 14 e grava só 1?

pelo que você descreveu e sem ver o código, só da pra dar sugestões vagas e palpites.

 

como está o html, php e tabela?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está certo Eletronic. Vou reformular a explicação e postar o codigo em seguida.]

Exibo uma lista de produtos, que vem do banco. Ao lado de cada produto, tem um checkbox. O número de checkbox vem de acordo com o número de produtos. Gravo também o id da categoria. Este funciona normal, mas o id do produto não grava corretamente. Por exemplo, se o id do produto é 14 vai para o banco apenas o número 4; se é 10 vai para o banco apenas o número 0, e assim por diante. Já tentei de quase tudo, mas não tudo.

 

CÓDIGO:

 

<?php require_once("config/config.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PRODUTO PARA LISTA</title>
</head>
<body>
<p>
<?php
?>
<form id="form1" name="form1" method="post" action="exibir_lista_presenca.php?funcao=gravarProdutosAddCarrinho3">
<p>
<label>
<input type="submit" name="btnEnviar" id="btnEnviar" value="Enviar" />
</label>
</p>
<table width="997" border="1" align="center" cellpadding="10" cellspacing="0">
<tr>
<td width="3" bgcolor="#BFCDDB"> </td>
<td width="53" bgcolor="#BFCDDB"><strong>COD</strong></td>
<td width="139" bgcolor="#BFCDDB"><strong>NOME PROD</strong></td>
<td width="206" bgcolor="#BFCDDB"><strong>DESCRICAO</strong></td>
<td width="145" bgcolor="#BFCDDB"><strong>PRECO</strong></td>
<td width="90" bgcolor="#BFCDDB"><strong>PRECO</strong></td>
<td width="111" bgcolor="#BFCDDB"><strong>fk_usuario_sessao</strong></td>
<td width="30" bgcolor="#BFCDDB"><strong>uf</strong></td>
<td width="20" bgcolor="#BFCDDB"> </td>
</tr>
<?php
$sql_exibir = "SELECT DISTINCT p.id_produtos, p.fk_cate3, c3.nome_cate3, p.desc_produto, p.preco_produto, p.fk_usuario_sessao, e.uf FROM tb_produtos p INNER JOIN tb_categoria3 c3 ON p.fk_cate3 = c3.id_cate3 INNER JOIN tb_endereco e INNER JOIN tb_clientes cli on e.id_endereco = cli.fk_endereco ORDER BY p.preco_produto";
$query_exibir = mysql_query($sql_exibir);
if (isset($_GET['funcao'])){
// AÇÃO - ADICIONA PRODUTOS
if ($_GET['funcao'] == "gravarProdutosAddCarrinho3"){
foreach($_POST['produto'] as $value){
echo $value;
$insert = mysql_query("INSERT INTO tb_car_teste(nome_produto, desc_produto, fk_produtos, preco)VALUES('$value[0]', '$value[1]', '$value[2]')");
echo "Produto Cadastrado com Sucesso. Redirecionando...";
echo "<meta HTTP-EQUIV='Refresh' CONTENT='1;URL=exibir_lista_presenca.php'>";
echo $value . '<br/>';
$check_prod = $_POST["txt_preco"];
}}}
while ($sql_exibir = mysql_fetch_array($query_exibir)) {
$cod_produto = $sql_exibir["id_produtos"];
$nome_fk_prod = $sql_exibir["fk_cate3"];
$nome_produto = $sql_exibir["nome_cate3"];
$descricao_prod = $sql_exibir["desc_produto"];
$preco_prod = $sql_exibir["preco_produto"];
?>
<tr>
<td><?php echo $cod_produto; ?></td>
<td><?php echo $nome_fk_prod ?> </td>
<td><?php echo $nome_produto; ?> </td>
<td><?php echo $descricao_prod; ?> </td>
<td><?php echo $preco_prod; ?> </td>
<td><label for="txt_preco"></label>
<input name="txt_preco" type="text" id="txt_preco" size="15" /></td>
<td> </td>
<td> </td>
<td><input type="checkbox" name="produto[]" id="produto[]" value="<?php echo $nome_fk_prod[0]; ?><?php echo $cod_produto[1];?> ?><?php echo $check_prod[2]; ?>"/>
<label for="produto[]"></label></td>
</tr>
<?php
}
?>
<tr>
<td></td>
<td height="2"></td>
</tr>
</table>
</form>
<p> </p>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

No value vc tem isso

value="<?php echo $nome_fk_prod[0]; ?><?php echo $cod_produto[1];?> ?><?php echo $check_prod[2]; ?>

$cod_produto[1];

//////
$exemplo = '14';
echo $exemplo[1];
//mostra '4'

Tire o [1] da frente do código

 

 

me corrijam se eu estiver errado, até onde eu sei a requisição normalmente é GET ou POST

então se vc tem um não tem outro,

por isso achei estranho essa parte:

if (isset($_GET['funcao'])) {
// AÇÃO - ADICIONA PRODUTOS
    if ($_GET['funcao'] == "gravarProdutosAddCarrinho3") {

        foreach ($_POST['produto'] as $value) {
            echo $value;
            $insert = mysql_query("INSERT INTO tb_car_teste(nome_produto, desc_produto, fk_produtos, preco)VALUES('$value[0]', '$value[1]', '$value[2]')");

            echo "Produto Cadastrado com Sucesso. Redirecionando...";
            echo "<meta HTTP-EQUIV='Refresh' CONTENT='1;URL=exibir_lista_presenca.php'>";
            echo $value . '<br/>';

            $check_prod = $_POST["txt_preco"];
        }
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

É verdade..

fiz a seguinte correção e de acordo com a a tua sugestão..também não consegui.

Só grava apenas o segundo número. Se é 39, grava o 9.... a tua explicação tem fundamento. Segue o código:

 

<?php require_once("config/config.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PRODUTO PARA LISTA</title>
</head>
<body>
<p>
<?php
?>
<form id="form1" name="form1" method="post" action="exibir_lista_presenca.php?funcao=gravarProdutosAddCarrinho3">
<p>
<label>
<input type="submit" name="btnEnviar" id="btnEnviar" value="Enviar" />
</label>
</p>
<table width="997" border="1" align="center" cellpadding="10" cellspacing="0">
<tr>
<td width="3" bgcolor="#BFCDDB"> </td>
<td width="53" bgcolor="#BFCDDB"><strong>COD</strong></td>
<td width="139" bgcolor="#BFCDDB"><strong>NOME PROD</strong></td>
<td width="206" bgcolor="#BFCDDB"><strong>DESCRICAO</strong></td>
<td width="145" bgcolor="#BFCDDB"><strong>PRECO</strong></td>
<td width="90" bgcolor="#BFCDDB"><strong>PRECO</strong></td>
<td width="111" bgcolor="#BFCDDB"><strong>fk_usuario_sessao</strong></td>
<td width="30" bgcolor="#BFCDDB"><strong>uf</strong></td>
<td width="20" bgcolor="#BFCDDB"> </td>
</tr>
<?php
$sql_exibir = "SELECT DISTINCT p.id_produtos, p.fk_cate3, c3.nome_cate3, p.desc_produto, p.preco_produto, p.fk_usuario_sessao, e.uf FROM tb_produtos p INNER JOIN tb_categoria3 c3 ON p.fk_cate3 = c3.id_cate3 INNER JOIN tb_endereco e INNER JOIN tb_clientes cli on e.id_endereco = cli.fk_endereco ORDER BY p.preco_produto";
$query_exibir = mysql_query($sql_exibir);
if (isset($_POST['funcao'])){
// AÇÃO - ADICIONA PRODUTOS
if ($_POST['funcao'] == "gravarProdutosAddCarrinho3"){
foreach($_POST['produto'] as $value){
echo $value;
$insert = mysql_query("INSERT INTO tb_car_teste(nome_produto, desc_produto, fk_produtos)VALUES('$value[0]', '$value[1]', '$check_prod')");
echo "Produto Cadastrado com Sucesso. Redirecionando...";
echo "<meta HTTP-EQUIV='Refresh' CONTENT='1;URL=exibir_lista_presenca.php'>";
echo $value . '<br/>';
}}}
while ($sql_exibir = mysql_fetch_array($query_exibir)) {
$cod_produto = $sql_exibir["id_produtos"];
$nome_fk_prod = $sql_exibir["fk_cate3"];
$nome_produto = $sql_exibir["nome_cate3"];
$descricao_prod = $sql_exibir["desc_produto"];
$preco_prod = $sql_exibir["preco_produto"];
$check_prod = $_POST["txt_preco"];
?>
<tr>
<td><?php echo $cod_produto; ?></td>
<td><?php echo $nome_fk_prod ?> </td>
<td><?php echo $nome_produto; ?> </td>
<td><?php echo $descricao_prod; ?> </td>
<td><?php echo $preco_prod; ?> </td>
<td><label for="txt_preco"></label>
<input name="txt_preco" type="text" id="txt_preco" size="15" /></td>
<td> </td>
<td> </td>
<td><input type="checkbox" name="produto[]" id="produto[]" value="<?php echo $nome_fk_prod; ?><?php echo $cod_produto; ?><?php echo $check_prod; ?>"/>
<label for="produto[]"></label></td>
</tr>
<?php
}
?>
<tr>
<td></td>
<td height="2"></td>
</tr>
</table>
</form>
<p> </p>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Clica com o botão direito no checkbox e em inspecionar elemento, e veja o como está o o value dele, e saber se o erro é nesse código ou no que grava.

 

outra coisa, campo da tabela aceita mais de um caractere?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eletronic,

olha o que fiz: adicionei mais uma variável >>> $value[2] <<< ao lado da $value[1] e deu certo...sinceramente, nao sei se isso é gatilho ou se é assim que se faz..

 

Sim, aceita mais de um caractere, pois o deixei como varchar;

 

Veja:

$insert = mysql_query("INSERT INTO tb_car_teste(nome_produto, desc_produto, fk_produtos)VALUES('$value[0]', '$value[1]$value[2]', '$value[3]')");

 

Outra, esse $value[3] é um input text para setar o preço do produto, que também não está dando certo; grava em branco..

 

O que tu sugere nas duas situações, visto que adicionei a variável e funcionou..??

Compartilhar este post


Link para o post
Compartilhar em outros sites

O valor de cada $value no foreach vai ter o valor de cada checkbox

pra vc entender como usar, vc tem que ver como ele ta sendo montado,

por isso te falei pra inspecionar o elemento checkbox e ver como o php esta imprimindo o value dele

 

pelo que vi, vc esta colocando os códigos um do lado do outro (colados 46862188) ai na hora de gravar é dificil saber qual é o codigo do que;

por isso vc teve de fazer desse tipo:

$exemplo = '1489798';
echo $exemplo[0],$exemplo[1];
//mostra '14'
echo $exemplo[2];
//mostra '8'
//a string é como array de caracteres
Outra, esse $value[3] é um input text para setar o preço do produto, que também não está dando certo; grava em branco..

 

no checkbox vc pois

<?php echo $check_prod; ?>"

ele é definida por $_POST["txt_preco"];

mas quando vc abrir a pagina por link ou diretamente (GET) ele fica sem valor;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade, coloquei somente aquele porque percebi que a variável estava grande um número de cada casa....

bom, inspecionei o elemento, veja:

 

Hospedei a imagem neste site, que mostrar inspecionando o elemento:

 

http://pt-br.tinypic.com/view.php?pic=14mfxk&s=8#.VKgYBtLF-VM

 

quando disse que vc coloca os códigos um do lado do outro, é nessa parte

value="<?php echo $nome_fk_prod; ?><?php echo $cod_produto; ?><?php echo $check_prod; ?>"

quando disse pra inspecionar o elemento eu me refiro ao checkbox

botao direto em cima do checkbox e inspecionar elemento

Compartilhar este post


Link para o post
Compartilhar em outros sites

O valor está correto, pois 5 é o id da categoria e o 36 é o id do produto. O valores estão indo para o banco corretamento, porém naõ sei se é correto da forma que fiz, mas é aquilo: "tá funcionando";...srsrs

 

$insert = mysql_query("INSERT INTO tb_car_teste(nome_produto, desc_produto, fk_produtos)VALUES('$value[0]', '$value[1]$value[2]', '$value[3]')");

 

 

O valor do input text não consigo enviar para ao banco. Ao inspecionar elemento, percebi isso.

O valor vai em branco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você terá vários desses:

<input name="txt_preco" type="text" id="txt_preco" size="15" /></td>

faça igual ao check box adicione chaves '[]' assim, na parte de gravar ele, será um array com os dados de cada campo.

 

com isso vc vê que no tem muito sentido usar isso no id, como vc fez no checkbox

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz conforme, mas nao funcionou. Veja:

 

 

<?php require_once("config/config.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PRODUTO PARA LISTA</title>
</head>
<body>
<p>
<?php
?>
<form id="form1" name="form1" method="post" action="add_produtos_carrinho.php?funcao=gravarProdutosAddCarrinho3">
<p>
<label>
<input type="submit" name="btnEnviar" id="btnEnviar" value="Enviar" />
</label>
</p>
<table width="997" border="1" align="center" cellpadding="10" cellspacing="0">
<tr>
<td width="3" bgcolor="#BFCDDB"> </td>
<td width="53" bgcolor="#BFCDDB"><strong>COD</strong></td>
<td width="139" bgcolor="#BFCDDB"><strong>NOME PROD</strong></td>
<td width="206" bgcolor="#BFCDDB"><strong>DESCRICAO</strong></td>
<td width="90" bgcolor="#BFCDDB"><strong>PRECO</strong></td>
<td width="30" bgcolor="#BFCDDB"><strong>uf</strong></td>
<td width="20" bgcolor="#BFCDDB"> </td>
</tr>
<?php
$sql_exibir = "SELECT DISTINCT p.id_produtos, p.fk_cate3, c3.nome_cate3, p.desc_produto, p.preco_produto, p.fk_usuario_sessao, e.uf FROM tb_produtos p INNER JOIN tb_categoria3 c3 ON p.fk_cate3 = c3.id_cate3 INNER JOIN tb_endereco e INNER JOIN tb_clientes cli on e.id_endereco = cli.fk_endereco ORDER BY p.preco_produto";
$query_exibir = mysql_query($sql_exibir);
if (isset($_GET['funcao'])){
// AÇÃO - ADICIONA PRODUTOS
if ($_GET['funcao'] == "gravarProdutosAddCarrinho3"){
foreach($_POST['produto'] as $value){
$check_prod = $_POST["txt_preco"];
echo $value;
$insert = mysql_query("INSERT INTO tb_car_teste(nome_produto, desc_produto, fk_produtos, preco)VALUES('$value[0]', '', '$value[1]$value[2]', '$value[3]')");
echo "Produto Cadastrado com Sucesso. Redirecionando...";
echo "<meta HTTP-EQUIV='Refresh' CONTENT='1;URL=add_produtos_carrinho.php'>";
echo $value . '<br/>';
}}}
while ($sql_exibir = mysql_fetch_array($query_exibir)) {
$cod_produto = $sql_exibir["id_produtos"];
$nome_fk_prod = $sql_exibir["fk_cate3"];
$nome_produto = $sql_exibir["nome_cate3"];
$descricao_prod = $sql_exibir["desc_produto"];
$preco_prod = $sql_exibir["preco_produto"];
?>
<tr>
<td><?php echo $cod_produto; ?></td>
<td><?php echo $nome_fk_prod ?> </td>
<td><?php echo $nome_produto; ?> </td>
<td><?php echo $descricao_prod; ?> </td>
<td><label for="txt_preco"></label>
<input name="txt_preco[]" type="text" id="txt_preco[]" size="15" value="" /></td>
<td> </td>
<td><input type="checkbox" name="produto[]" id="produto[]" value="<?php echo $nome_fk_prod; ?><?php echo $cod_produto; ?><?php echo $check_prod; ?>"/>
<label for="produto[]"></label></td>
</tr>
<?php
}
?>
<tr>
<td></td>
<td height="2"></td>
</tr>
</table>
</form>
<p> </p>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

$_POST["txt_preco"];

agora é um array vc tera que mudar a forma de pegar os dados

outra coisa vc atribui ele a $check_prod mas em nenhum momento vc usa a variavel no insert

 $insert = mysql_query("INSERT INTO tb_car_teste(nome_produto, desc_produto, fk_produtos, preco)
VALUES('$value[0]', '', '$value[1]$value[2]', '$value[3]')"); 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O $checkbox_prod["txt_preco"] é o input text, certo?

O coloquei dentro do checkbox através da variável $checobox_prod

Agora ele é o $value[3] referenciado pelo value no checkbox.

 

Já coloquei assim também:

 

$insert = mysql_query("INSERT INTO tb_car_teste(nome_produto, desc_produto, fk_produtos, preco)
VALUES('$value[0]', '', '$value[1]$value[2]', '$checobox_prod')"
);

 

mas não funcionou...

 

Só falta essa parte para acabar esse drama com terror...rsrs...

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

$_POST["txt_preco"];

agora é um array você tera que mudar a forma de pegar os dados

 

de um var_dumb($_POST["txt_preco"]) fora do loop;

pra vc entender o que estou falando e ver se esta chegando certo

se vc ver um array com o oque vc digitou em cada campo

entao vc ja deve saber como usar no seu insert

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, vc que tem que saber se ta certo ou nao

o no items no array esta o que vc digitou? no caso só um campo?

outra coisa vc tera que retirar os elementos vazios, pois vc só marca alguns e o array é do todos os campos

tem uma função php que faz isso, de uma pesquisada

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.