Jump to content
DinhoPHP

INSERT INTO não funciona por nada!

Recommended Posts

Estou desesperado, peguei este simples código (que já utilizei no passado) apenas para testar a inserção no banco de dados, já que o mais complexo que fiz não funcionava, porém, este comporta-se da mesma maneira, sem gerar mensagem de erro e não insere nada. Por favor, não sei mais o que fazer!

<?php
try{
        $pdo = new PDO("mysql:host=localhost; dbname=bd", "root", "");
    }catch(PDOException $e){
        echo  $e->getMessage();
    }
return $pdo;
?>

<html>

<head>

</head>

<body>

<!--<form method="get" action="" enctype="multipart/form-data"/>
    <input type="hidden" name="nivel" value="1"/>
    <input type="text" name="nome" placeholder="Insira o seu nome"/>

    <input type="submit" name="enviar" value="Postar"/>
</form> -->

<?php
//$nivel = $_POST["nivel"];
$nome = $_GET["nome"];
$insert = $pdo->prepare("INSERT INTO clientes (nome) VALUES (:nome)");
//$insert->bindValue(":nivel", $nivel);
$insert->bindValue(":nome", $nome);

$busca = $pdo->prepare("SELECT * FROM clientes WHERE nome=?");
$busca->execute(array($nome));

if ($busca->rowCount() == 0) {

    $insert->execute();

}else{
echo "<h1>Já existe!</h1>";
}

//echo var_dump($busca);
?>
</body>

</html>
Edited by Gabriel Heming
remover formatação

Share this post


Link to post
Share on other sites

Ah! Eu passei o nome pela url só para testar e o nome do BD e da tabela estão corretos. Já testei também no servidor do meu site.

Edited by Gabriel Heming
Remover formatação

Share this post


Link to post
Share on other sites

Use ERRMODE_EXCEPTION para reportar os erros e os codes dentro do bloco try/catch

<?php

try {

	
	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	
	//$nivel = $_POST["nivel"];
	$nome = $_GET["nome"];
	$insert = $pdo->prepare("INSERT INTO clientes (nome) VALUES (:nome)");
	//$insert->bindValue(":nivel", $nivel);
	$insert->bindValue(":nome", $nome);
	 
	$busca = $pdo->prepare("SELECT * FROM clientes WHERE nome=?");
	$busca->execute(array($nome));
	 
	if ($busca->rowCount() == 0) {
	 
		$insert->execute();
	 
	}else{
	echo "<h1>Já existe!</h1>";
	}

} catch (Exception $e) {

	die( "Erro encontrado :". $e->getMessage() );

}
 
//echo var_dump($busca);
?>

Share this post


Link to post
Share on other sites

Willians, agradeço a ajuda, mas continua a mesma coisa.

Edited by Gabriel Heming
remover formatação

Share this post


Link to post
Share on other sites

Esqueci, troque

} catch (Exception $e) {

por

} catch (PDOException $e) {

Share this post


Link to post
Share on other sites

Por que há um return $pdo no seu código? return irá interromper a execução.

If called from the global scope, then execution of the current script file is ended. If the current script file was included or required, then control is passed back to the calling file. Furthermore, if the current script file was included, then the value given to return will be returned as the value of the include call. If return is called from within the main script file, then script execution ends. If the current script file was named by the auto_prepend_file or auto_append_file configuration options in php.ini, then that script file's execution is ended.


Outro detalhe, sempre feche cursores de consulta. Existe um bug que, teoricamente não se aplica ao seu caso, exige o fechamento do cursor. Torne isso uma boa prática.

$busca->execute(array($nome));

$rowCount = $busca->rowCount();

$busca->closeCursor();
 
if (rowCount  == 0) {
Edited by Gabriel Heming
complementar resposta

Share this post


Link to post
Share on other sites

Willians e Gabriel, muito obrigado pela ajuda, ontem eu lembrei que estou construindo o site usando o require no header e footer, sendo assim, chamei a conexão com o BD no header por meio do include o que resultou no funcionamento com a primeira ajuda do Willians, porém com o post no form e o $_POST não posta no BD. Verei com estas últimas orientações aprimoro o código, coloco para funcionar e prossigo com o site, o estranho que essas coisas básicas sempre funcionaram, fiz um que funciona por esta base, até no manual do PHP eu fui. Mas agradeço muito pela ajuda.

Edited by Gabriel Heming
remover formatação

Share this post


Link to post
Share on other sites

Fiz as modificações e com a dica do Gabriel, o form inseria no BD nomes repetidos (no caso usarei para CPF) pois o rowCount parecia não contar. Para aplicar o método, mandei o form postar para o arquivo post.php que é constituído do código abaixo, onde o mesmo não posta no BD e o var_dump exibe uma array vazia, o que significa que $_POST não está recebendo o nome. Segue o código:

 try {


            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            //$nivel = $_POST["nivel"];
            $nome = trim($_POST["nome"]);
            $insert = $pdo->prepare("INSERT INTO clientes (nome) VALUES (:nome)");
            //$insert->bindValue(":nivel", $nivel);
            $insert->bindValue(":nome", $nome);

            $busca = $pdo->prepare("SELECT * FROM clientes WHERE nome=?");
            $busca->execute(array($nome));

            if ($busca->rowCount() == 0) {

                $insert->execute();

            }else{
                echo "<h1>Já existe!</h1>";
            }

        } catch (PDOException $e) {

            die( "Erro encontrado :". $e->getMessage() );

        }

        var_dump($_POST);

Share this post


Link to post
Share on other sites

Estou enlouquecendo! Utilizei um script antigo e funcional em servidor até hoje, rodou um dia bem, quando fui adaptá-lo ao meu novo projeto, parou novamente, voltei à usá-lo como estava e também parou, ao cadastrar nada insere no BD ou exibe o erro que as variáveis não foram definidas, tanto em servidor local como o da Hostgator. Já não sei o que fazer, mudei de WAMP para XAMPP...

 

Segue o código:

<?php
include"Login.class.php";
$startaction="";
$mensagem="";
if(isset($_POST["acao"])){
$acao=$_POST["acao"];
$startaction=1;
}
//MÉTODO DE CADASTRO
if($startaction==1){
if($acao=="cadastrar"){
$nome= utf8_decode(trim(ucwords($_POST["nome"])));
$nascimento=$_POST["nascimento"];
$batismo=$_POST["batismo"];
$cargo=utf8_decode(trim(ucwords($_POST["cargo"])));
$email=trim(strtolower($_POST["email"]));
$senha=sha1($_POST["senha"]);

if(empty($nome) || empty($email)|| empty($senha)){
$mensagem="Por favor. preencha todos os campos!";}
//TODOS OS CAMPOS PREENCHIDOS
else{
//E-MAIL VÁLIDO
if(filter_var($email,FILTER_VALIDATE_EMAIL))
{
//SENHA INVÁLIDA
if(strlen($senha)<8){
$mensagem="A senha deve ter no mínimo oito caracteres!";
}
//SENHA VÁLIDA
else{
//EXECUTA A CLASSE DO CADASTRO
//TRATAMENTO DAS VARIÁVEIS
$nome=($nome);
$nascimento=($nascimento);
$batismo=($batismo);
$cargo=($cargo);
$email=($email);
$senha=($senha);

//INSERÇÃO NO BANCO DE DADOS
$insertseguro=$pdo->prepare("INSERT INTO usuarios (nome, nascimento, batismo, cargo, email, senha)VALUES(:nome, :nascimento, :batismo, :cargo, :email, :senha)");
$insertseguro->bindValue(":nome",$nome,PDO::PARAM_STR);
$insertseguro->bindValue(":nascimento",$nascimento,PDO::PARAM_STR);
$insertseguro->bindValue(":batismo",$batismo,PDO::PARAM_STR);
$insertseguro->bindValue(":cargo",$cargo,PDO::PARAM_STR);
$insertseguro->bindValue(":email",$email,PDO::PARAM_STR);
$insertseguro->bindValue(":senha",$senha,PDO::PARAM_STR);
//Valida o cadastro
$validar=$pdo->prepare("SELECT * FROM usuarios WHERE email=?");
$validar->execute(array($email));
if($validar->rowCount() == 0){

//Executa o cadastro
$insertseguro->execute();
$mensagem="Dados cadastrado com sucesso!";
}
else{
$mensagem="Email e cargos existente! O administrador será notificado desta tentativa.";

} 
}
/*if(isset($insertseguro)){
$flash="Cadastro realizado com sucesso!";
}
else{
$flash="Houve um erro em nosso sistema, contacte o administrador!";
}*/
/*E-MAIL INVÁLIDO
else{
$mensagem="Digite seu e-mail corretamente!";
}*/
}
}
}
}


//MÉTODO DE LOGIN
/*if($startaction==1){
if($acao=="logar"){
//DADOS
$email=addslashes($_POST['email']);
$senha=addslashes(sha1($_POST['senha']));

if(empty($email) || empty($senha)){
$mensagem="Preencha todos os campos!";
}
else{
if(!filter_var($email,FILTER_VALIDATE_EMAIL)){
$mensagem="Digite seu email corretamente!";
}
else{
//EXECUTA A BUSCA PELO USUÁRIO
$usuario= new usuario();
$usuario=$usuario->Logar($email,$senha);
}
}
}*/

//Variáveis de estilo
if(empty($mensagem)){
$display="display:none";
}
else{
$display="display:block";
}
?>

Share this post


Link to post
Share on other sites

Notice: Undefined index: nome in D:\xampp\htdocs\ieadr_2013\classes\acao.php on line 12

Notice: Undefined index: nascimento in D:\xampp\htdocs\ieadr_2013\classes\acao.php on line 13

Notice: Undefined index: batismo in D:\xampp\htdocs\ieadr_2013\classes\acao.php on line 14

Notice: Undefined index: cargo in D:\xampp\htdocs\ieadr_2013\classes\acao.php on line 15

Notice: Undefined index: email in D:\xampp\htdocs\ieadr_2013\classes\acao.php on line 16

Notice: Undefined index: senha in D:\xampp\htdocs\ieadr_2013\classes\acao.php on line 17

Share this post


Link to post
Share on other sites

Todos os erros informados são básicos da programação em PHP. Você pode encontrar sobre eles aqui: http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/

Share this post


Link to post
Share on other sites

Deu algum ruim aqui em tudo então, pois a simplicidade abaixo, não substitui o valor padrão padrão.

<form method="post" action="test.php" enctype="multipart/form-data">

        <input type="hidden" name="nivel" value="1"/>
        <input type="text" id="nome" name="nome" placeholder="Insira o seu nome"/>
        <!--<input type="email" name="email" placeholder="Insira um email válido"/>
        <input type="password" name="senha" required="Você esqueceu da senha!" placeholder="Insira uma senha de 8 caracteres"/>-->

            <input type="submit" name="postar" value="Postar"/>

        </form>

            <?php

            $nome = isset($_POST["nome"])?$_POST["nome"]:"Aguardando...";
            echo "<h1>".$nome."</h1>";

            ?>

Share this post


Link to post
Share on other sites

Muda o Metodo de Validação e Verifique se o Form esta sendo enviado via post

Coloque o código de leitura de entradas e cadastro dentro do escopo REQUEST_METHOD abaixo:

Uma função para pegar o valor vindo de GETs ou POSTs já validando com ternário e forma de uso com a @var Batistmo

function getValue($key, $default_value = false)
{
        if (!isset($key) || empty($key) || !is_string($key))
            return false;
        $ret = (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $default_value));

        if (is_string($ret) === true)
            $ret = urldecode(preg_replace('/((\%5C0+)|(\%00+))/i', '', urlencode($ret)));
        return !is_string($ret)? $ret : stripslashes($ret);
}




if($_SERVER['REQUEST_METHOD']=='POST'){

    // Pegar Post ou Get

    $batismo = getValue('batismo');

}

Pronto assim você já evita dores de cabeça!

Share this post


Link to post
Share on other sites

Williams, eu não sou tão leigo e nem avançado, este código, eu nunca utilizei. Se eu adicionar esta function, basta eu ir digitando as variáveis à serem capturadas?

Share this post


Link to post
Share on other sites

Sim

 

veja que tem um ternario de POST ou GET

$ret = (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $default_value));

Para pegar qualquer parâmetro da URL ou POST, use getValue ao inves de $_POST ou $_GET

$qualquer_coisa = getValue('qualquer_coisa');

 

Share this post


Link to post
Share on other sites

Então Williams, agradeço muito pela ajuda assim como os demais e de certo que suas instruções Williams, acrescentaram muito para com a minha experiência pois essas suas últimas postagens eu desconhecia, mas venho dizer que resolvi esses problemas de um modo que jamais imaginava, assim como os poucos desenvolvedores que conheço. Resolvi o problema mudando o XAMPP do HD secundário para o primário, isso fez com que até os códigos mais simples de POST funcionassem, incluindo também no servidor remoto. Verdade! Vão achar que é historinha ou mentira, mas não é! No servidor remoto só não funcionou o BD porque o PDO estava desabilitado.

 

Agradeço à todos pela dedicação e ajuda. Abraço! Deus os abençoe.

Edited by Gabriel Heming
remover formatação desnecessária

Share this post


Link to post
Share on other sites

Valeu e use instalações manuais, assim você evita dores de cabeças como estas.

Share this post


Link to post
Share on other sites

Williams tudo bem, concordo, mas se for corelação ao XAMPP foi por mudar essa natureza que deu esse ruim, era para ser instalado no C: e eu escolhi o D: no caso de uma eventual formatação. Sei que tem como alterar a pasta das páginas mas no momento eu prefiro deixar quieto e dar continuidade ao projeto. kkkk Obrigadão por tudo!!!!

Edited by Gabriel Heming
remover formatação

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By lezão
      Boa noite!
      Estou tentando fazer um codigo de horario de atendimento, e naun estou tendo resultados.
      Alguem pode me ajudar :
      <?php if ($hoje = 3 & $hoje < 5 & $hora >= 0 & $hora < 08){ echo "<font face='verdana', arial' size=2 color='red'>Fechado</font>";} else if ($hoje > 3 & $hoje < 5 & $hora >= 08 & $hora < 18){ echo "<font face='verdana', arial' size=2 color='red'>Fechado</font>";} else if ($hoje = 3 & $hora >= 18 & $hora < 23){ echo "<font face='verdana', arial' size=2 color='green'>Aberto</font>";} ?>  
    • By AndersonWS
      Meu site está caindo muito nos últimos dias. Basicamente acessa e não aparece nada, uma tela em branco. O pessoal da hospedagem falou que tenho que otimizar o banco de dados e que o problema é esse. Acho estranho pois o mesmo site não caia e agora "do nada" tem esse problema. Fiz um teste de tracert no cmd para ver as rotas e deu a mensagem: Esgotado o tempo limite do pedido. Isso me parece o problema e não o banco de dados.
      Otimização do banco tem alguma coisa a ver com essa mensagem?
      Poderia o site por não estar muito otimizado simplesmente não mostrar nada na tela? Não deveria carregar ao menos o html?
      Se não for o local certo da pergunta me perdoem mas como falaram que o problema era o banco de dados postei aqui.
      Grato.
    • By manolegal
      Olá amigos(as) do Fórum.
      Tenho um número inteiro no PHP e preciso inseri-lo no Postgresql com 02 casas decimais.
      Defini o campo no Postgresql do tipo numeric(14,2)
      O valor está assim no PHP:
      2961966 Preciso gravar no BD da seguinte maneira:
      29619.66 Porém está gravando da seguinte forma:
      2961966.00 Tentei utilizando number_format, porém não consegui:
      $numero_bd = number_format($numero, '.', ''); $numero_bd = number_format($numero,2,"."); $numero_bd = number_format($numero,2,","numerovalor_ref_15,2,",","."); Caso alguém possa me ajudar, desde já agradeço.
    • By Felper
      Criei um sistema de login com php e mysql mas não consigo realizar o login mesmo tendo certeza de que os dados foram cadastrados com sucesso. Não sei o que fiz de errado. Vejam o código:
      <?php $login2 = $_POST['loginlogar']; $senha2 = $_POST['senhalogar']; $link = mysqli_connect("localhost", "root", "", "bancolanche") or die("<h1>Não foi possível conectar!!</h1>". mysqli_error()); $banco = mysqli_select_db($link, "bancolanche") or die("<h1>Não foi possível abrir banco de dados!!</h1>". mysqli_error()); $sql = "SELECT login, senha FROM users"; $resulta = mysqli_query($link, $sql); while ($book = $resulta->fetch_object()) { $logindb = $book->login; $senhadb = $book->senha; } if($login2 == "" || $senha2 == ""){ $_SESSION['msg'] = "<h1 style='color:red'>Erro ao logar! Há campos de preenchimento obrigatório em branco.</h1>"; header("Location: logar.php"); } else { if($logindb==$login2 && $senhadb==$senha2){ $_SESSION['msg'] = "<h1 style='color:green'>Logoff realizado com sucesso!</h1>"; header("Location: index.html"); } else { $_SESSION['msg'] = "<h1 style='color:red'>Erro ao logar! Usuário inexistente ou senha incorreta.</h1>"; header("Location: logar.php"); } } mysqli_close($link); ?>  
    • By mm_edilson
      Olá. Tenho uma página de login, que salvei como index.php. Quando o usuário entra com login e senha corretos, a página redireciona para outra página, a index2.php. É uma página independente, não sendo viável no meu projeto colocá-la como um include na página principal.
      Tudo funciona. Exceto que, se o usuário, sem logar, digitar o endereço completo da página, ou seja, www.meusite.com.br/index2.php, ela abre normalmente. Como fazer para que ela não abra, se não passar antes pela página de login?
      Esta é minha página index.php:
      </style> <?php include('app/connection.php'); ?> </head> <body> <div id="corpo"> <center><img src="app/img/logo.png" width="500" height="210"></center></div><BR> <div id="paginas"> <?php @session_start(); include('valida_user.php'); ?> </div> Esta é a página valida_user.php
      <?php @session_start(); if(isset($_POST['enviar'])){ $usuario = $_POST['usuario']; $senha = $_POST['senha']; if($usuario ==''){echo "<h4>Por favor, insira um nome de usuário válido</h4>"; }else if($senha ==''){echo "<h4>Por favor, insira sua senha</h4>"; }else{ $sql = "SELECT * FROM usuarios WHERE usuario = '$usuario' AND senha = '$senha' "; $result = mysqli_query($conexao, $sql); if(mysqli_num_rows($result) > 0){ while($res = mysqli_fetch_array($result)){ $ativo = $res['ativo']; $nivel = $res['nivel']; $usuario = $res['usuario']; $senha = $res['senha']; $email = $res['email']; $nome = $res['nome']; $cadastro = $res['cadastro']; header("Location: index2.php"); exit; } }else{ echo "<center><h3>Usuário ou senha inválidos</h3></center>"; } } } ?>  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.