Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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.

Editado por Luís Roberto C. da Silva

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:

Editado por DiF

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

@DiF Deu certo, muito obrigado!!! me salvou de um problemão!

  • 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






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

×