Galera deu um erro na inserção

PHP

25/04/2016

Galera eu to tentado fazer cadastro pelo site em pdo, porém ele exibe a mensagem de que o cadastro foi feito porém quando vou no banco num tem nada lá pq isso ocorre?

<form id="form1" name="form1" method="post" action="cadastro.php">

<p>Nome: <input name="email" type="text" id="nome" /></p>
<p>Email: <input name="email" type="text" id="email" /></p>
<p>Senha: <input type="text" name="senha" /></p>

<input type="submit" name="post_back" id="button" value="Cadastrar" />
</form>


<?php

session_start();
require("config.php");

if(isset($_REQUEST["post_back"])){

    if(empty($_POST&["nome"]) || empty($_POST&["email"]) || empty($_POST&["senha"])){

        echo "<script>alert('Preencha todos os campos antes de enviar seu cadastro!');</script>";

    }else{
        $tb = $conn->prepare("insert* into usuario(nm_usuario, email_usuario, senha_usuario) values(:nome, :email, :senha)");
        $tb->bindParam(":nome", $_POST["nm_usuario"], PDO::PARAM_STR);
        $tb->bindParam(":email", $_POST["email_usuario"], PDO::PARAM_STR);
        $tb->bindParam(":senha", $_POST["senha_usuario"], PDO::PARAM_STR);
        $tb->execute();
        $tb = null;

        echo "<script>alert('Cadastro efetuado com sucesso!\\nFaça seu login agora');document.location='index.php';</script>";

    }

}
?>
Hiago Orneles

Hiago Orneles

Curtidas 1

Mais Respostas

Fabio Basso

Fabio Basso

25/04/2016

Há um asterisco sobrando na instrução insert:
ERRADO: insert* into usuario(nm_ usuario...
CERTO: insert into usuario(nm_usuario...
GOSTEI 0
Hiago Orneles

Hiago Orneles

25/04/2016

Não e isso eu já tentei sem o asterisco
GOSTEI 0
Jothaz

Jothaz

25/04/2016

Posta a mensagem de erro.

Mas tem de tirar o *, senão não funciona.
GOSTEI 0
Hiago Orneles

Hiago Orneles

25/04/2016

Ele não dá mensagem ele fala que o usuário foi cadastrado porém quando vou no banco não tem nenhum usuário cadastrado
GOSTEI 0
Jothaz

Jothaz

25/04/2016

Ative os erro do PHP e veja se retorna algo:

error_reporting(0);
GOSTEI 0
William

William

25/04/2016

Faça a correção que o Jothaz citou e capture o retorno do método "execute()", ele retorna TRUE se sucesso e FALSE se houver falha.
$retorno = $tb->execute();

if($retorno):
    //sucesso
else:
    //falha
endif;


Outra dúvida, é esse o nome do campo mesmo "nm_usuario" ?
GOSTEI 0
Hiago Orneles

Hiago Orneles

25/04/2016

Coloco isso no topo do código?
Ative os erro do PHP e veja se retorna algo:

error_reporting(0);
GOSTEI 0
Hiago Orneles

Hiago Orneles

25/04/2016

Faça a correção que o Jothaz citou e capture o retorno do método "execute()", ele retorna TRUE se sucesso e FALSE se houver falha.
$retorno = $tb->execute();

if($retorno):
    //sucesso
else:
    //falha
endif;


Outra dúvida, é esse o nome do campo mesmo "nm_usuario" ?


Tiro akele null que tá no meu atual código, vc ta perguntado se existe o nm_usuario como o nome de uma coluna no banco de dados ?
GOSTEI 0
William

William

25/04/2016


Tiro akele null que tá no meu atual código, vc ta perguntado se existe o nm_usuario como o nome de uma coluna no banco de dados ?


Sim e Sim
GOSTEI 0
Hiago Orneles

Hiago Orneles

25/04/2016

Galera eu fiz oque vcs falaram e não aconteceu nada, porém quando eu substitui o que vcs falaram pra troca ele parou de exibir as messagens de que os dados estão sendo inseridos sem serrem inseridos abaixo segue o novo modelo do codigo


<?php

session_start();
require("config.php");

error_reporting(0);

if(isset($_REQUEST["post_back"])){

    if(empty($_POST&["nome"]) || empty($_POST&["email"]) || empty($_POST&["senha"])){

        echo "<script>alert('Preencha todos os campos antes de enviar seu cadastro!');</script>";

    }else{
        $tb = $conn->prepare("insert into usuario(nm_usuario, email_usuario, senha_usuario) values(:nome, :email, :senha)");
        $tb->bindParam(":nome", $_POST["nm_usuario"], PDO::PARAM_STR);
        $tb->bindParam(":email", $_POST["email_usuario"], PDO::PARAM_STR);
        $tb->bindParam(":senha", $_POST["senha_usuario"], PDO::PARAM_STR);
        $tb->execute();
        $tb = null;

        $retorno = $tb->execute();

        if($retorno):
          echo "<script>alert('Cadastro efetuado com sucesso!\\nFaça seu login agora');document.location='index.php';</script>";
        else:
            //falha
        endif;

          
    }

}
?>


<form id="form1" name="form1" method="post" action="cadastro.php">

<p>Nome: <input name="email" type="text" id="nome" /></p>
<p>Email: <input name="email" type="text" id="email" /></p>
<p>Senha: <input type="text" name="senha" /></p>

<input type="submit" name="post_back" id="button" value="Cadastrar" />
</form>

GOSTEI 0
William

William

25/04/2016

Sua conexão está OK?

É necessário apenas um "execute()".

$tb = $conn->prepare("insert into usuario(nm_usuario, email_usuario, senha_usuario) values(:nome, :email, :senha)");
        $tb->bindParam(":nome", $_POST["nm_usuario"], PDO::PARAM_STR);
        $tb->bindParam(":email", $_POST["email_usuario"], PDO::PARAM_STR);
        $tb->bindParam(":senha", $_POST["senha_usuario"], PDO::PARAM_STR);
        $tb->execute();
        $tb = null;
 
        $retorno = $tb->execute();
 
GOSTEI 0
Hiago Orneles

Hiago Orneles

25/04/2016

Sim pois com a minha conexão puder fazer um login com dados inseridos direito dentro do banco
GOSTEI 0
William

William

25/04/2016

Tem 3 pontos no seu código que geram dúvida:

1) Porque você está usando o sinal de valor por referência "&" nas variáveis "$_POST&["senha"]"?
if(empty($_POST&["nome"]) || empty($_POST&["email"]) || empty($_POST&["senha"])){


2) No seu form não tem nenhum campo com name "nome", porém tem 2 campos com name "email"?
<form id="form1" name="form1" method="post" action="cadastro.php">
 
<p>Nome: <input name="email" type="text" id="nome" /></p>
<p>Email: <input name="email" type="text" id="email" /></p>
<p>Senha: <input type="text" name="senha" /></p>
 
<input type="submit" name="post_back" id="button" value="Cadastrar" />
</form>


3) Você está tentando inserir a partir de names errados no bindValue?
$tb->bindParam(":nome", $_POST["nm_usuario"], PDO::PARAM_STR); // Correto mas não existe $_POST["nome"]
$tb->bindParam(":email", $_POST["email_usuario"], PDO::PARAM_STR); // Correto $_POST["email"]
$tb->bindParam(":senha", $_POST["senha_usuario"], PDO::PARAM_STR); //Correto $_POST["senha"]
GOSTEI 0
Hiago Orneles

Hiago Orneles

25/04/2016

hm entendi... irei da uma olhada e tentar resolver e qualquer coisa eu volto aki vlw
GOSTEI 0
Hiago Orneles

Hiago Orneles

25/04/2016

Fiz as alterações nos erros que vc me mostrou e ainda sim não conseguir cadastrar, agora ele nem exibe mais a mensagem de cadastro com sucesso sem mesmo cadastrar

<?php
session_start();
require("config.php");
error_reporting(0);
?>

<form id="form1" name="form1" method="post" action="cadastro.php">

<p>Nome: <input name="nome" type="text" id="nome" /></p>
<p>Email: <input name="email" type="text" id="email" /></p>
<p>Senha: <input type="text" name="senha" /></p>

<input type="submit" name="post_back" id="button" value="Cadastrar" />
</form>

<?php

if(isset($_REQUEST["post_back"])){

    if(empty($_POST["nome"]) || empty($_POST["email"]) || empty($_POST["senha"])){

        echo "<script>alert('Preencha todos os campos antes de enviar seu cadastro!');</script>";

    }else{
        $tb = $conn->prepare("insert into usuario(nm_usuario, email_usuario, senha_usuario) values(:nome, :email, :senha)");
        $tb->bindParam(":nome", $_POST["nm_usuario"], PDO::PARAM_STR);
        $tb->bindParam(":email", $_POST["email_usuario"], PDO::PARAM_STR);
        $tb->bindParam(":senha", $_POST["senha_usuario"], PDO::PARAM_STR);
        $tb->execute();
        $tb = null;

     $retorno = $tb->execute();

        echo "<script>alert('Cadastro efetuado com sucesso!\\nFaça seu login agora');document.location='index.php';</script>";

    }

}
?>
GOSTEI 0
William

William

25/04/2016

Hiago não me leve a mal, mas você não está analisando o código com atenção.

Contínua errado, esses names não existem!!!
$tb->bindParam(":nome", $_POST["nm_usuario"], PDO::PARAM_STR);
$tb->bindParam(":email", $_POST["email_usuario"], PDO::PARAM_STR);
$tb->bindParam(":senha", $_POST["senha_usuario"], PDO::PARAM_STR);
GOSTEI 0
Hiago Orneles

Hiago Orneles

25/04/2016

Então eu troco esses

$tb->bindParam(":nome", $_POST["nm_usuario"], PDO::PARAM_STR);
$tb->bindParam(":email", $_POST["email_usuario"], PDO::PARAM_STR);
$tb->bindParam(":senha", $_POST["senha_usuario"], PDO::PARAM_STR);


por esses ?

$tb->bindParam(":nome", $_POST["nome"], PDO::PARAM_STR);
$tb->bindParam(":email", $_POST["email"], PDO::PARAM_STR);
$tb->bindParam(":senha", $_POST["senha"], PDO::PARAM_STR);
GOSTEI 0
Marlon Gera

Marlon Gera

25/04/2016

Mano, me explica uma coisa esta pagina que você esta mostrando, qual o nome dela? Seria cadastro.php?
Por que você está colocando uma action pra uma página, se você esta fazendo a inserção de dados na mesma pagina?

<form id="form1" name="form1" method="post" action="cadastro.php">


Não entendi esta parte...
GOSTEI 0
William

William

25/04/2016

Exato, os names no POST tem que ser correspondentes aos names do form HTML!!!
GOSTEI 0
Hiago Orneles

Hiago Orneles

25/04/2016

Mano, me explica uma coisa esta pagina que você esta mostrando, qual o nome dela? Seria cadastro.php?
Por que você está colocando uma action pra uma página, se você esta fazendo a inserção de dados na mesma pagina?

<form id="form1" name="form1" method="post" action="cadastro.php">


Não entendi esta parte...


Coloque isso pq caso eu não coloque , a pagina não enviar os dados eu fico clicando no botão e não acontece nada
GOSTEI 0
Hiago Orneles

Hiago Orneles

25/04/2016

Funcionou aki era só essas variveis

$tb->bindParam(":nome", $_POST["nm_usuario"], PDO::PARAM_STR);
$tb->bindParam(":email", $_POST["email_usuario"], PDO::PARAM_STR);
$tb->bindParam(":senha", $_POST["senha_usuario"], PDO::PARAM_STR);


$tb->bindParam(":nome", $_POST["nome"], PDO::PARAM_STR);
$tb->bindParam(":email", $_POST["email"], PDO::PARAM_STR);
$tb->bindParam(":senha", $_POST["senha"], PDO::PARAM_STR);


vlw ai Willian
GOSTEI 0
William

William

25/04/2016

Ufa, que sofrimento!!

Estou finalizando o post.
GOSTEI 0
POSTAR