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 Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
×

Informação importante

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