Ir para conteúdo

POWERED BY:

Arquivado

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

kamin

Problemas para pegar dados de um banco de dados a partir do ID, com MY

Recommended Posts

Da pra fazer melhor...

	$id = 1;

	if(isset($_GET['id']) && is_int($_GET['id'])):
		$id = $_GET['id'] != 0 ? $_GET['id'] : 1; // Desnecessário forçar int aqui, uma vez que usamos o is_int correto ?

		//Já verificamos se o existe $_GET['id'], agora basta verificar se existe no banco de dados tal id...
		$Read = mysqli_query($conexao, "SELECT * FROM `usuarios` WHERE `id` = ".$id." LIMIT 1") or die("Erro: ".mysqli_error($conexao));
		if(!$Read): // Caso não houver resultados, a $id volta a ser 1
			$id = 1;
		endif;
		mysqli_free_result($Read);
	endif;

	$_SESSION['id_capturada'] = $id;

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Da pra fazer melhor...

	$id = 1;

	if(isset($_GET['id']) && is_int($_GET['id'])):
		$id = $_GET['id'] != 0 ? $_GET['id'] : 1; // Desnecessário forçar int aqui, uma vez que usamos o is_int correto ?

		//Já verificamos se o existe $_GET['id'], agora basta verificar se existe no banco de dados tal id...
		$Read = mysqli_query($conexao, "SELECT * FROM `usuarios` WHERE `id` = ".$id." LIMIT 1") or die("Erro: ".mysqli_error($conexao));
		if(!$Read): // Caso não houver resultados, a $id volta a ser 1
			$id = 1;
		endif;
		mysqli_free_result($Read);
	endif;

	$_SESSION['id_capturada'] = $id;

 

gostei da sua logica.

mas por algum motivo, se informar na URL alguma ID que não existe no banco de dados, ele está retornando nada, ex:

index.php?id=9999 Oportunidade Apresentada por: (ID )

 

ou seja, a logica mudou , mas na pratica, está fazendo exatamente a mesma coisa que meu código faz, será que vc nao errou algo? aqui não exibiu erros e desconheço algumas coisas do seu código pra tentar editar hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente fazer.

Só assim vai aprender de verdade.

 

O valor de num_rows deve ser testado no if. O if que você usou testa o retorno de mysqli_query. Se você olhar a documentação de mysqli_query, verá que só é retornado FALSE em caso de erro. Se o SELECT não retornar registros, isso não é um erro, é apenas um conjunto vazio de resultados. Por isso nunca entrará no IF

Compartilhar este post


Link para o post
Compartilhar em outros sites

sinceramente não sei nem pra onde ir agora.
n sei mexer no seu código LandersonAlmeida
sou leigo no php, diria que não consigo ler 100% esse codigo ai, so entendi um pouco da logica,
testei o código que vc me passou, na verdade, não funcionou.

<?php session_start(); ?>
<?php include ("conexao.php");
    

$id = 1;

	if(isset($_GET['id']) && is_int($_GET['id'])):
		$id = $_GET['id'] != 0 ? $_GET['id'] : 1; // Desnecessário forçar int aqui, uma vez que usamos o is_int correto ?

		//Já verificamos se o existe $_GET['id'], agora basta verificar se existe no banco de dados tal id...
		$Read = mysqli_query($conexao, "SELECT * FROM `usuarios` WHERE `id` = ".$id." LIMIT 1") or die("Erro: ".mysqli_error($conexao));
		if(!$Read): // Caso não houver resultados, a $id volta a ser 1
			$id = 1;
		endif;
		mysqli_free_result($Read);
	endif;

	$_SESSION['id_capturada'] = $id;
?>

<?php echo "Oportunidade Apresentada por:"; echo $resultado["nome"]; ?>

3MKsTOi.png

usando $Read , da mesmo erro

Beraldo, sua teoria é valida, de só aprende tentando,
mas dessa vez, eu não sei nem pra onde ir mesmo, tô simplesmente voando,
estava desenrolando com 'meu codigo' ao decorrer do tópico, vc acompanhou tudo.
mas agora com esse código aí, num_rows...
n faço ideia.
se me desse o codigo pronto, n quer dizer que eu não vá aprender, se me desse o código funcionando, eu poderia entender, já que está funcionando, mas que não quer fazer isso...

então tentando com meu código novamente, que e mais simples e condigo entender.
como eu iria saber s
e retornou zero resultados ? pra eu poder fazer um if definindo 1

<?php session_start(); ?>
<?php include ("conexao.php");

$id = 1;
if (isset($_GET['id'])) {
$id = $_GET['id'] && (int) $_GET['id'] != 0 ? (int)$_GET['id'] : 1;
}elseif ($id == null) {
$id = "1";    
} else {
$id = isset($_SESSION["id_capturada"]) ? $_SESSION["id_capturada"] : '1';
}
$sql = mysqli_query($conexao, "SELECT * from usuarios WHERE id ='$id'");
$resultado = mysqli_fetch_assoc($sql); 
$_SESSION["id_capturada"] = "$id";
?>

<?php echo "Oportunidade Apresentada por:"; echo $resultado["nome"]; ?>

null ? não da certo, quando ponhe qualquer numero que nao seja ID, ta ficando vazio eu acho..
Oportunidade Apresentada por:

Compartilhar este post


Link para o post
Compartilhar em outros sites

$Read é o retorno de mysqli_query. Logo, é um objeto mysqli_result, como diz a documentação

 

$num_rows é uma propriedade desse objeto, podendo ser acessada pelo operador "flecha" (->)

 

$Read->num_rows

 

Ou, se preferir usar o método procedural, sem Orientação a Objetos:

 

mysqli_num_rows($Read)

 

Portanto, seu IF não deve ser assim:

 

if(!$Read)

(na verdade, esse IF tem lógica, mas apenas para validar se a consulta funcionou, não para validar o número de registros retornados)

 

Ele deve ser assim:

 

if ($Read->num_rows == 0)

 

ou assim, sem OOP:

 

if (mysqli_num_rows($Read) == 0)

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguma coisa está errada

<?php session_start(); ?>
<?php include ("conexao.php");
    

$id = 1;

	if(isset($_GET['id']) && is_int($_GET['id'])):
		$id = $_GET['id'] != 0 ? $_GET['id'] : 1; // Desnecessário forçar int aqui, uma vez que usamos o is_int correto ?

		//Já verificamos se o existe $_GET['id'], agora basta verificar se existe no banco de dados tal id...
		$Read = mysqli_query($conexao, "SELECT * FROM `usuarios` WHERE `id` = ".$id." LIMIT 1") or die("Erro: ".mysqli_error($conexao));
		if (mysqli_num_rows($Read) == 0) : // Caso não houver resultados, a $id volta a ser 1
			$id = 1;
		endif;
		mysqli_free_result($Read);
	endif;

	$_SESSION['id_capturada'] = $id;
?>

<?php echo $_SESSION['id_capturada']; ?>

tentei

if (mysqli_num_rows($Read) == 0)

if ($Read->num_rows == 0)
resultado:
nFTSeSe.png

está preso a ID 1
e falta a impressão do nome, como a estrutura do código mudou, preciso código pra imprimir os dados para o usuário final, que era

<?php echo "Oportunidade Apresentada por:"; echo $resultado["nome"]; ?>

agora a $resultado existe, não sei como ficará, tentei $read e mysqli_result , nada..

 

aguardo resposta, agradeço pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua consulta está dentro do if. Isso está errado.

Volte ao código que você estava usando antes (seu Post #20)

 

Do jeito que está agora, a consulta só será feita se tiver ID na URL

 

Por isso que eu peço pra você tentar primeiro. E pense bem no fluxo que deve ser executado.

Se precisar desenhar no papel, faça isso. Mas pense no que seu programa deve fazer.

 

Veja:

1. Definir ID como 1 (será seu valor padrão, sempre

2. Ver se há ID na URL

2.1. Se houver e for diferente de zero, pegar o ID

3. Caso contrário verificar session

3.1 Se houver valor na session, pegue o valor da session

4. Pesquisar no MySQL

5. Se retornar valor, ótimo

5.1. Caso contrário, pegar os dados do ID 1

 

Veja que a consulta no banco ocorre sempre, independente de qualquer outra coisa.

Logo, deve estar fora do IF, como você estava fazendo antes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por mkboy
      Olá
       
      Tenho uma situação onde tenho a mesma tabela em dois bancos de dados diferentes, em locais diferentes.
      E quando atualizar uma tabela preciso atualizar a segunda no outro banco de dados também, é a mesma instrução SQL, os bancos / tabelas / registros são iguais.
       
      Tentei isso, mas não funciona:
       
      $endereco_banco = "186.000.00.01"; $usuario = "us01"; $senha = "010101"; $banco = "db01"; $conexao = new mysqli($endereco_banco,$usuario, $senha, $banco); $endereco_banco_externo = "186.000.00.02"; $usuario_externo = "us02"; $senha_externo = "020202"; $banco_externo = "db02"; $conexao_externo = new mysqli($endereco_banco_externo,$usuario_externo, $senha_externo, $banco_externo); //Atualiza no primeiro DB $conexao->query($str) or trigger_error($conexao->error." [$str]"); //Atualiza no segundo DB $conexao_externo->query($str) or trigger_error($conexao_externo->error." [$str]"); Podem me ajudar por favor.
    • Por Lísias de Castro
      Ola. Estou criando um sistema de carrinho em php e pra isso preciso de um banco de dados. Pra não ficar chamando todas as funções a cada vez que a pagina atualiza, decidi usar a função mysqli_select_db, que verifica se o db existe e caso não exista, entre nas funções e crie. Porém, ao chamar a função quando o db não existe o php lança um "erro não capturado" e trava o layout. Se eu chamo o código sem o mysqli_select_db o código roda, porem chamando as funções a cada atualização. Poderia ser algum erro na api, ou tem uma nova forma pra pegar o tipo mysqli no php8?
      Esse é o código que eu chamo pra salvar os dados:
       
      ```php
      public function save($host,$user,$pass,$db){
              $connection = mysqli_connect($host, $user, $pass);
              if($connection){
                  if(mysqli_select_db($connect,$db)){
                  }
                  $dbCreator = "CREATE DATABASE IF NOT EXISTS ".$db;
                  if(mysqli_query($connection, $dbCreator)){
                      //echo "Database created successfully"."</br>";
                  } else{
                      echo "ERROR: Could not able to execute $sql. " . mysqli_error($connection);
                      return 0;
                  }
                  $tableCreator = "CREATE TABLE IF NOT EXISTS `".$db."_tb` (".
                              "`name` VARCHAR(64) NOT NULL,".
                              "`price` REAL,".
                              "`amount` SMALLINT,".
                              "`barcode` BIGINT NOT NULL PRIMARY KEY,".
                              "`lot` VARCHAR(64) NOT NULL,".
                              "`manufactured` VARCHAR(10) NOT NULL,".
                              "`maturity` VARCHAR(10) NOT NULL".
                              ");";
                  $insert = "INSERT INTO ".$db."_tb (`name`, `price`, `amount`, `barcode`, `lot`, `manufactured`, `maturity`) ".
                                "SELECT ".
                                "\"$this->name\",".
                                "\"$this->price\",".
                                "\"$this->amount\",".
                                "\"$this->barcode\",".
                                "\"$this->lot\",".
                                "\"$this->manufactured\",".
                                "\"$this->maturity\"".
                                " FROM dual WHERE NOT EXISTS(SELECT * FROM $db"."_tb WHERE barcode = '$this->barcode')LIMIT 1;";
                  if(mysqli_select_db($connection,$db)){
                      if(mysqli_query($connection,$tableCreator));//echo "Tabela ".$db."_tb criada com sucesso.<br/>";
                      if(mysqli_query($connection,$insert));//echo "Dados inseridos com sucesso em $db"."_tb<br/>";
                  }
                  mysqli_close($connection);
                  return 1;
              }
              return 0;
          }
      ```


    • Por AdrianoAP
      Pessoal estou tendo este erro quando eu fui passa a minha aplicação do mysql para o mysqli vejam o código -->>
       
      <?php
        $emitente = $mysqli->query("SELECT nome FROM emitente ORDER BY id ASC LIMIT 1");
        while($ln = $emitente->fetch_array()){
        echo $ln['nome'];
      }?>
       
       
      Devido á isso meu sistema não consegue fazer o login, se alguém puder me dar alguma dica eu agradeço.
    • Por Felper
      Criei um sistema de login com php e mysql mas não consigo realizar o login mesmo tendo certeza de que os dados foram cadastrados com sucesso. Não sei o que fiz de errado. Vejam o código:
      <?php $login2 = $_POST['loginlogar']; $senha2 = $_POST['senhalogar']; $link = mysqli_connect("localhost", "root", "", "bancolanche") or die("<h1>Não foi possível conectar!!</h1>". mysqli_error()); $banco = mysqli_select_db($link, "bancolanche") or die("<h1>Não foi possível abrir banco de dados!!</h1>". mysqli_error()); $sql = "SELECT login, senha FROM users"; $resulta = mysqli_query($link, $sql); while ($book = $resulta->fetch_object()) { $logindb = $book->login; $senhadb = $book->senha; } if($login2 == "" || $senha2 == ""){ $_SESSION['msg'] = "<h1 style='color:red'>Erro ao logar! Há campos de preenchimento obrigatório em branco.</h1>"; header("Location: logar.php"); } else { if($logindb==$login2 && $senhadb==$senha2){ $_SESSION['msg'] = "<h1 style='color:green'>Logoff realizado com sucesso!</h1>"; header("Location: index.html"); } else { $_SESSION['msg'] = "<h1 style='color:red'>Erro ao logar! Usuário inexistente ou senha incorreta.</h1>"; header("Location: logar.php"); } } mysqli_close($link); ?>  
    • Por Marcos Vinícius
      Prezados,
       
      Estou tentando fazer uma consulta que soma os valores de um campo em determinado mês/ano mas não estou conseguindo fazer funcionar. Alguém tem uma ideia do que pode ser?
       
      "SELECT sum(caepf) AS scaepf FROM atend WHERE date_format(data, '%Y-%m') <= date_format('$d', '%Y-%m') AND date_format(data, '%Y-%m') >= date_format('$d', '%Y-%m') AND pav = '$nome_pav' AND dr = '$dr' ";  
×

Informação importante

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