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 ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
×

Informação importante

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