Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, senhores.
Sei que existem diversos tópicos por aí sobre esse assunto, contudo, não consegui solucionar o problema, mesmo depois de 1 dia tentando fazer algo até simples.
Seguinte, estou pegando o id de um produto e tentando jogar em outra tabela, pelo checkbox.
ex:
id produto
23 lapis
43 caneta
pelo checkbox, a pessoa escolhe o produto e adicona em uma lista, que é outro banco. Se pessoa selecionar mais de 1 item da lista, o laço só envia para o banco apenas 1 item de qualquer forma.
Vou postar o Código:
Código do INSERT:
$check1 = (isset($_POST["check"]) && $_POST["check"] != null) ? $_POST["check"] : "";
foreach($check1 as $check){
$stmt = $conexao->prepare("INSERT INTO tb_itemProdKit (fk_tb_kit, fk_usuarios, fk_tb_produtos) VALUES (?, ?, ?)");
$stmt->bindParam(1, $nome_prod);
$stmt->bindParam(2, $idSessao);
$stmt->bindParam(3, $check);
if ($stmt->execute()) {
if ($stmt->rowCount() > 0) {
echo "Dados cadastrados com sucesso!";
$id_prod = null;
$nome_prod = null;
$idSessao = null;
$check = null;
header("Location: item-produto-kit.php");exit;
} else {
echo "Erro ao tentar efetivar cadastro";
}
} else {
throw new PDOException("Erro: Não foi possível executar a declaração sql");
}
} } } catch (PDOException $erro) {
echo "Erro: " . $erro->getMessage();
}
Agora o código do checkbox:
if ($stmt->execute()) {
while ($rs = $stmt->fetch(PDO::FETCH_OBJ)) {
echo "<tr>";
echo "<td><input type='checkbox' name='check[]' id='check' value='".$rs->id_prod."'</td><td class='lista_usuario'>".$rs->nome_produto."</td><td class='lista_usuario'>".$rs->desc_prod."</td><td class='lista_usuario'>".$rs->peso_liq_prod
."</td>"
;
echo "</tr>";
}
}else {
echo "Erro: Não foi possível recuperar os dados do banco de dados";
}
} catch (PDOException $erro) {
echo "Erro: ".$erro->getMessage();
}
echo "</form>"
?>
Está cadastrando apenas 1 item e não múltiplos itens.
abço!!Faltou mostrar como obtêm o nome do produto, e id do usuário. Sem essas informações não pude apresentar um exemplo melhor.
<?php
$produtos = [
0 => ['id' => 1, 'nome' => 'lapis'],
1 => ['id' => 2, 'nome' => 'caneta'],
2 => ['id' => 3, 'nome' => 'borracha']
];?>
<hr />
<form method="POST" action="">
<?php foreach ($produtos as $produto) { ?>
<input
type="checkbox"
name="check[]"
id="<?= $produto['id'] ?>"
value="<?= $produto['nome'] ?>" />
<?= $produto['id'] ?>
<?php } ?>
<button>Enviar</button>
</form>
<?php
$post = filter_input_array(INPUT_POST, FILTER_DEFAULT);
$inserir = [];
if ($post) {
foreach ($post['check'] as $chave => $valor) {
$inserir[$chave] = $valor;
var_dump($inserir[$chave]); // O id para executar a query
}
}
Tenha em mente quantos input check podem ser enviados, pelo que percebi você irá executar uma query a cada input marcado.
Então nada impede de alguém mau intencionado aditar o HTML pelo inspetor e colocar lá milhares de input fazendo seu sistema serve-side executar também milhares de vezes causando um colapso pela sobrecarga, sem entrar nos termos de injeção de código pois todo valor entrado deve ser verificado e tratado antes de jogar no banco.>
6 minutos atrás, Omar~ disse:
Faltou mostrar como obtêm o nome do produto, e id do usuário. Sem essas informações não pude apresentar um exemplo melhor.
<?php
$produtos = [
0 => ['id' => 1, 'nome' => 'lapis'],
1 => ['id' => 2, 'nome' => 'caneta'],
2 => ['id' => 3, 'nome' => 'borracha']
];?>
<hr />
<form method="POST" action="">
<?php foreach ($produtos as $produto) { ?>
<input
type="checkbox"
name="check[]"
id="<?= $produto['id'] ?>"
value="<?= $produto['nome'] ?>" />
<?= $produto['id'] ?>
<?php } ?>
<button>Enviar</button>
</form>
<?php
$post = filter_input_array(INPUT_POST, FILTER_DEFAULT);
$inserir = [];
if ($post) {
foreach ($post['check'] as $chave => $valor) {
$inserir[$chave] = $valor;
var_dump($inserir[$chave]); // O id para executar a query
}
}
Tenha em mente quantos input check podem ser enviados, pelo que percebi você irá executar uma query a cada input marcado.
Então nada impede de alguém mau intencionado aditar o HTML pelo inspetor e colocar lá milhares de input fazendo seu sistema serve-side executar também milhares de vezes causando um colapso pela sobrecarga, sem entrar nos termos de injeção de código pois todo valor entrado deve ser verificado e tratado antes de jogar no banco.
Opa!!
vou postar o código inteiro.
<?php
session_start();
echo "Usuario: ". $_SESSION['usuarioNome'];
echo "<br>";
echo "Codigo: ". $idSessao = $_SESSION['usuarioId'];
?>
<br>
<a href="sair.php">Sair</a>
<?php
require_once('conexao_lisbox.php');
$sql = "SELECT * FROM tb_kit kit
INNER JOIN usuarios usu
ON kit.fk_usuario = usu.id
WHERE fk_usuario = '".$_SESSION['usuarioId']."'";
$dados = mysqli_query($conn,$sql) or die(mysql_error());
$linha = mysqli_fetch_assoc($dados);
$total = mysqli_num_rows($dados);
// Verifica se a conexão não funcionou...
if (!$conn) {
die("A conexão com o banco de dados falhou: " . mysqli_connect_error());
}
else {
?>
<?php
//#################CONEXAO COM O BANCO DE DADOS######################
try {
$conexao = new PDO("mysql:host=localhost; dbname=db_sistema", "root", "");
$conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conexao->exec("set names utf8");
} catch (PDOException $erro) {
echo "Erro na conexão:" . $erro->getMessage();
}
// Verificar se foi enviando dados via POST
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$id_prod = (isset($_POST["id_prod"]) && $_POST["id_prod"] != null) ? $_POST["id_prod"] : "";
$nome_prod = (isset($_POST["sl_grupo"]) && $_POST["sl_grupo"] != null) ? $_POST["sl_grupo"] : "";
$check1 = (isset($_POST["check"]) && $_POST["check"] != null) ? $_POST["check"] : "";
//$check1 = $_POST["check"];
$chk = "" ;
//sabendo = $_POST['check'];
//$check = implode(",",$check2);
} else if (!isset($id_prod)) {
// Se não se não foi setado nenhum valor para variável $id
$id_prod = (isset($_GET["id_prod"]) && $_GET["id_prod"] != null) ? $_GET["id_prod"] : "";
$nome_prod = NULL;
$idSessao = NULL;
$check = NULL;
}//////////////////////FIM VERIFICAÇÃO POST///////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////CODIGO PARA SALVAR REGISTRO/////////////////////////////////////////////////////////////
if (isset($_REQUEST["act"]) && $_REQUEST["act"] == "save" && $nome_prod != "") {
try {
//O código abaixo faz o seguinte: atualiza o registro de modo que não inserire no novo registro.
//esse if faz com os registros sejam atualizados, caso existem dados no formulario;
if ($id_prod != "") {// SE diferente de VAZIO, ENTÃO faça:
$stmt = $conexao->prepare("UPDATE tb_itemProdKit SET fk_tb_kit=?, fk_usuarios=?, fk_tb_produtos=? WHERE id_itemPrdoKit = ?");
$stmt->bindParam(4, $id_prod); //ao inserir a linha de código do UPDATE, essa linhas foi criada;
} else { //SENÃO execute alinha de código abaixo:
foreach($check1 as $check)
{
$stmt = $conexao->prepare("INSERT INTO tb_itemProdKit (fk_tb_kit, fk_usuarios, fk_tb_produtos) VALUES (?, ?, ?)");
$stmt->bindParam(1, $nome_prod);
$stmt->bindParam(2, $idSessao);
$stmt->bindParam(3, $check);
$stmt->execute($check);
}
if ($stmt->execute()) {
if ($stmt->rowCount() > 0) {
echo "Dados cadastrados com sucesso!";
$id_prod = null;
$nome_prod = null;
$idSessao = null;
$check = null;
header("Location: item-produto-kit.php");exit;
} else {
echo "Erro ao tentar efetivar cadastro";
}
} else {
throw new PDOException("Erro: Não foi possível executar a declaração sql");
}
} } catch (PDOException $erro) {
echo "Erro: " . $erro->getMessage();
}
}//////////////////FIM CÓDIGO PARA SALVAR REGISTRO////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sem título</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script><!-- Via MaxCDN -->
</head>
<body>
<form action="?act=save" method="post" name="form1">
<input type="hidden" name="id_prod" <?php
//Preenche o id no campo id com um valor "value"
if (isset($id_prod) && $id_prod != null || $id_prod != "") {
echo "value=\"{$id_prod}\"";
}
?> />
<p> Grupo Alimentício:
<select name="sl_grupo" id="sl_grupo">
<option value="" selected = selected>Escolha um Grupo Alimentício</option>
<?php
if($total > 0) {
do {
echo "<option value='".$linha['id_nome_kit']."'>".$linha['nome_kit']."</option>";
}while($linha = mysqli_fetch_assoc($dados));
}
?>
</select>
<p>Foto:
<label for="sl_marca">:</label>
</p>
<p> </p>
<p>
<input type="submit" name="submit" id="submit" value="Enviar">
</p>
<p><strong>Legenda: kg= Kilo; gm= Gramas; lt= Litros;</strong></p>
<table border ="1" width="58%">
<tr class="celulas">
<th width="8%">( )</th>
<th width="20%">Produto</th>
<th width="47%">Descricao</th>
<th width="8%">kg/gm/lt</th>
<th width="8%">Qtdade</th>
</tr>
<?php
////////////////////BLOCO QUE REALIZA O PAPEL DO READ - RECUPERA OS DADOS E APRESENTA NA TELA
try { //$idSessao FILTRO pela variável da sessão'".$_SESSION['usuarioId']."'
$stmt = $conexao->prepare("SELECT DISTINCT
prods.nome_prod,
prod.nome_produto,
prods.un_medida,
prods.desc_prod,
prods.peso_liq_prod,
prods.qtd_prod,
prod.id_produto,
usuarios.nome,
prods.id_prod
FROM tb_produtos prods
INNER JOIN usuarios
ON prods.fk_usuarios = usuarios.id
INNER JOIN tb_produto prod
ON prod.id_produto = prods.nome_prod
INNER JOIN tb_kit kit
ON prods.fk_usuarios = kit.fk_usuario WHERE kit.fk_usuario = '".$_SESSION['usuarioId']."' ");
if ($stmt->execute()) {
while ($rs = $stmt->fetch(PDO::FETCH_OBJ)) {
echo "<tr>";
echo "<td><input type='checkbox' name='check[]' id='check' value='".$rs->id_prod."'</td><td class='lista_usuario'>".$rs->nome_produto."</td><td class='lista_usuario'>".$rs->desc_prod."</td><td class='lista_usuario'>".$rs->peso_liq_prod
."</td>"
;
echo "</tr>";
}
}else {
echo "Erro: Não foi possível recuperar os dados do banco de dados";
}
} catch (PDOException $erro) {
echo "Erro: ".$erro->getMessage();
}
echo "</form>"
?>
</table>
</body>
</html>
<?php
mysqli_close($conn);
}
?>Senhores, já solucionei.
Vou postar a solução
Veja se estes exemplos ajuda
Ex 01
Ex 02
Ex 03