Ir ao conteúdo
  • Cadastre-se
Stifler874

PHP Notice: Trying to get property of non-object in

Posts recomendados

Estou fazendo um sistema de cadastro...

porém estou tendo o seguinte erro:

1144634899_Semttulo.png.6ef397c6e61699a05db7959378f1c02a.png

 

<?php
if(isset($_POST['CriarConta'])){
  if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
      $ip = $_SERVER['HTTP_CLIENT_IP'];
  } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
      $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  } else {
      $ip = $_SERVER['REMOTE_ADDR'];
  }
  $getIP = $ip;
  $nome = isset($_POST['nome']) ? $_POST['nome'] : null;
  $sobrenome = isset($_POST['sobrenome']) ? $_POST['sobrenome'] : null;
  $usuario = isset($_POST['usuario']) ? $_POST['usuario'] : null;
  $nick = isset($_POST['nick']) ? $_POST['nick'] : null;
  $senha = isset($_POST['senha']) ? $_POST['senha'] : null;
  $confirmasenha = isset($_POST['confirmasenha']) ? $_POST['confirmasenha'] : null;
  $email = isset($_POST['email']) ? $_POST['email'] : null;
  $foto = isset($_POST['foto']) ? $_POST['foto'] : null;
  $captcha = $_POST['captcha'];
  $captchacorrect = $_SESSION['cap_code'];


      //Mostrar IP
      $sthIP = $conexao->prepare("SELECT * FROM usuarios WHERE ip = '".$getIP."' ");
      $sthIP->execute();
      $resultIP = $sthIP->fetch(PDO::FETCH_OBJ);
      $ipDBif = $resultIP->ip;

      //Mostrar Usuario
      $sthUSER = $conexao->prepare("SELECT * FROM usuarios WHERE usuario = '".$usuario."' ");
      $sthUSER->execute();
      $resultUSER = $sthUSER->fetch(PDO::FETCH_OBJ);
      $usuarioDBif = $resultUSER->usuario;

      //Mostrar Nick
      $sthNICK = $conexao->prepare("SELECT * FROM usuarios WHERE nick = '".$nick."' ");
      $sthNICK->execute();
      $resultNICK = $sthNICK->fetch(PDO::FETCH_OBJ);
      $nickDBif = $resultNICK->nick;

      //Mostrar Email
      $sthEMAIL = $conexao->prepare("SELECT * FROM usuarios WHERE email = '".$email."' ");
      $sthEMAIL->execute();
      $resultEMAIL = $sthEMAIL->fetch(PDO::FETCH_OBJ);
      $emailDBif = $resultEMAIL->email;

      if ($ipDBif == "") {
          $ipDB = "66690";
      } else {
          $ipDB = $resultIP->ip;
      }

      if ($usuarioDBif == "") {
          $usuarioDB = "teste";
      } else {
          $usuarioDB = $resultUSER->usuario;
      }

      if ($nickDBif == "") {
          $nickDB = "nome de usuário";
      } else {
          $nickDB = $resultNICK->nick;
      }

      if ($emailDBif == "") {
          $emailDB = "emaiul";
      } else {
          $emailDB = $resultEMAIL->email;
      }


      
      if ($ipDB > 3) {
          echo("<script> alert('Desculpe, mas o máximo de cadastro em seu IP foi atingido!'); window.location='/';</script>");
      }
    
      $redrirac = "/cadastro";
      if(trim($nome) == ""){
            echo("<script> alert('Você esqueceu de preencher seu Nome!');</script><script>window.location='".$redrirac."';</script>");
            exit(); 
      }elseif(trim($sobrenome) == ""){
        echo("<script> alert('Você esqueceu de preencher seu Sobrenome!');</script><script>window.location='".$redrirac."';</script>");
        exit(); 
      }elseif(trim($usuario) == ""){
        echo("<script> alert('Você esqueceu de preencher seu Usuario!');</script><script>window.location='".$redrirac."';</script>");
        exit(); 
      }elseif($usuario == $usuarioDB){
        echo("<script> alert('Este usuário já esta sendo utilizado!');</script><script>window.location='".$redrirac."';</script>");
        exit(); 
      }elseif(trim($nick) == ""){
        echo("<script> alert('Você esqueceu de preencher seu Nick!');</script><script>window.location='".$redrirac."';</script>");
        exit(); 
      }elseif($nick == $nickDB){
        echo("<script> alert('Este nick já esta sendo utilizado!');</script><script>window.location='".$redrirac."';</script>");
        exit(); 
      }elseif(trim($senha) == ""){
        echo("<script> alert('Você esqueceu de preencher sua Senha!');</script><script>window.location='".$redrirac."';</script>");
        exit(); 
      }elseif(trim($confirmasenha) == ""){
        echo("<script> alert('Você esqueceu de confirmar sua Senha!');</script><script>window.location='".$redrirac."';</script>");
        exit(); 
      }elseif($senha != $confirmasenha){
        echo("<script> alert('Suas senhas não coincidem!');</script><script>window.location='".$redrirac."';</script>");
        exit(); 
      }elseif(trim($email) == ""){
        echo("<script> alert('Você esqueceu de preencher seu Email!');</script><script>window.location='".$redrirac."';</script>");
        exit(); 
      }elseif($email == $emailDB){
        echo("<script> alert('Este email já esta sendo utilizado!');</script><script>window.location='".$redrirac."';</script>");
        exit(); 
      }elseif(trim($_POST["captcha"]) == ""){
        echo("<script> alert('Você esqueceu de preencher o Captcha!');</script><script>window.location='".$redrirac."';</script>");
        exit();
      }elseif (trim($_POST['captcha']) != $_SESSION['cap_code']){
        echo "<script>alert('O Captcha esta Errado!!');</script><script>window.location='".$redrirac."';</script>";
        exit();
      }else{
                $stmt = $conexao->prepare("INSERT INTO usuarios (nome, sobrenome, usuario, nick, senha, email, ip, foto) VALUES ('$nome','$sobrenome','$usuario','$nick','$senha','$email','$getIP','$foto')");
            // ? => parametro
            // bindParam => Vincula um parâmetro ao nome da variável especificada
                $stmt->bindParam(1, $nome);
                $stmt->bindParam(2, $sobrenome);
                $stmt->bindParam(3, $usuario);
                $stmt->bindParam(4, $nick);
                $stmt->bindParam(5, $senha);
                $stmt->bindParam(6, $email);
                $stmt->bindParam(7, $getIP);
                $stmt->bindParam(8, $foto);
                echo "<script>alert('Conta criada com sucesso.');</script><script>window.location='".$redrirac."';";
      }


}
?>

Alguém poderia me ajudar ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom @Stifler874 o erro significa que você está tentando acessar um atributo de algo que não é um objeto.

 

Você passou o código, porém o erro não está nele, o log de erros aponta para as linhas 238, 244 e 250, e esse código só vai ate a linha 138, se possível publica o código inteiro!

 

Olhando para o seu código notei que você não fez a execução da consunta para inserir os dados do usuário no final do código, falto o

$stmt->execute();

depois do 

$stmt->bindParam(8, $foto);

 

Em relação aos erros, espero que esse exemplo possa esclarecer o que está ocorrendo!

/*
* Nesse exemplo eu vou criar um objeto chamado de usuário e adicionar um abritudo chamado login,
* depois eu vou criar esse objeto e atribuir ele a variavel $objeto, logo após isso eu vou acessar
* o atributo login dentro do objeto usuairo, localizado na variavel $objeto e vou utilizar o echo para escrever na tela.
*/

class usuario
{
    public $login = "gabriel";
}

$objeto = new usuario();

echo $objeto->login;

O retorno serial

gabriel

Agora se eu não crio o objeto e tendo fazer uma atribuição em uma variável do tipo string

$objeto = "login";

$objeto->login;

O retorno serial

Notice: Trying to get property of "objeto" non-object in C:\Program Files\VertrigoServ\muspe\teste.php on line 5

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@GabrielSennaMs  oi tudo bem ?

Então coloquei apenas a parte do php que e onde consta o erro que seria:

      //Mostrar IP
      $sthIP = "SELECT count(*) FROM usuarios WHERE ip = '".$getIP."'"; 
      $resultIP = $conexao->prepare($sthIP); 
      $resultIP->execute(); 
      $ipDB = $resultIP->fetchColumn(); 

      //Mostrar Usuario
      $sthUSER = $conexao->prepare("SELECT * FROM usuarios WHERE usuario = '".$usuario."' ");
      $sthUSER->execute();
      $resultUSER = $sthUSER->fetch(PDO::FETCH_OBJ);
      $usuarioDBif = $resultUSER->usuario;   //ERRO AQUI  <==========

      //Mostrar Nick
      $sthNICK = $conexao->prepare("SELECT * FROM usuarios WHERE nick = '".$nick."' ");
      $sthNICK->execute();
      $resultNICK = $sthNICK->fetch(PDO::FETCH_OBJ);
      $nickDBif = $resultNICK->nick;   //ERRO AQUI  <==========

      //Mostrar Email
      $sthEMAIL = $conexao->prepare("SELECT * FROM usuarios WHERE email = '".$email."' ");
      $sthEMAIL->execute();
      $resultEMAIL = $sthEMAIL->fetch(PDO::FETCH_OBJ);
      $emailDBif = $resultEMAIL->email;   //ERRO AQUI  <==========

referente ao

$stmt->execute();

eu já fiz somente tinha esquecido ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Stifler874 Bom olhando melhor achei o erro.

 

Quando você faz a consunta procurando se existe um usuário, você faz a atribuição do resultado a uma variável e depois você tenta pegar somente aquele valor, porém se o sql não achar nenhum valor ele retorna com o resultado da consulta o valor boleno falso.

 

Pra resolver é fácil, é só fazer uma verificação antes.

$usuarioDBif = ($resultUSER != false and is_objetc($resultUSER->usuario) and isset($resultUSER->usuario))? $resultUSER->usuario : false;

Agora é só repetir com os outros 2, é modificar um pouco o código

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@GabrielSennaMs Cara, consegui !

Alias voce conseguiu !!!

Muito obrigado mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!