Ir ao conteúdo
  • Cadastre-se

PHP Erro PHP: mysqli_num_rows() expects parameter 1 to be mysqli_result boolean


Ir à solução Resolvido por DiF,

Posts recomendados

Eu estou tentando fazer com que a pagina ao confirmar que o registro foi realizado ela redirecione a outra pagina, mas esse erro do titulo acontece na linha 37, eis o codigo:

 

<?php
	    if(isset($_POST['nome']) && isset($_POST['senha'])  && isset($_POST['avatar'])){
		$nome= $_POST['nome'];
	   $senha= $_POST['senha'];
	   $avatar= $_POST['avatar'];
	   
	  
	    }
	   	if(isset($_FILES['fileUpload']))
			{
			date_default_timezone_set("Brazil/East"); //Definindo timezone padrão

			$ext = strtolower(substr($_FILES['fileUpload']['name'],-4)); //Pegando extensão do arquivo
			$new_name = date("Y.m.d-H.i.s") . $ext; //Definindo um novo nome para o arquivo
			$dir = 'uploads/'; //Diretório para uploads

			move_uploaded_file($_FILES['fileUpload']['tmp_name'], $dir.$new_name); //Fazer upload do arquivo
			echo $_FILES['fileUpload']['tmp_name'];
			echo '<img src= '.$dir.$new_name.'>';

			//

			//
			}
			
				$mysqli = new mysqli("localhost", "id7209847_root", "usbw123", "id7209847_db_login");

		if(mysqli_connect_errno()){
			printf("Connect failed: %s\n", mysqli_connect_error());
			exit();
		}
		if(isset($_POST['nome']) && isset($_POST['senha'])  && isset($_POST['avatar'])){
       $inserir = "insert into tb_usuario values (null,'".$nome."','".$senha."','".$avatar."')";
		if(!$mysqli->query($inserir)) {
			printf("Errormessage: %s\n", $mysqli->error);
		}
		$query1 = mysqli_num_rows(mysqli_query($mysqli, "SELECT * FROM TB_USUARIO WHERE NM_USUARIO = '$nome' AND NR_SENHA = '$senha' AND DS_AVATAR = '$avatar'"));
        if($query1 == 1){
            header("Location: Chatflix_chat.php");
        }else{
            echo "<script>alert('Por favor preencha todos os campos... (Usuario, senha e Avatar)'); history.back();</script>";
		}
		
		 
        }

		$mysqli->close();

?>

 

Eis a linha 37:

	$query1 = mysqli_num_rows(mysqli_query($mysqli, "SELECT * FROM TB_USUARIO WHERE NM_USUARIO = '$nome' AND NR_SENHA = '$senha' AND DS_AVATAR = '$avatar'"));

Eu procurei sobre o erro, mas pelo que parece ele pode ter diversas causa, alguem poderia me ajudar?

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Oliveira Cristian Olá, 

Você está misturando coisas de orientada a objetos com procedural.

 

No caso o seu mysqli_num_rows() e o mysqli_query() da linha 37 estão em forma procedural enquanto a conexão está em forma orientada a objeto

 

Use assim:

$result = $mysqli->query($inserir);

$row_count = $result->num_rows;

Aí você compara se o $_row_count for igual a 1....

Link para o comentário
Compartilhar em outros sites

5 minutos atrás, DiF disse:

@Oliveira Cristian Olá, 

Você está misturando coisas de orientada a objetos com procedural.

 

No caso o seu mysqli_num_rows() e o mysqli_query() da linha 37 estão em forma procedural enquanto a conexão está em forma orientada a objeto

 

Use assim:


$result = $mysqli->query($inserir);

$row_count = $result->num_rows;

Aí você compara se o $_row_count for igual a 1....

 

 

Eu não entendi como aplicar, eu troco o $query1 pelo $result = [...] ?

e depois eu checo o row_count, if($row_count == 1) ?

Link para o comentário
Compartilhar em outros sites

  • Moderador
  • Solução

@Oliveira Cristian Primeiro, o que vejo ali é que há muitas coisas desnecessárias. Muitos ifs.

 

Eu não entendi a sua lógica em fazer um insert e depois um select  com vários ifs ali dentro.

Não achas que é melhor você fazer os testes de campo vazio primeiro e depois testar se o cadastro foi bem sucedido?

Assim você reduz o monte de IF e realmente testa se houve um registro.

 

Por exemplo, eu faria desta forma:

$mysqli = new mysqli("localhost", "id7209847_root", "usbw123", "id7209847_db_login");

if(empty($nome) OR empty($senha) OR empty($avatar)):
    echo "<script>
             alert('Por favor preencha todos os campos... (Usuario, senha e Avatar)'); 
             history.back(-1);
          </script>";
    exit;
endif;


$testaRegistros = $mysqli->query("SELECT * FROM TB_USUARIO 
                                  WHERE NM_USUARIO LIKE '$nome' AND 
                                          R_SENHA LIKE '$senha' AND 
                                          DS_AVATAR LIKE '$avatar'");

$num = $testaRegistros->num_rows;

if($num  == 0):
    $inserir = $mysqli->query("INSERT INTO tb_usuario 
                               VALUES (null,'$nome',
                                            '$senha',
                                           '$avatar')");
    
    if($inserir):
          header("Location: Chatflix_chat.php"); 
    else:
        //aqui podes colocar um header para uma página de erro
    endif;    
   
else:
    //aqui indica que já existe um registro com os nome, senha e avatar.

    //podes colocar uma mensagem de erro.    

endif;

Basicamente Você recebe os dados do formulário e testa se os campos estão vazios. Se sim, força voltar para a tela anterior com o history.go(-1)

 

Depois você precisa fazer um select trazendo os dados basedos no que o usuário digitou.

 Se não achar nenhum registro, faz o insert. Ali dentro você testa se foi executado. Se sim redireciona com o header senão apresenta mensagem de erro.

 

Se quando, for feito o teste e achou um registro com base no que o usuário digitou, signifique que já tem um usuário registrado, então apresenta mensagem de erro.  Este é o bloco de else do IF que testa o num rows.

 

Creio que seria isso que você queria fazer. 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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...