Ir ao conteúdo
  • Cadastre-se
Diego31

PHP Não cadastra no banco de dados

Recommended Posts

Boa noite, gostaria de uma ajuda no meu código. Estou tentando salvar 3 valores no meu banco de dados e não estou conseguindo. Já revisei tudo certinho, vi e revi o código e nao encontro o erro. Na hora de cadastrar ele da o erro no echo(Erro ao inserir dados no bando de dados!). Segue meu código:

cadastro.php
	Nome <input type="text" name="nome" placeholder="Nome da Planta"><br>
  tipo <input type="text" name="tipo" placeholder="tipo da planta"><br>
  thc  <input type="text" name="thc"  placeholder="thc"><br>

conexao.php

$pdo = new PDO("mysql:host=localhost;dbname=bd_winfo", "root", ""); 

$link = mysqli_connect("localhost", "root", "", "bd_winfo");

if (!$link) {
    echo "Error: Falha ao conectar-se com o banco de dados MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

inserir.php

session_start();
    include_once("conexao.php");


    //Verifica se o usuario clicou no botao, se clicou, acessa o if e cadastra...se não....
    $enviarCadastro=filter_input(INPUT_POST, 'enviarCadastro', FILTER_SANITIZE_STRING);
    if($enviarCadastro) {
        //Recebe dados do formulario
        $nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_STRING);
        $tipo = filter_input(INPUT_POST, 'tipo', FILTER_SANITIZE_STRING);
        $thc = filter_input(INPUT_POST, 'thc', FILTER_SANITIZE_STRING);

        //Inserindo no banco de dados

        $result = "INSERT INTO strains ('nome', 'tipo', 'thc') VALUES (:nome, :tipo, :thc)";
        $insere_s = $pdo->prepare($result);
        $insere_s->bindParam(':nome', $nome);
        $insere_s->bindParam(':tipo', $tipo);
        $insere_s->bindParam(':thc', $thc);

        if($insere_s->execute()){
            echo"Sucesso";
        }else{
            echo"Erro ao inserir dados no bando de dados!";
        }


    }else{
        $_SESSION['msg'] = "Cadastro nao realizado";
        header("Location: cadastroPlantas.php");
    }   

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cadê o formulário e o botão submit?

Qual o erro é retornado no php?

O arquivo do cadastro não precisa ser .php e sim .html

Se vai pra o else, é porque o trecho do if está errado. Reveja:

$enviarCadastro=filter_input(INPUT_POST, 'enviarCadastro', FILTER_SANITIZE_STRING);

$enviarCadastro=filter_input(INPUT_POST, 'enviarCadastro', FILTER_SANITIZE_STRING);

Não sei se esse é o melhor método de inserir dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Diego31 Olá, Seja bem vindo em nosso Clube do Hardware.

 

O seu erro é bastante simples.  Basta retirar as aspas simples da instrução SQL do insert.

Lembre que na primeira parte, não se coloca aspas.

 

Logo seu erro está nesta linha:

$result = "INSERT INTO strains('nome','tipo','thc') VALUES (:nome, :tipo, :thc)";

Troque para:

$result = "INSERT INTO strains (nome, tipo, thc) VALUES (:nome, :tipo, :thc)";

Que deve funcionar. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu certo, continua o mesmo erro. Segue as mudanças:

$result = "INSERT INTO strains (nome, tipo, thc) VALUES (:nome, :tipo, :thc)";

E também fiz uma mudança no conexao.php, pois estava usando PDO e mysqli, 2 conexoes e só estava usando uma.
 

$pdo = new PDO("mysql:host=localhost;dbname=bd_winfo", "root", ""); 

if($pdo){
	echo"Conexao bem sucedida!";
}else{
	echo"Falha na conexão com o banco de dados!";
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Diego31 Estranho não funcionar.. Eu mesmo testei aqui e funcionou tranquilo. O seu erro era só  aspas simples no sql insert into.

 

Na verdade, como você está usando PDO e orientação a objetos, é imprescindível que use o try-catch  para jogar as exceções.

 

Experimente trocar o conteúdo do seu conexao.php para:

try {
    $hostname = "localhost";
    $dbname = "bd_winfo";
    $username = "root";
    $pw = "";
    $pdo = new PDO ("mysql:host=$hostname;dbname=$dbname","$username","$pw");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "Failed to get DB handle: " . $e->getMessage() . "\n";
    exit;
}

 

Qualquer coisa, altere o PDO para "mysqli" e tente de forma procedural.

 

PS: use o botão de "mencionar" para me avisar a resposta... senão pode ser que eu nem veja a sua resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DiF Fiz a mudança no conexao.php e esta retornando um erro na linha do if($insere_s->execute()). Percebi que mesmo retornando esse erro não cadastra no banco de dados. Tem um outro jeito de cadastrar os dados ?

  

image.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Diego31 Provavelmente esse erro é relacionado a um campo de sua tabela que não coincide com o tipo de dado inserido.

Provável que de duas: Ou seu campo na tabela seja do tipo INT e o valor pretendido estar em "string" ou vice e versa.

 

Tente fazer a conversão para int e atribuir a função do pdo.

Desta forma:

 

 

$thc = filter_input(INPUT_POST, 'thc', FILTER_SANITIZE_STRING);

//converte string para INT
$thc_int = (int)$thc;

//variável $thc_int convertida
$insere_s->bindParam(':thc', $thc_int);

Lembrando que isso somente se o campo thc for do tipo INT.  

 

Você pode se quiser, alterar o tipo do campo para VARCHAR... aí aceita string. 

 

 

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×