Login php precisa-se de ajuda

RatoGR

Power Member
Boa tarde a todos,

A minha grande duvida situa-se em criar um login em php com base de dados, a especial duvida é como criar este login de modo a quando o utilizador fizer Login o seu nome e uma area restrita, caso seja administrador do site aparecer no sitio onde estava o From do Login, ou seja na mesma pagina index.php alguém me sabe ajudar?


Obrigado
 
recebes os dados do formulário
procuras o registo correspondente na base de dados
se encontrar, copias os dados necessários para varáveis de sessão
pões também na base de dados um campo a dizer o tipo de permissão de cada utilizador e depois consoante o valor desse campo vai mostrando as áreas correspondentes
 
Este exemplo envia o utilizador para 1 pagina diferente da do index.php ou seja nao recebe os resultados na pagina onde efectuou o Login
:(
 
Este exemplo envia o utilizador para 1 pagina diferente da do index.php ou seja nao recebe os resultados na pagina onde efectuou o Login
:(

também querias a papinha toda feita? :007:
isso é só um exemplo, como tu pediste. agora tens que ver como é que isso funciona e fazer as alterações necessárias para adaptar ao teu código e funcionar
 
estas a utilizar mysql certo?
por exemplo, quando um utilizador normal se regista metes para mais um campo na tabela, e gravas automaticamente o tipo de utilizador como user, e depois na parte de login fazes algo deste genero:

PHP:
$nome=$_POST['cliente'];
 $password=$_POST['pass'];
 $resultado=mysql_query("SELECT * FROM cliente WHERE login='$nome' and senha='$password'");
 $num=mysql_num_rows($resultado);
 if ($num<1)
 {
    echo '<script>
       d=window.top;
    d.location="index.php?n";
      </script>';
  } else {
  $_SESSION['id']=mysql_result($resultado,0,'id');
  $_SESSION['login']=mysql_result($resultado,0,'login');
  $_SESSION['nome']=mysql_result($resultado,0,'nome');
  $_SESSION['tipo']=mysql_result($resultado,0,'tipo_utilizador');
  echo "<script>
      d=window.top;
      d.location='index.php';
      </script>" ;  
 }

e depois nas paginas que apenas o admin tem acesso metes esta validação:

PHP:
if (strcmp($_SESSION['tipo'],'Admin')!==0)

e depois o codigo que queres que tenha a pagina.

espero que tenha sido claro

cumps
 
O meu problema está em criar um sistema de login no portal para que ele identifique e volte para a pagina principal do portal com os dados do utilizador. Vou deixar aqui uns exemplos.

FIGURA 1
1611200701.png


FIGURA 2

1611200702.png



Portanto quando o utilizador faz Login na Figura 1 se for valido aparece a Figura 2 senao aparece a figura 1 mas tudo na mesma pagina como faz isto?

Ajuda precisa-se
 
basicamente quando entra na pagina verificas se a variavel de sessão já tem informação, se tiver mostra... senão mostra o form de login.
 
Isto é o que eu tnh no index.php do Form


PHP:
<form name="frmAutentica" method="post" action="autentica.php">
   <table border="0" cellpading="0" cellspacing="0" width="50%">
   <tr>
      <td width="10%">User:</td>
      <td width="40%"><input type="text" name="txtUser" size="25"></td>
   </tr>
   <tr>
      <td width="10%">Senha:</td>
      <td width="40%"><input type="password" name="txtSenha" size="10"></td>
   </tr>
   <tr>
      <td colspan="2" align="center">
      <input type="submit" name="btnLogar" value="Login >>"></td>
   </tr>
   </table>
</form>

Agora o ficheiro de autentica.php

PHP:
<?
//CONECTA COM O BANCO DE DADOS
require_once("conecta.php");

//RECEBE OS DADOS DO FORMULÁRIO
$usuario   =   $_POST[txtUser];
$senha     =   $_POST[txtSenha];

//VERIFICA
$sql   =   mysql_query("
           SELECT A.ID_USUARIO, A.NOME_USUARIO FROM tb_usuarios A
           WHERE  A.USUARIO  =  '$usuario'
              AND A.SENHA    =  '$senha'") or die("ERRO NO COMANDO SQL");

//LINHAS AFECTADAS PELA CONSULTA
$row   =  mysql_num_rows($sql);

//VERIFICA SE RETORNOU ALGO
if($row == 0) echo "Usuário/Senha inválidos";

else { 
     //PEGA OS DADOS
     $id   =   mysql_result($sql, 0, "ID_USUARIO");
     $nome =   mysql_result($sql, 0, "NOME_USUARIO");
     
     //INICIALIZA A SESSÃO
     session_start();
     
     //GRAVA AS VARIÁVEIS NA SESSÃO
     $_SESSION[id]    =   $id;
     $_SESSION[nome]  =   $nome;
     
     //REDIRECIONA PARA A PÁGINA 
     Header("Location: resultado.php");
}//FECHA ELSE
?>

Agora ele envia-me para o RESULTADO.PHP

PHP:
<?
//VERIFICA SE A SESSÃO ESTÁ ATIVA
require_once("verifica.php");

//CONECTA COM O BANCO DE DADOS
require_once("conecta.php");

//SQL
$sql   =   mysql_query("
           SELECT A.ID_PRODUTO, A.PRODUTO, A.QTDE_PRODUTO
           FROM tb_produtos A
           WHERE A.ID_USUARIO = '".$_SESSION[id]."'") or die("ERRO NO SQL");

//LINHAS AFETADAS PELA CONSULTA
$row  =  mysql_num_rows($sql);

//TITULO
echo "Usuário logado no sistema: ".$_SESSION[nome];

 //TABELA
 echo "<br><br>";
 echo "<table border='1' cellpading='0' cellspacing='0'>";
 echo "<tr>";
 echo "<td>Código</td>";
 echo "<td>Produto</td>";
 echo "<td>Qtd</td>";
 echo "</tr>";

//EXIBE OS DADOS CORRESPONDENTES AO USER
for($i=0; $i<$row; $i++){
     $prod_id    =   mysql_result($sql, $i, "ID_PRODUTO");
     $prod_nome  =   mysql_result($sql, $i, "PRODUTO");
     $prod_qtde  =   mysql_result($sql, $i, "QTDE_PRODUTO");
     
     echo "<tr>";
     echo "<td>$prod_id</td>";
     echo "<td>$prod_nome</td>";
     echo "<td>$prod_qtde</td>";
     echo "</tr>";
}//FECHA FOR

echo "</table>";

echo "<br><br><a href='logout.php'>Logout</a>";
?>

O problema é que eu nao queria que ele abri-se uma pagina nova queria que ele exibi-se tudo no index.php
 
metes as validações de sessão no index, se for admin executas uma coisa, se for cliente executas outra, não estou a perceber o problema sinceramente
 
A minha duvida é mesmo essa é se o utilizador tiver logado aparecer o nome do utilizador, senão aparece o form de Login, eu sei que isto tem que ter uma variavel para saber se o utilizador já esta logado ou não e é isso que eu nao sei :/
 
tens que usar uma variavel de sessao que quando o utilizador faz login e carregado p essa variavel o nome com que ele fez login por exemplo, depois dai e so escreveres a variavel onde tu quiseres, por exemplo:

echo "Bem vindo".$_SESSION['login'];
 
antes de mais, não é $_SESSION[id], mas sim $_SESSION['id'], porque ID é texto

quanto ao problema, se tiver por exemplo, visitantes (os que não fazem login), utilizadores e administrador:

PHP:
if (isset($_SESSION['id'])) {
   if ($_SESSION['admin']==1) {
      echo "Está logado como administrador";
   }
   else {
      echo "bem vindo".$_SESSION['username'];
   }
}
else {
   //escreve formulário de login
}


isto é só exemplo, não faças copy+paste
basicamente: primeiro verifica se existe a váriavel $_SESSION['id'] usando a função isset. se existir quer dizer que fez login, e então, se a váriavel $_SESSION['admin'] for igual a 1 quer dizer que é o administrador, senão é um utilizador normal, e escreve uma mensagem de boas vindas

se $_SESSION['id'] nao existir então quer dizer que não fez login e mostra o formulário de login

NOTA: para isto funcionar correctamente, tens que usar a função session_destroy quando o utilizador/admin fizer logout. isso vai eliminar todas as variaveis $_SESSION, e é necessário porque senão a função isset continuaria a detectar a variavel e assumia que tinha feito login, mesmo sem o ter feito
 
Vou postar aqui o que eu já fiz

Pagina index.php

PHP:
<body>
<?php
if (!isset($_SESSION['id'])) {
    if ($_SESSION['tipo],'Admin')!==0) {
        echo "Está logado como administrador";
        }
        else {
            echo "bem vindo".$_SESSION['nome'];
            }
        }
        else {
        echo "
 <td width="303"><form id="form1" name="form1" method="post" action="login.php">
                            <table width="293" border="0" cellspacing="0" cellpadding="0">
                              <tr>
                                <th width="5" scope="col">&nbsp;</th>
                                <th width="68" scope="col">&nbsp;</th>
                                <th width="180" scope="col">&nbsp;</th>
                                <th width="40" scope="col">&nbsp;</th>
                                </tr>
                              <tr>
                                <td>&nbsp;</td>
                                <td><span class="style4">username:</span></td>
                                <td><input name="cliente" class="username-box-home" type="text" /></td>
                                <td>&nbsp;</td>
                                </tr>
                              <tr>
                                <td>&nbsp;</td>
                                <td>&nbsp;</td>
                                <td>&nbsp;</td>
                                <td>&nbsp;</td>
                                </tr>
                              <tr>
                                <td>&nbsp;</td>
                                <td><span class="style4">password:</span></td>
                                <td><input name="pass" class="password-box-home" type="text" /></td>
                                <td>&nbsp;</td>
                                </tr>
                              <tr>
                                <td>&nbsp;</td>
                                <td>&nbsp;</td>
                                <td>&nbsp;</td>
                                <td>&nbsp;</td>
                                </tr>
                              <tr>
                                <td>&nbsp;</td>
                                <td>&nbsp;</td>
                                <td><label></label></td>
                                <td><input type=image src="images/ok.gif" width="40" height="20"></td>
                                </tr>
                            </table>
                              </form> ";
                    }
                    ?>
</body>
A base de dados:

PHP:
CREATE TABLE `tlogin` (
    `id` int(3) NOT NULL auto_increment,
    `nome` varchar (20) default NULL,
    `login` varchar (20) default NULL,
    `senha` varchar (20) default NULL,
    `tipo` enum('Admin','user') NOT NULL default 'user',
    PRIMARY KEY (`id`)
    )
O Login.php

PHP:
<?php
session_start();

$conn = mysql_connect("localhost","utilizador","password");
$banco = mysql_select_db("basededados");

$nome=$_POST['cliente'];
$password=$_POST['pass'];
$resultado=mysql_query("SELECT * FROM tlogin WHERE login='$nome' and senha='$password'");
$num=mysql_num_rows($resultado);
    if ($num<1)
        {
        echo '<script>
                d=window.top;
                d.location="index.php?n";
                </script>';
        } else {
        $_SESSION['id']=mysql_result($resultado,0,'id');
        $_SESSION['login']=mysql_result($resultado,0,'login');
        $_SESSION['nome']=mysql_result($resultado,0,'nome');
        $_SESSION['tipo']=mysql_result($resultado,0,'tipo');
        echo "<script>
                d=window.top;
                d=location='index.php';
                </script>";
                
        }
?>
Mas quando vou tentar não aparece nada no index.php :/ alguem me ajuda agora? :|
 
Back
Topo