Ir para conteúdo

POWERED BY:

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 violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
×

Informação importante

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