Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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);$nome = $sql["nomecompleto"];
}
?>
<?php echo "$nome"; ?>
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/80odFL1.png&key=354160fa2156843d31f691c5740e41cef672e77789e8a786ba1fd68d64d3ecc0" alt="80odFL1.png" />
A partir, se não me engano, do PHP 5.5.0 isso ficou obsoleto
Use mysqli ou PDO http://php.net/mysqli
Tem exemplos
Mas se deseja mesmo usar isso volte a versão do php
>
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);$nome = $sql["nomecompleto"];
}
?>
<?php echo "$nome"; ?>
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/80odFL1.png&key=354160fa2156843d31f691c5740e41cef672e77789e8a786ba1fd68d64d3ecc0" alt="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ç
>
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?
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.
>
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.
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"
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
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 :)
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
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 !!
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
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.
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)
Alguém me ajuda ?
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
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
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/9jiNieU.png&key=50504d2dbf92fc09ea1365ed73b245e3d989b56a2f452784156fb688dc0d579c" alt="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?
Ué, é só fazer o if com $_SESSION também. Se não existir, define 1.
Você fez dois IFs antes. Pode continuar fazendo os dois. Bastava mudar a ordem deles
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 ?
A questão do 9999 você não resolve desse jeito que postou.
Isso vai depender do retorno do mysql. Se retornar zero resultados, define o ID para 1.
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;>
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
Tem que usar $num_rows pra saber se a consulta retornou zero ou não
Tem que usar $num_rows pra saber se a consulta retornou zero ou não
como ficaria o código Beraldo ?
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
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/