Ir para conteúdo

POWERED BY:

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 violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
×

Informação importante

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