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

Olá, estou com um probleminha no WampSever, se vc usa ele, ou sabe PHP , ficaria muito grato se me ajudasse.
quero pegar os dados de um banco de dados MySQL a partir do id,
por exemplo, acessando a URL
exibir.php?id=1
retorna o nome da pessoa de ID numero 1
moral da historia:
já tenho um código e funciona normalmente, mas apenas em apache em verões menores que 2.5 ,se não me engano.
No WampSever que tem um apache mais atualizado, e em alguns servidores de hospedagens mais atualizados também, MYSQL não funciona mais, tem que usar obrigatoriamente MYSQLI ou seja, teria que dar uma convertida no código para mysqli, mas não consegui, ja tentei substituir as as palavras mysql por mysqli, mas n adianta muita coisa não, quem entende do assunto, por favor me dê uma ajuda.
-----------------------conexao.php
<?php
$host = "localhost";
$user = "user";
$pass = "senha";
$banco = "banco";
mysql_connect($host, $user, $pass) or die (mysql_error());
mysql_select_db($banco) or die (mysql_error());
?>
-----------------------exibir.php
<?php
require("conexao.php");
$sql = "SELECT * FROM usuarios WHERE id=$id";
$query = mysql_query($sql);
while($sql = mysql_fetch_array($query)){
$nome = $sql["nomecompleto"];
}
?>
<?php echo "$nome"; ?>
80odFL1.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não adiante só adicionar um "i". Se fosse assim, o PHP poderia fazer isso internamente sem incomodar o programador.

MySQLi é um pouco diferente, mais robusto e mais seguro. Isso exige alguns parâmetros a mais.

Por exemplo, a maioria das funções exige o link da conexão (retorno de mysqli_connect), coisa que mysql_* não exige

MySQLi e PDO permitem usar Prepared Statements, que deixa seu código livre de SQL Injection. Seu código atual está vulnerável ao jogar o $id direto da URL na query

 

Dê uma olhada aqui:

http://rberaldo.com.br/mysql-obsoleto-php/

http://rberaldo.com.br/pdo-mysql/

 

Sobre as mensagens de erro:

http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 30/09/2015 at 10:26, kamin disse:

 

Olá, estou com um probleminha no WampSever, se você usa ele, ou sabe PHP , ficaria muito grato se me ajudasse.
quero pegar os dados de um banco de dados MySQL a partir do id,
por exemplo, acessando a URL
exibir.php?id=1
retorna o nome da pessoa de ID numero 1
moral da historia:
já tenho um código e funciona normalmente, mas apenas em apache em verões menores que 2.5 ,se não me engano.

No WampSever que tem um apache mais atualizado, e em alguns servidores de hospedagens mais atualizados também, MYSQL não funciona mais, tem que usar obrigatoriamente MYSQLI ou seja, teria que dar uma convertida no código para mysqli, mas não consegui, ja tentei substituir as as palavras mysql por mysqli, mas n adianta muita coisa não, quem entende do assunto, por favor me dê uma ajuda.

-----------------------conexao.php
<?php
$host = "localhost";
$user = "user";
$pass = "senha";
$banco = "banco";
mysql_connect($host, $user, $pass) or die (mysql_error());
mysql_select_db($banco) or die (mysql_error());
?>
-----------------------exibir.php
<?php
require("conexao.php");
$sql = "SELECT * FROM usuarios WHERE id=$id";
$query = mysql_query($sql);
while($sql = mysql_fetch_array($query)){
$nome = $sql["nomecompleto"];
}
?>
<?php echo "$nome"; ?>
80odFL1.png

O que você precisa fazer é aumentar a memória, alterando os arquivos no wampServer, se não me angano, no php.ini.

 

Vai funcionar.

 

Mas não deixe de seguir as orientações dos amigos programadores.Depois comece a estudar PDO. Porque MySQL está descontinuado...absoleto.

 

 

Abç

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 30/09/2015 at 12:10, Beraldo disse:

Não adiante só adicionar um "i". Se fosse assim, o PHP poderia fazer isso internamente sem incomodar o programador.

MySQLi é um pouco diferente, mais robusto e mais seguro. Isso exige alguns parâmetros a mais.

Por exemplo, a maioria das funções exige o link da conexão (retorno de mysqli_connect), coisa que mysql_* não exige

MySQLi e PDO permitem usar Prepared Statements, que deixa seu código livre de SQL Injection. Seu código atual está vulnerável ao jogar o $id direto da URL na query

 

Dê uma olhada aqui:

http://rberaldo.com.br/mysql-obsoleto-php/

http://rberaldo.com.br/pdo-mysql/

 

Sobre as mensagens de erro:

http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/

Li tudo que vc postou nesses links, mas ainda me restam duvidas...

poderia postar o codigo aqui, como ficaria um codigo pronto para puxar dados do banco de dados fazendo requisição pelo id, pelo url, usando mysqli ou PDO?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao invés de pedir um código pronto, não seria melhor você tentar fazer e caso tenha alguma dúvida nos perguntar?!

 

Se estimule a tentar, aprendemos bastante com erros e tentativas!

 

obs: o post do Beraldo está muito completo! Aproveite que você já tem esse auxílio.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 30/09/2015 at 17:18, Dorian Neto disse:

Ao invés de pedir um código pronto, não seria melhor você tentar fazer e caso tenha alguma dúvida nos perguntar?!

 

Se estimule a tentar, aprendemos bastante com erros e tentativas!

 

obs: o post do Beraldo está muito completo! Aproveite que você já tem esse auxílio.

como vc viu no inicio do post, tem meu código, é oque eu consegui, não estarei aqui se estivesse conseguido algo alem dele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

no tutorial do Beraldo, tem como fazer um select e uma tabela, mas não por id, eu preciso selecionar dados da determinada ID, por exemplo:

Temos 123 nomes registrados,

quero usar

 

?id=1
para exibir um nome de cada vez

 

?id=1

retorna "zé"

?id=2

retorna "joão"

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 30/09/2015 at 17:28, kamin disse:

no tutorial do Beraldo, tem como fazer um select e uma tabela, mas não por id,

Não tem mesmo.

Mas tem com "search"

É a mesma ideia. Só muda o nome...

 

olhe a seção de Prepared Statements. Está tudo detalhado lá.

Tente fazer. Não vou te dar a solução de mão beijada assim. Tente fazer primeiro

http://rberaldo.com.br/pdo-mysql/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui

 

index.php

<?php
include ("conexao.php");
    
$id = @$_GET['id'];
$sql = mysqli_query($conexao, "SELECT * from usuarios WHERE id ='$id'");
$resultado = mysqli_fetch_assoc($sql); 

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

quando acessa index.php?id=1

ele imprime o resultado nome da id 1, exemplo:

 

index.php?id=1 Oportunidade Apresentada por: Zé
​index.php?id=2 Oportunidade Apresentada por: João

​index.php?id=3 Oportunidade Apresentada por: Maria


mas eu preciso fazer algo que não estou conseguindo, preciso que quando a requisição fique vazia, volte resultado como se a requisição fosse 1, exemplo:

index.php?id= Oportunidade Apresentada por: Zé

já tentei o seguinte

<?php
include ("conexao.php");
    
$id = @$_GET['id'];
$sql = mysqli_query($conexao, "SELECT * from usuarios WHERE id ='$id'");
$resultado = mysqli_fetch_assoc($sql); 

if (empty($id))  {
       $id = @$_GET['1'];
    }
?>
<?php echo "Oportunidade Apresentada por:"; echo $resultado["nome"]; ?>

ele até reconhece que $id está vazia, mas não atribui 1 a requisição, já tentei também:

$id = @$_GET['1'];

$id = @$_GET['?id=1'];

$id = '1';

$id = 1;

 

e não funciona.
OBS: quero que quando a requisição fique vazia, retorne resultado da requisição 1

Não quero que quando a requisição fique vazia, redirecione para index.php?id=1
então nada de
header('Location: index.php?id=1');
isso não vai ser útil para mim.


grato a quem puder me ajudar :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro, pare de usar esse "@" para esconder erros

Entenda o motivo:

http://rberaldo.com.br/boas-praticas-programacao-php/#arroba

 

Se você quer definir um valor padrão quando a variável da URL for indefinida, basta um if, ou usando o Operador Ternário:

 

$id = isset($_GET['id']) && (int) $_GET['id'] != 0 ? (int)$_GET['id'] : 1;

Entenda melhor o que isso significa:

http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/#undef_index

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, tem me ajudado bastante , brigadão.

 

Estou passando por outra dificuldade em meu projeto, se puder me dar um help novamente, fico grato xD
eu queria fazer o seguinte:

 

quando usuário acessa index.php?id=1 ele tem como resultado: Oportunidade Apresentada por: Zé
certo? ok
eu também queria que quando o usuário mudasse de página de index.php?id=1 para cadastro.php gostaria que tivesse também como resultado Oportunidade Apresentada por: Zé , sem precisar fazer requisição na URL novamente....
resumindo, Quero fazer uma requisição GET para uma determinada URL, mas quero enviar dados de cookies, em vez de escrever ?id=1 na URL

já rodei bastante e não consegui... tentei o seguinte:

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

$id = isset($_GET['id']) && (int) $_GET['id'] != 0 ? (int)$_GET['id'] : 1;
$sql = mysqli_query($conexao, "SELECT * from usuarios WHERE id ='$id'");
$resultado = mysqli_fetch_assoc($sql); ?>

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

<?php setcookie("id_capturada", $id["id"]); ?>

//para testar se funcionou, tento mudar de página, ou então tento imprimir a id capturada pelo cookie
<?php if(isset($_COOKIE["id_capturada"])) {?>
<p> ID capturada com sucesso!</p>
<?php }?>

Mas sem sucesso nenhum...
aqui vai um exemplo de sucesso

http://www.paginalucrativa.com.br/index.php?id=5
Oportunidade Apresentada por: GUNTER PRANGE (ID 5)
se mudar de index.php?id=5 para depoimentos.php terá o mesmo resultado, mas sem requisição na URL

AGRADEÇO A QUEM PUDER ME AJUDAR !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você habilitar todas as exibições de erro, como mostrado neste tópico, verá que seu setcookie() gera um erro, pois está depois do echo

Falo mais sobre isso neste link: http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/#header

 

Para isso eu recomendo usar session em vez de cookie. Será mais simples de manipular, apesar de o resultado final ser o mesmo.

Lembre-se de colocar session_start() também antes de qualquer saída ao navegador

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, não deu certo

 

index.php

<?php
include ("conexao.php");
$id = isset($_GET['id']) && (int) $_GET['id'] != 0 ? (int)$_GET['id'] : 1;
$sql = mysqli_query($conexao, "SELECT * from usuarios WHERE id ='$id'");
$resultado = mysqli_fetch_assoc($sql); 
setcookie("id_capturada", $id["id"]);
?>
<?php if(isset($_COOKIE["id_capturada"])) {?>
<p>ID capturada com sucesso</p>
<?php }?>

conexao.php

<?php
$conexao = mysqli_connect ("localhost", "kamin", "teste1912", "kamin");
?>  

fiz do jeito que vc falou, sem espaços ou qualquer comando de saída/impressão ao navegador.

mas ele ainda não salva no cookie a $id , e não imprimi "ID capturada com sucesso" , ja tentei tirar essa mensagem de impressão, e mudar de página pra vê se está salva a $id, mas não está.

e também a habilitei as mensagens de erros como descrito naquele tópico lá, mas não imprimiu nenhum erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui
Beraldo, tem me ajudado bastante, graças a vc descobri o session, tentei com session_start() e deu certo, ficou assim o código:

<?php session_start(); ?>
<?php include ("conexao.php");
    
if (isset($_SESSION["id_capturada"])) {
$id = $_SESSION["id_capturada"];
} else {
$id = isset($_GET['id']) && (int) $_GET['id'] != 0 ? (int)$_GET['id'] : 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"]; ?>

Problema: Quando o usuário faz uma nova requisição, não funciona, o resultado volta daquela SESSION aberta, por exemplo:
index.php?id=1 retorna Oportunidade Apresentada por: Zé
index.php?id=2 retorna Oportunidade Apresentada por: Zé
Quando era pra ser Oportunidade Apresentada por: João

ou seja, preciso destro destruir a sessão quando houver uma nova requisição na URL

poderia usar , unset ou session_destroy

mas não estou sabendo com fazer o codigo:

(se houver uma nova requisição na url, destruir a sessão e abrir uma nova sessão com aquela requisição)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua lógica está invertida

Pense: o que é mais relevante: o ID na session ou o ID na URL?

 

Na URL, certo?

Logo, seu IF deve buscar o ID na URL primeiro. Caso não exista, aí pega da session. Você fez o oposto

Compartilhar este post


Link para o post
Compartilhar em outros sites

se eu fizer desse jeito que vc falou
inverter a logica, vai ficar assim , certo

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

mas fazendo assim, quando acessa index.php , ele da um erro
9jiNieU.png
da esse erro pq desse jeito aí que vc falou pra eu fazer, vai anular o código que vc mandou eu por antes, ou seja o código que é para por 1 na $id , se não houver requisição na url,

$id = isset($_GET['id']) && (int) $_GET['id'] != 0 ? (int)$_GET['id'] : 1;

e agora Beraldo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz, e ainda ficou dando erro Undefined Index

mas ai dei uma olhada aqui

http://rberaldo.com.br/as-mensagens-de-erros-mais-comuns-do-php/

e consegui :)

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

if (isset($_GET['id'])) {
$id = $_GET['id'] && (int) $_GET['id'] != 0 ? (int)$_GET['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";
?>

mas pra finalizar com chave de ouro, eu queria fazer uma coisa nessa linha que você me escreveu

$id = isset($_GET['id']) && (int) $_GET['id'] != 0 ? (int)$_GET['id'] : 1;

por si só, é assim
index.php?id=1 Oportunidade Apresentada por: zé (ID 1)

 

com a linha que me escreveu, se não houver requisição ou sei lá oq, pq n entendi 100% recebe 1, ex:

index.php?id= Oportunidade Apresentada por: zé (ID 1)

index.php?id=testeComLetra Oportunidade Apresentada por: zé (ID 1)

meu problema é que se o usuário colocar na URL qualquer ID que não exista, não tá voltando nada
index.php?id=9999 Oportunidade Apresentada por: (ID )

 

preciso que se o usuário por na URL qualquer ID que não exista, ou seja null, retorne valor da ID 1 tb

ja tentei
$id = $_GET['id'] && (int) $_GET['id'] = null ? (int)$_GET['id'] : 1;

$id = $_GET['id'] && (int) $_GET['id'] != 0 or null ? (int)$_GET['id'] : 1;

mas fica bugado, não funciona.

como ficaria ?

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.