Erro ao inserir dados no banco !

Ao tentar inserir os dados no banco recebo a mensagem que houve falha ao inserir dados no banco de acordo com a condição “$operacao_inserir = mysqli_query” , o caminho do banco está correto, os nomes da coluna também estão ! A conexão com o banco está funcionando também !
Não sei se pode ser isso mas, as minhas colunas “pergunta1,pergunta2 e pergunta3” estão como enum(‘Sim’,‘Nao’). Já olhei e revisei mas não acho solução pro erro, alguém pode me ajudar ?

<?php
    setlocale(LC_ALL, 'pt-BR');
    /*Verifica se o usuário está logado antes de acessar a página,caso não,
    o mesmo é redirecionado à pagina login.php*/
    require_once('_conexao/conexao.php');
?>

<?php
    session_start();
    if(!isset($_SESSION['usuario_logado']) ) {
        Header("location:login.php");
    }

    //Inserção de dados do form no banco
    if( isset($_POST['radio']) ) {
    $opcao1 = $_POST['radio'];
    $opcao2 =   $_POST['radio1'];
    $opcao3 =   $_POST['radio2'];
    //$observacao = $_POST['observacao'];
        
    $inserir = "INSERT INTO form";
    $inserir .= " (pergunta1,pergunta2,pergunta3)";
    $inserir .= " VALUES ('$opcao1','$opcao2','$opcao3')";
        
    $operacao_inserir = mysqli_query($conecta, $inserir);
    if(!isset($opcao_inserir)){
        die("Erro ao inserir dados no banco de dados !");        
    }
    }
?>
<!DOCTYPE html>
<html>
    <head>
        <title> Questionário - Manhã </title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" type="text/css" href="css/estilo.css">
        <link rel="stylesheet" href="css/bootstrap.min.css">
        <script src="js/jquery-3.3.1.min.js"></script>
        <script src="js/bootstrap.min.js"></script>      
    </head>
<body class="background-box">
    <div class="perguntas-form">
        <div class="perguntas-box">
        <br>
        <h4>O headset estava funcionando quando você entregou?</h4>
            <form method="post">
                <label for="radio"><input type="radio" name="radio"  value="Sim">SIM</input></label>
                <label for="radio" style="float: right;"><input type="radio" name="radio" value="Nao">NÃO</input></label>
	   </div>

        <div class="perguntas-box">
        <h4>O notebook estava funcionando quando você entregou?</h4> 
                <label for="radio"><input type="radio" name="radio1" value="Sim">SIM</input></label>
                <label for="radio" style="float: right;"><input type="radio" name="radio1" value="Nao" >NÃO</input></label>   
        </div>          

        <div class="perguntas-box">
        <h4>Faltava algum equipamento quando você chegou?</h4>
                <label for="radio"><input type="radio" name="radio2" value="Sim">SIM</input></label>
                <label for="radio" style="float: right;"><input type="radio" name="radio2" value="Nao">NÃO</input></label>   
        </div>  
                
            <div class="posicionamento-textArea-box">    
                <span class="observacao-box-label">Observações:</span><br>
                <textarea name="observacao" value="observacao" class="textArea-box" placeholder="Deixe uma pequena observação... ex: Não havia headset (Máximo de 255 caracteres)" maxlength="255"></textarea>
                <br>
            </div>
        <div> 
		<button type="submit"  style="float: left" class="btn btn-primary">Resetar</button>
        <button type="submit"  style="float: right" class="btn btn-primary">Enviar</button>
        </form>
        </div>
    </div>
</body>
</html>

Acho que falta um pouco mais de atenção nessas duas linhas…

$operacao_inserir = mysqli_query($conecta, $inserir);
if(!isset($opcao_inserir)){...

O if poderia ficar simplesmente assim:

if($operacao_inserir){...

Onde o mysqli_query já garante o retorno de um booleano (true/false) não sendo necessário usar isset…

1 curtida

Talvez por isso ele esteja disparando o if direto ?

Desculpa ainda estou com dúvida sobre sua resposta, se eu quisesse checar se a $operacao_inserir = mysqli_query($conecta, $inserir); está setada/ funcionando e caso não estiver exibir um erro como eu deveria fazer então ?

Desculpa consegui, fiz desta forma:

$operacao_inserir = mysqli_query($conecta, $inserir);

if(!isset($operacao_inserir)){
    die("Erro ao inserir dados no banco de dados !");
} }
1 curtida

Nem sempre a isset é necessário, o conceito de setado é basicamente esse no php…

$nao_setado = null;
$setado = mixed;

Onde mixed representa qualquer tipo de dado que não seja null (nulo), por exemplo…

$falso = false;
$vazio = '';

Apesar de parecerem não setados, enagana-se pois há posição de memória ocupada/alocada (null é o unico tipo que não ocupa espaço na memória)…

No seu caso, sempre veja na doc o tipo de retorno que a função te dá, e o mysqli_query pode retornar false se alguma coisa der errado no insert ou true se tudo ocorreu bem, por isso indiquei apenas o if sem isset, outra forma de você enxergar melhor o tipo de retorno…

$inseriu = mysqli_query($conecta, $inserir); # retorna true/false
if ($inseriu) { # $inseriu agora vale true/false
    echo 'Dados inseridos com sucesso!';
} else {
    die("Erro ao inserir dados no banco de dados !");
}

Ou seja, testando isset no $inseriu sempre dará true porque foi setado pegou?

Percebeu como a mudança do nome de uma simples variável aumenta a leitura do código?

O isset costuma ser usado mais em sessões, por causa da chave (índice no array), mas ai já é outro assunto…

Vai treinando assim você aprende mais a linguagem e desenvolve melhor sua lógica…

1 curtida