Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Caros amigos,
Por favor, sabem como inserir uma $variável do PHP no checkbox, mais no campo "Value" ?
vlew
<html>
<head>
</head>
<body>
<form>
<input type="checkbox" name="vale[]" value="**variavel do PHP**"><br>
</form>
</body>
</html>Bom dia Sérgio,
Deu certo, porém ele grava apenas um valor do checkbox... tenho 71 campos com checkbox.
Dessa forma a variável grava apenas o primeiro checkbox, os demais não grava no banco...
essa é a mensagem de erro:
Pesquisa gravada no banco!Pesquisa gravada no banco!Fixa - Cliente com problemas na An�lise de contas? Falta de corre��o da causa raizPesquisa gravada no banco!
Tabelas: tab_pesquisa (traz as perguntas...)
tab_respostas (tabela onde será gravada as respostas dos checkbox)
Abaixo segue meu código completo:
<html>
<head>
<title>Pesquisa</title>
</head>
<body>
<?php
$pegacheckbox = 0;
$conn = new mysqli('localhost', 'root', '', 'pesquisa');
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM tab_pesquisa";
$result = $conn->query($sql);
$linhas = mysqli_num_rows($result);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
?>
<form name="form" action="" method="post" >
<table border=0,5 bgcolor="white" width=30% height=20%>
<tr>
<td> <?php echo "<br>Pergunta: " . $row["id_tab_pesquisa"]. " <br>" . $row["perguntas"]. "<br>";
$pegacheckbox = sprintf('%s', $row["perguntas"]); ?> </td>
<td> <br> <?php $option = '<label class="checkbox-inline"><input type="checkbox" name="chek[]" value=""> </label>';
echo "$option<br>"; ?> </td>
</tr>
</table>
<?php
}
}
// Código para pegar valores no checkbox ............................................
if(isset($_POST['acao']) && $_POST['acao'] == "enviar") {
if(!empty($_POST['chek'])){
$campo = $_POST['chek'];
foreach($campo as $value){
echo $value. '<br/>';
$conn = new mysqli('localhost', 'root', '', 'pesquisa');
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO tab_respostas (respostas)
VALUES ('$value')";
if ($conn->query($sql) === TRUE) {
echo "Pesquisa gravada no banco!";
}else{
echo "Erro: " . $sql . "<br>" . $conn->error;
}
}
}
else{
echo "não existe nada marcado";
}
}
?>
<p><input type="checkbox" name="chek[]" value= "<?php echo $pegacheckbox; ?>" />Resposta 1....atualizada<p><br>
<input type="hidden" name="acao" value="enviar" />
<input type="submit" value="Enviar"/>
</form>
</body>
</html>Oi, esse código seu tá sem lógica, você está criando vários formulários e várias tabelas e finalizando como se fosse 1 só.
Vamos tentar entender...
Você quer pegar uma lista de perguntas da tabela tab_pesquisa e exibir cada uma com um checkbox ao lado para ser selecionado e quando enviar o formulário gravar na tabela tab_respostas apenas os que estão marcados? Esse checkbox funcionaria como um "SIM" para a pergunta em questão? qual é a estrutura das suas tabelas?
Olá Sérgio,
À princípio o checkbox gravaria como um "sim" onde foi marcado e em branco ou não onde não foi marcado.
teria um exemplo pra me ajudar,
como viu sou bem novo em php
Bom dia, desculpe a demora, muito trampo por aqui (como sempre rsrsrsrs)
Fiz um exemplo simples pra você entender a separação das coisas, são 2 etapas a primeira, que cria o formulário com as perguntas e os checkboxes para marcar, e a segunda que salva as respostas no banco de dados e lista quais perguntas foram respondidas.
Ao contrário do que você estava fazendo, agora estou passando a ID da pergunta no value do checkbox para ser inserida na tabela de respostas e estou usando o valor 1 para as respondidas (eu uso sempre o padrão 1 / 0 para sim/não) depois se quiser fazer uma verificação é só fazer um if($resposta == 1) para sim .
Para o exemplo criei duas tabelas com os seguintes campos:
Tabela ex1_perguntas (id_pergunta, pergunta)
Tabela ex2_respostas (id_resposta, id_pergunta, resposta)
Daí você modifica os dados de conexão e das tabelas de acordo com a sua estrutura, segue o código:
<?php
//Definindo o conjunto de caracteres (para acentuação)
header("Content-type: text/html; charset=UTF-8");
$pegacheckbox = 0;
$conn = new mysqli('localhost', 'root', '', 'test');if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} $conn->query("SET NAMES 'utf8'");
$conn->query('SET character_set_connection=utf8');
$conn->query('SET character_set_client=utf8');
$conn->query('SET character_set_results=utf8');
?>
<html>
<head>
<title>Pesquisa</title>
<meta charset="UTF-8">
</head>
<body>
<?php
if(!isset($_POST['acao'])){
?>
<form name="form" action="" method="post" >
<table border=0,5 bgcolor="white" width=30% height=20%>
<tr>
<td>Pergunta</td>
<td>Resposta (SIM)</td>
</tr>
<?php
$sql = "SELECT * FROM ex1_perguntas";
$result = $conn->query($sql);
$linhas = mysqli_num_rows($result);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
?>
<tr>
<td>
<?php echo $row["pergunta"];?>
</td>
<td><input type="checkbox" name="chek[]" value="<?php echo $row["id_pergunta"];?>">
</td>
</tr>
<?php
}
}
?>
</table>
<br />
<input type="hidden" name="acao" value="enviar" />
<input type="submit" value="Enviar"/>
</form>
<?php
}
// Código para pegar valores no checkbox ............................................
if(isset($_POST['acao']) && $_POST['acao'] == "enviar") {
if(!empty($_POST['chek'])){
$campo = $_POST['chek'];
foreach($campo as $value){
$sql = "INSERT INTO ex1_respostas (id_pergunta, resposta)
VALUES ('$value', '1')";
if ($conn->query($sql) === TRUE) {
echo 'Resposta ' . $value . '....atualizada <br/>';
}else{
echo "Erro: " . $sql . "<br>" . $conn->error;
}
}
echo "Pesquisa gravada no banco!<br>";
echo '<button onclick=location=URL>Voltar</button>';
}
else{
echo "não existe nada marcado";
}
}
?>
</body>
</html>Olá Sérgio,
Testei aqui, massa!
Só uma dúvida.
As respostas são gravadas na tabela ex1_respostas (id_pergunta, resposta).
Alterei a tabela contendo as colunas:
id_pergunta, resposta_da_pergunta_1, resposta_da_pergunta_2, resposta_da_pergunta_3 e resposta_da_pergunta_4
*o que realmente preciso é gravar a resposta do chekbox na tabela ex1_respostas:
- pergunta 1 gravar na tabela ex1_respostas e coluna "resposta_da_pergunta_1";
- pergunta 2 gravar na tabela ex1_respostas e coluna "resposta_da_pergunta_2";
- pergunta 3 gravar na tabela ex1_respostas e coluna "resposta_da_pergunta_3";
- pergunta 4 gravar na tabela ex1_respostas e coluna "resposta_da_pergunta_4";Não aconselho você fazer dessa forma que tá pensando porque sempre que tiver que aumentar ou diminuir o número de perguntas você vai ter que mexer na estrutura da tabela de respostas.
Da forma que eu te passei, o número da pergunta passa a ser o id_pergunta, você pode criar também mais um campo na tabela de perguntas para numerar manualmente, por exemplo um campo chamado numero_pergunta daí você coloca a numeração que quiser.
E na tabela de respostas ao invés de gravar a id você grava o número da resposta.
Daí tudo vai funcionar em função deste número, tanto para verificar se foi "checado" quanto para exibir.
Você deve estar se perguntando mas e daí como eu vou pegar a resposta da pergunta X
Simples, na consulta com o banco de dados você irá fazer assim:
"SELECT * from ex1_respostas WHERE numero_pergunta = '$num_resp' ";
Sendo que $num_resp é a variável que você vai passar o número da pergunta.Olá Sérgio,
Entendi,
é que este pesquisa deveria ser uma para cada pesquisado, e dessa forma gerar uma linha para cada usuário, por isso que pergunto se tem como, mesmo que eu precise mexer no futuro, coisa que acredito não precisar, pois tenho a quantidade de perguntas e tal.
Tb dá pra fazer, daí como na minha última sugestão você cria um campo numero_pergunta na tabela ex1_perguntas e associa ao campo resposta_da_pergunta_XX
O seu input ao invés da id irá passar o número da pergunta ex:
//substituir no formulário
<input type="checkbox" name="chek[]" value="<?php echo $row["id_pergunta"];?>"><input type="checkbox" name="chek[]" value="<?php echo $row["numero_pergunta"];?>">
//substituir no código
$sql = "INSERT INTO ex1_respostas (id_pergunta, resposta) VALUES ('$value', '1')";
//por
$resposta = "resposta_da_pergunta_".$value;
$sql = "INSERT INTO ex1_respostas ($resposta) VALUES ('1')";
Como você vai ter um campo para cada resposta, eu criei uma variável para o nome dos campos onde só muda o final, ou seja se a pergunta respondida for a 1 a variável vai se chamar resposta_da_pergunta_1
E assim por diante...Boa noite Sérgio,
Testei aqui, agora grava em linha.
Porém, quando seleciono mais de 1 checkbox, por exemplo:
Seleciono a pergunta 1 e a pergunta 2,
ele grava a resposta da 1ª pergunta corretamente, já a 2ª pergunta grava na linha seguinte...
ou seja, se eu marcar 4 checkbox ele grava nas colunas corretas, porém cada resposta em linha diferente.
Tem como gravar todos os checkbox marcados em apenas uma linha?
a sim, invés de insert você vai usar update
$sql = "UPDATE ex1_respostas SET $resposta = '1' ";
para isso deixe apenas a primeira linha da tabela e exclua as demais, para garantir se você tem o campo id adicione ao update a clausula WHERE id_resposta = 1 por exemplo>
36 minutos atrás, Sergio S. F. Pereira disse:
a sim, invés de insert você vai usar update
$sql = "UPDATE ex1_respostas SET $resposta = '1' ";
para isso deixe apenas a primeira linha da tabela e exclua as demais, para garantir se você tem o campo id adicione ao update a clausula WHERE id_resposta = 1 por exemplo
Entendi, mas assim ficará sempre uma linha de registro, eu preciso ter um histórico de cada pesquisa.
Tem como ?Bom, então tem que ser com o insert mesmo, ele vai salvar somente as respondidas, como você falou, cada vez que enviar o formulário ele vai criar uma nova linha e preencher somente as respostas selecionadas.
Para exibir um relatório você só precisa verificar se o campo de resposta possui o valor 1 (sim) caso não tenha valor (não) ex:
if($row["resposta_da_pergunta_1"] == "1"){ echo "SIM"; } else { echo "NÃO";}
Assim cada linha corresponderá a uma pesquisa.
Para não escrever muitas linhas você pode criar uma variável como no exemplo que eu passei e usar um for para verificar. No relatório que você vai criar terá que fazer algo +- assim:
$sql = "SELECT * FROM ex1_respostas";$result = $conn->query($sql);$linhas = mysqli_num_rows($result);$row = $result->fetch_assoc();//Numero total de perguntas$tot_perguntas = 20;
//verifica todos os campos de resposta começando do 1
for($i=1; $i <= $tot_perguntas; $i++){
if($row["resposta_da_pergunta_".$i]=="1"){
echo "Resposta da pergunta ".$i.": SIM";
echo "<br>";
} else {
echo "Resposta da pergunta ".$i.": Não";
echo "<br>";
}
}
E o histórico você controla pelo id da resposta, esse campo id tem que ser autoincrement pra você ter registros únicos para cada pesquisa com um WHERE id_resposta = $id_que_vc_quiser.Vlew Sérgio!!!!!
Tudo certinho!!!!
Muito obrigado!!!!!