Ir para conteúdo

Arquivado

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

opl12

Variável campo VALUE do Checkbox

Recommended Posts

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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');
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
//Agora definindo no banco o conjuto de caracteres 
$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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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"];?>">
         
//por
<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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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 ?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

 

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

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