Ir para conteúdo
11closed

php PDO não está inserindo dados no BD

Recommended Posts

Olá pessoal Bom Dia!

 

Estou com um problema aqui, não estou conseguindo inserir dados no BD. Eu instalei recentemente o WAMP aqui e estou usando esse script para inserir dados no BD, mas não sei porque não está inserindo

Config.php

ob_start();
// Tabelas
$tabela1 = "clientes"; 

$bd = "banco"; 
$user = "root"; 
$pass = ""; 
$host = "localhost"; 

	
	try {
		$con = new PDO('mysql:host=localhost;dbname=banco', $user, $pass);
	  
	} catch(PDOException $e) {
		echo 'ERROR: ' . $e->getMessage();
	}

 

Cadastrando.php

error_reporting(E_ALL & ~ E_NOTICE);
	include("../config/config.php");

$run = $con->prepare("INSERT INTO $tabela1 (NOME) VALUES (:NOME)");
$dados = array(':NOME' => $name);
$cadastra = $run->execute($dados);

Meu BD também é novo, coloquei na tabela clientes ID como PRIMARY e A_I

 

Antes eu tinha um site dessa mesma programação que estava funcionando, ai depois de um tempo eu retornei, reinstalei o WAMP, porque estava com erros aqui, aí agora o mesmo site não está inserindo, alguem sabe porque não insere? 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uerlen, a pagina fica branca, não me retorna nenhum erro

 

 

será que tem que ativar algo nos ".ini" ? 

 

no WAMP em PHP, php.ini o meu está assim

extension=php_pdo_firebird.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
//Adiciona essas opção na construção do PDO
$opcoes = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$con = new PDO('mysql:host=localhost;dbname=banco', $user, $pass, $opcoes);


//Coloca seu execute dentro do try/catch
try{
    $con->execute();
}catch(PDOException $e){
    echo $e->getMessage();
}

Tenta assim

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá. verifique suas variaveis, principalmente essa:

Em 10/08/2018 at 00:29, 11closed disse:

$name

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 10/08/2018 at 00:29, 11closed disse:

Olá pessoal Bom Dia!

 

Estou com um problema aqui, não estou conseguindo inserir dados no BD. Eu instalei recentemente o WAMP aqui e estou usando esse script para inserir dados no BD, mas não sei porque não está inserindo

Config.php


ob_start();
// Tabelas
$tabela1 = "clientes"; 

$bd = "banco"; 
$user = "root"; 
$pass = ""; 
$host = "localhost"; 

	
	try {
		$con = new PDO('mysql:host=localhost;dbname=banco', $user, $pass);
	  
	} catch(PDOException $e) {
		echo 'ERROR: ' . $e->getMessage();
	}

 

Cadastrando.php


error_reporting(E_ALL & ~ E_NOTICE);
	include("../config/config.php");

$run = $con->prepare("INSERT INTO $tabela1 (NOME) VALUES (:NOME)");
$dados = array(':NOME' => $name);
$cadastra = $run->execute($dados);

Meu BD também é novo, coloquei na tabela clientes ID como PRIMARY e A_I

 

Antes eu tinha um site dessa mesma programação que estava funcionando, ai depois de um tempo eu retornei, reinstalei o WAMP, porque estava com erros aqui, aí agora o mesmo site não está inserindo, alguem sabe porque não insere? 

 

 

Caro amigo

 

Um exemplo para INSERT em PDO.

<!DOCTYPE html>
<html>
	<head>

     <?php 
       //Conexão com o Banco de Dados
       include"config.php"; 
     ?>

		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<title>PDO Insert</title>
		<link rel="stylesheet" href="">
	</head>
	<body>
		
		<?php 
          
          if(isset($_POST['enviar'])){

              //Funcão strip_tags - elimina qual extensão (html, php e etc)
          	  //Função trim - elimina qualquer espaço em branco
	          $campo1 = strip_tags(trim($_POST['campo1']));
	          $teste =  strip_tags(trim($_POST['teste']));

              //Define a tabela
	          $sql_teste  = 'INSERT INTO teste (campo1,campo2)';
	          $sql_teste .= 'VALUES (:campo1,:campo2)';  //Função [ .= ] - concatenar      

	          try{
	          	    //Antes de executar qualquer tarefa, verifica no Bco Dados Login e Senha
	                $query_teste = $conecta->prepare($sql_teste);

	                $query_teste->bindValue(':campo1',$campo1, PDO::PARAM_STR);
	                $query_teste->bindValue(':campo2',$teste, PDO::PARAM_STR);     

	                //Executa a ação      
	                $query_teste->execute();

	                echo 'Cadastro com sucesso';

	          } catch (PDOException $error_insert) {
	          	echo 'Erro ao cadastrar '.$error_insert->getMessage();
	          }
         
          }

		?>

		<form name="testando" action="" method="post" enctype="multipart/form-data">
          <input type="text" name="campo1" /><br/>
          <input type="text" name="teste" /><br/>
          <input type="submit" name="enviar" value="Enviar" /><br/>
	</body>  

</html>

 

Espero ter ajudado

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Remazela fiz do jeito que você falou, e agora está aparecendo a mensagem "Cadastro com sucesso", porém os dados não estão sendo inseridos no BD

 

ficou assim aqui

config.php

ob_start();

$tabela1 = "clientes"; 

//Banco de Dados
$bd = "banco"; 
$user = "root"; 
$pass = ""; 
$host = "localhost"; 
	
	try {
		$con = new PDO('mysql:host=localhost;dbname=banco', $user, $pass);
	  
	} catch(PDOException $e) {
		echo 'ERROR: ' . $e->getMessage();

cadastro.php

<form action="cadastrando.php" method="post" id="form" name="form">
  
  Nome*:  <input id="nome" name="nome" class="text" />
  Email*:  <input id="email" name="email" class="text" />
  
<input type="submit" name="imageField"  class="botcadastro" value="Cadastrar" Onclick="return verifica()" />  
</form> 

cadastrando.php

include("../config/config.php"); 

	$nome = $_POST["nome"];
	$email = $_POST["email"];
	
	$sql_teste  = 'INSERT INTO $tabela1 (NOME,EMAIL)';
	$sql_teste .= 'VALUES (:NOME,:EMAIL)';  //Função [ .= ] - concatenar

	try{
	    //Antes de executar qualquer tarefa, verifica no Bco Dados Login e Senha
	    $query_teste = $con->prepare($sql_teste);

	    $query_teste->bindValue(':NOME',$nome, PDO::PARAM_STR);
	    $query_teste->bindValue(':EMAIL',$email, PDO::PARAM_STR);     

	    //Executa a ação      
	    $query_teste->execute();

	    echo 'Cadastro com sucesso';

	} catch (PDOException $error_insert) {
	    echo 'Erro ao cadastrar '.$error_insert->getMessage();
	}

:sweat: não estou encontrando onde está o erro, será que tem haver algo com a versão do php ou do wamp?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite. Você simplesmente está tratando a variável "$tabela" como TEXTO ao utilizar ela com aspas simples e não dupla.

 

isso aqui:

$sql_teste  = 'INSERT INTO $tabela1 (NOME,EMAIL)';

  É apenas texto, $tabela1 é considerado como texto e não variável. Logo, o insert into está tentando inserir algo em uma tabela com o nome $tabela1 o que não existe. O erro deveria mostrar que não existe essa tabela também. O correto é com aspas duplas:

$sql_teste  = "INSERT INTO $tabela1 (NOME,EMAIL)";

de igual forma, faça na linha concatenada também. Sempre quando for utilizar sintaxe SQL coloque em aspas duplas para uma boa prática e evitar problemas do tipo.

 

Verifique se os campos em sua tabela estão com os nomes maiúsculos.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites
57 minutos atrás, Alaerte Gabriel disse:

Boa noite. Você simplesmente está tratando a variável "$tabela" como TEXTO ao utilizar ela com aspas simples e não dupla.

 

isso aqui:


$sql_teste  = 'INSERT INTO $tabela1 (NOME,EMAIL)';

  É apenas texto, $tabela1 é considerado como texto e não variável. Logo, o insert into está tentando inserir algo em uma tabela com o nome $tabela1 o que não existe. O erro deveria mostrar que não existe essa tabela também. O correto é com aspas duplas:


$sql_teste  = "INSERT INTO $tabela1 (NOME,EMAIL)";

de igual forma, faça na linha concatenada também. Sempre quando for utilizar sintaxe SQL coloque em aspas duplas para uma boa prática e evitar problemas do tipo.

 

Verifique se os campos em sua tabela estão com os nomes maiúsculos.

 

Abraço

 

Olá @Alaerte Gabriel, coloquei as duplas e deu a mesma coisa. E SIM os campos no BD são maiúsculos também

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo

 

Tenta assim

 

config.php

<?php

    define('HOST','localhost');
    define('DB','nomeBancoDados');
    define('USER','root');
    define('PASS','');            

    $conexao = 'mysql:host='.HOST.'; dbname='.DB;

    try{
         $conecta = new PDO($conexao, USER, PASS);
         $conecta->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

       } catch(PDOexception $error_conecta) {
          echo htmlentities('Erro ao conectar'.$error_conecta->getMessage());
       }

?>

 

o insert

		<?php 
          
              //Funcão strip_tags - elimina qual extensão (html, php e etc)
          	  //Função trim - elimina qualquer espaço em branco
	          $campo1 = strip_tags(trim($_POST['campo1']));
	          $teste =  strip_tags(trim($_POST['teste']));

              //Define a tabela
	          $sql_teste  = 'INSERT INTO teste (campo1, campo2)';
	          $sql_teste .= 'VALUES (:campo1, :campo2)';  //Função [ .= ] - concatenar      

	          try{
	          	    //Antes de executar qualquer tarefa, verifica no Bco Dados Login e Senha
	                $query_teste = $conecta->prepare($sql_teste);

	                $query_teste->bindValue(':campo1',$campo1, PDO::PARAM_STR);
	                $query_teste->bindValue(':campo2',$teste, PDO::PARAM_STR);     

	                //Executa a ação      
	                $query_teste->execute();

	                echo 'Cadastro com sucesso';

	          } catch (PDOException $error_insert) {
	          	echo 'Erro ao cadastrar '.$error_insert->getMessage();
	          }
        

		?>

 

 

Observa no seu código o seguinte:

//Você criou a variável com letras minúsculas
	$nome = $_POST["nome"];
	$email = $_POST["email"];
	

  //Aqui você passou com letras maiúsculas
	    $query_teste->bindValue(':NOME',$nome, PDO::PARAM_STR);
	    $query_teste->bindValue(':EMAIL',$email, PDO::PARAM_STR);

 

Para inserir, as variáveis tem que ter o nome idêntico do banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Finalmente deu certo pessoal, muito obrigado pela ajuda.

 

Não sei bem qual era o problema, eu deletei toda a tabela no Banco de dados e fiz tudo novamente, aí deu certo 

 

vlw pessoal

 

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

  • Conteúdo Similar

    • Por Ricardo Beira
      Boa tarde.
       
      Sou bem leigo em php, sei o básico do básico e preciso muito de ajuda.
      Preciso enviar 1000 emails, porém queria dividir os envios de 50 por vez.
      Queria um campo onde ecolocava os 1000 emails ou importando de um txt e ele fizesse o processo de envio de 50-50 automaticamente.
       
    • Por Kelven
      Bom dia galera tudo bem?
      Eu to com um problema, vejam o código 
      if($vencimento_carne != "") { for($i=1; $i<=$parcela; $i++){ $data_vencida = date('Y-m-d', strtotime("+1 month", strtotime($vencimento_carne))); echo $data_vencida; $sql_carne = "INSERT INTO carnes(valor, data_vencimento, valor_juros, status) VALUES ('$valor_carne', '$data_vencida', 'testet', 'Pendente')"; $query_carne = mysql_query($sql_carne); } } Minha intenção é q o mês dessa variável data vencida seja + 1 para cada linha que inserir do BD, porém desse jeito que acima eles estão ficando todos iguais com a mesma data, alguém pode me ajudar a resolver isso??
    • Por netocazuza
      Olá, bom dia a todos. Estou criando um sisteminha simples para geração de um documento em pdf. Para isso, estou juntando partes de vários projetos em  um só, e o meu problema no momento é bem simples. O sistema tá funcionando, porém gera o pdf na mesma janela, sobre a tela de cadastramento, e eu gostaria que abrisse numa nova aba ou janela, pra que  a tela de cadastramento permanecesse sempre ativa. Atualmente está assim:
      O arquivo que grava os registros termina com a instrução 
      header('Location: tela_cadastramento.php'); Isso é uma rotina pronta, que faz com que ao cadastrar um registro, já volte nesse tela, com os inputs limpos, aguardando novos registros. Fiz essa rotina primeiro, e tá funcional. Depois disso, peguei uma rotina pronta para gerar o PDF com fpdf, e criei uma function com essa rotina, que termina com: 
      $pdf->Output(); e até aí, tá tudo normal, pois é exatamente isso que quero, apenas abrir o pdf na tela, e o usuário decide o que vai fazer. Salvar, imprimir, ou os dois. Está funcionando, pois abre o pdf, tudo certinho. O único problema é que abre a janela do pdf "sobre" a janela ativa do sistema, e com isso gera um warning pois impede que a instrução do header seja cumprida. Já tentei mudar o local da chamada da função do fpdf, mas não resolveu, então gostaria de passar uma instrução para abrir o fpdf em outra aba ou janela, mas não sei como devo fazer, uma vez que na ordem do sistema, é feita uma gravação no banco, e a geração do pdf é feita de forma automática, pegando carona nessa gravação. Estou falando isso, pois se fosse uma botão específico gerar pdf, sei que teria como fazer usando target, ou onclick. Quero fazer algo equivalente, dentro da função, ou do comando de output. Será que me fiz entender, e alguém pode me ajudar?
    • Por odenilson marques
      Bom dia pessoal!
       
      É o seguinte estou desenvolvendo um sistema utilizando PHP e MYSQL nesse sistema resolvi criar uma área para os usuários e outra para o administrador, sendo que ao logar, dependendo do nível de acesso, esses são direcionados para as paginas que possuem permissão, até aí tudo certo. Porém, quando o adm loga e vai para sua pagina de permissão, este consegue acessar via URL as páginas dos usuários e o mesmo acontece com os usuários, que ao logar nas suas páginas de permissões também conseguem acessar via URL a pagina do adm.
       
      Alguém pode me da uma força?
    • Por scapedzn
      Olá pessoas! Estou com a seguinte dúvida. Estou fazendo um sistema que é um site onde será possível o cadastro de cursos online. O meu problema é o seguinte. O meu usuário logado salva junto com o nome do curso que ele enviou para o banco dados sua id única de cadastro. Portanto sempre quando ele adicionar qualquer curso, exemplo: aula 1 , junto com isso salva a mesma id de quando ele criou a conta dele, exemplo: 33. Sempre quando ele adicionar novo curso essa id é salva junto para eu saber qual usuário adicionou o novo curso. Porém eu gostaria de listar todos os cursos que o usuário cadastrou para ele mesmo ver. Ou seja, tenho de usar essa ID única dele para pegar todos os nomes de curso que ele adicionou. Não posso dar Select em toda a tabela pois se não ele irá trazer informações que outros usuários adicionaram. Gostaria de listar apenas as informações relacionadas diretamente com o id dele. Não sei se ficou Claro. Mas me ajudem por favor
×

Informação importante

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