Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera, minha dúvida talvez seja bem simples de resolver, o caso é assim, quero que quando o usuário logue-se no meu site, pela primeira vez, ele receba uma mensagem.
Como eu fiz?
No banco de dados, existe uma tabela chamada primeiro_login e ela recebe o valor de "0" quando o usuário se cadastra.
Verão também a variável $chave, ignorem ela, pois funciona 100%, o que não entendo, é porque não está exibindo o resultado.
@session_start();
if ($_SESSION['logado'] == $chave) {
$login = $_SESSION['login'];
$primeiro_login = mysql_query("SELECT primeiro_login FROM perfil WHERE login='$login'") or mysql_error;
$row_login = mysql_fetch_row($primeiro_login);
if ($row_login == '0') {
echo "MENSAGEM AQUI";
}
}
Bom, ele não retorna nenhum erro, mas também não retorna a "MENSAGEM".
Depois que isso funcionar, e irei colocar uma mensagem personalizada, e um LINK, onde esse LINK receberá um UPDATE, para levar o valor da tabela primeiro_login para "1", é um código simples, só que não estou conseguindo fazer funcionar...
Quem estiver disposto a ajudar, tem meu agradecimento.
Abraços.
Igor, obrigado por responder.
Tirei o ARROBA, testei, nenhum erro informado.
A variável $chave está na config.php, quando o usuário se LOGA, a SESSÃO recebe o valor da $chave, se o valor for igual continua, se não, não.
Não sei usar essa FLAG como você disse, e nem nunca ouvi falar, pesquisei um pouco no Google e não obtive sucesso na pesquisa, será que você poderia me informar algum site que tenha explicação sobre o assunto?
Também gostaria de saber porque o meu código não funcionou, até onde eu sei, era pra funcionar, não achei erros :/
Agradeço a ajuda.
nao ira encontrar sore flag, eh um termo da modelagem de software....mas funciona como uma bandeira, tipo, vamos supor futbol, se o cara ta impedido, a bandeira levanta, se nao ta a bandeira nao levanta...mas coloca uma coluna assim pra cada usuario, ficara mais automatico...
você ta dando include no config neste arquivo ae? da um print_r($_SESSION) e veja o q ele retorna;;;
Não, não estou dando include, é assim:
Minha index tem o include da config.php e da principal.php, que é a página que tem o código do meu primeiro post.
Para ver se era falta da config.php, eu tentei buscar um valor no banco de dados por uma query, e funcionou, então não pode ser a config.php.
Com o **print_r($_SESSION)**, a seguinte mensagem aparece:
Array ( [login] => teste [senha] => 123 [logado] => teste [security] => nDmWwE3ZByKNd4Ccz4xZ )
Para deixar mais claro, veja esse código:
@session_start();
if ($_SESSION['logado'] == $chave) {
echo "VOCE ESTA LOGADO!"; }
Esse código, só é para aparecer na página se o usuário estiver logado, ou seja, quando estou logado ele aparece, quando não estou ele não aparece!
Eu só fiz uma alteração, ao invez de botar um ECHO, eu tentei usar a query para buscar um valor no banco de dados, se o valor for verdadeiro, retorna mensagem, se não, não exibe, apenas isso!
:)
entao da um echo na $chave numa pagina q nao seja o config, e fora de qq if..
Ai ele exibe o valor da $chave, que eu atribui como "teste".
No outro código que eu passei ali em cima, está assim:
Array ( [login] => teste [senha] => 123 [logado] => teste [security] => nDmWwE3ZByKNd4Ccz4xZ )
Sendo o **[logado] => teste**, ou seja, o valor de **$chave** é **teste**.ok, agora antes dakele if la , q você postou no primeiro topico, faca a mesma coisa, pode ser q o $chave nao esteja no escopo do codigo la...
Ficaria assim? Porque se for, ainda não funcionou! :D
$chave = 'teste';
session_start();
if ($_SESSION['logado'] == $chave) {
$login = $_SESSION['login'];
$primeiro_login = mysql_query("SELECT primeiro_login FROM perfil WHERE login='$login'") or mysql_error;
$row_login = mysql_fetch_row($primeiro_login);
if ($row_login == '0') {
echo "MENSAGEM AQUI";
}
}faz o seguinte, posta os codigos deste 3 arquivos q você citou...
nao, nao seria assim nao...
Opa... vamos lá...
Nunca coloque o @ em uma session, dessa forma você irá "fugir" de um problema caso tenha, que poderá te ocasionar problemas maiores mais tarde.
mysql_fetch_row():
Não acha que ta faltando coisa aí ? será que é a função correta que você precisa ?
Errado:
or mysql_error;
Correto:
or die(mysql_error());
Errado:
$row_login == '0'
Se seu valor é INT não tem porque compará-lo como se fosse String, o correto seria:
$row_login == 0
Certifique-se de que o campo está com o valor 0, após isso, veja o código abaixo, onde tem "campo_da_FLAG" você coloca o nome do campo que recebe esse valor de 0. (int)
<?php
session_start();
if ($_SESSION['logado'] == $chave) {
$login = $_SESSION['login'];
$primeiro_login = mysql_query("SELECT primeiro_login FROM perfil WHERE login='$login'") or die(mysql_error());
if(mysql_result($primeiro_login,0,'campo_da_FLAG') == 0){
print 'MENSAGEM AQUI';
}
}
?>
Veja no que da.
Index.php:
<?php
mb_internal_encoding('UTF-8');
mb_http_output('iso-8859-1');
ob_start('ob_gzhandler');
include('config.php');
include('links.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="title" content="<?=$site['titulo']; ?>" />
</head>
<body>
<?php include('login.php'); ?>
<?php include('principal.php'); ?>
</body>
</html>
config.php:
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'cadastro';
$chave = 'teste';
mysql_connect($host, $user, $pass) or mysql_error;
mysql_select_db($db);
O principal.php:
session_start();
if ($_SESSION['logado'] == $chave) {
$login = $_SESSION['login'];
$primeiro_login = mysql_query("SELECT primeiro_login FROM perfil WHERE login='$login'") or mysql_error;
$row_login = mysql_fetch_row($primeiro_login);
if ($row_login == '0') {
echo "MENSAGEM AQUI";
}
}
ABAIXO DO CÓDIGO A CIMA, FICARÁ OS TEXTOS DA PÁGINA PRINCIPAL.
É isso ai ó...
interessante....tente colcoar session start na index, veja se da certo, se nao der, retire o session start da index, e de o print r no session...
Puxa vida, funcionou...
Agradeço ao Igor e ao Alaerte, que deram seu tempo para me ajudar.
De fato, o código ficou assim:
session_start();
if ($_SESSION['logado'] == $chave) {
$login = $_SESSION['login'];
$primeiro_login = mysql_query("SELECT primeiro_login FROM perfil WHERE login='$login'") or die(mysql_error());
if(mysql_result($primeiro_login,0) == 0){
print 'MENSAGEM AQUI';
}
}
E funcionou, porém, eu tirei a parte do: 'campo_da_FLAG', que não estava funcionando corretamente (ou eu não soube fazer funcionar).
Já testei com valor 1 e valor 0, ambos funcionando.
Obrigado pela ajuda dos dois.
Podem fechar o tópico. :D
E funcionou, porém, eu tirei a parte do: 'campo_da_FLAG', que não estava funcionando corretamente (ou eu não soube fazer funcionar).
Para o seu caso se aplica sem esse parâmetro :joia:
antes de mais nada, retira o arroba na primeira linha, o arroba, esconde erros, e sem mostrar os erros você nao pode conserta-los,
segundo, de onde vem a varaivel $chave? ao q parece nao esta entrando no primeiro if, justamente pq a sessin logado, nao tem o mesmo valor da $chave
terceiro, nao faça uma tablea primeiro login e tals, coloque uma flag na tabela de usuario, uma coluna a mais para o primeiro login,dae você puxa todos os dados pro php, se for 0, primeiro login, você exibe a mensagem, e atualiza o 0 pra 1, dae a proxima vez nao ira exibir a mensagem...