Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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>

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueci, troque

} catch (Exception $e) {

por

} catch (PDOException $e) {

Compartilhar este post


Link para o post
Compartilhar em outros 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) {

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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);

Compartilhar este post


Link para o post
Compartilhar em outros 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";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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/

Compartilhar este post


Link para o post
Compartilhar em outros 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>";

            ?>

Compartilhar este post


Link para o post
Compartilhar em outros 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!

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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');

 

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros 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!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
    • Por First
      Olá a todos!
       
      Quando eu tento fazer o login me mostra esse erro "Could not log you in."; Alguém sabe me ajudar a resolver esse problema no meu código?
      <?php require_once("core/init.php"); if (Input::exists()) { if (Token::check(Input::get("token"))) { $validate = new Validate(); $validation = $validate->check($_POST, array( "username" => array("required" => true), "password" => array("required" => true) )); if ($validation->passed()) { $user = new User(); $remember = (Input::get("remember")) === "on" ? true : false; $login = $user->login(Input::get("username"), Input::get("password"), $remember); if ($login) { Session::flash("home", "Welcome back!"); Redirect::to("index.php"); } else { echo "Could not log you in."; } } else { foreach ($validation->errors() as $error) { echo $error."<BR>"; } } } } ?> <form action="" method="POST"> <div class="field"> <label for="username">Username</label> <input type="text" name="username" id="username"> </div> <div class="field"> <label for="password">Password</label> <input type="password" name="password" id="password"> </div> <div class="field"> <label for="remember"> <input type="checkbox" name="remember" id="remember"> Remember me </label> </div> <input type="hidden" name="token" value="<?php echo Token::generate(); ?>"> <input type="submit" value="Log in"> </form>  
       
      Desde já obrigado.
×

Informação importante

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