Jump to content

registo


diokhan

Recommended Posts

Boas,

é possível fazer em php algo do género, uma pessoa faz o registo no site mas só pode fazer login quando o admin do site confirmar o registo?

basicamente a ideia é, quando o utilizador fizer o registo fica com o activo=0 e depois do admin confirmar o registo, o activo do utilizador passa a 1 e assim já tem acesso a fazer login,  antes do admin confirmar o registo não é possível efectuar o login.

?

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

eu tenho um campo na base de dados que é o ACTIVE que por defeito é 1, e pensei em usar esse campo para fazer esta ideia, se o registo fosse feito pelo utilizador o ACTIVE entrava como 0 e não deixava fazer login ate o admin mudar de ACTIVE=0 para ACTIVE=1.

e se fosse o admin a adicionar um utilizador o ACTIVE ja entrava como 1.

era esta a minha ideia inicial por assim dizer, porque pode existir outra solução melhor que a minha, e desde ja obrigado pela dica 😕

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

eu tenho assim no meu sistema:

register.php

<?php

echo"
<table>
<h2>Register:</h2><hr>
  <form action='admin/insere.php' method='POST'>
    <tr>
      <td>Name:</td>
      <td><input type='text' name='name'></td>
    </tr><tr>
      <td>User:</td>
      <td><input type='text' name='user'></td>
    </tr><tr>
      <td>Password:</td>
      <td><input type='password' name='password'></td>
    </tr><tr>
      <td>Repeat Password:</td>
      <td><input type='password' name='repeatpassword'></td>
    </tr><tr>
      <td>E-Mail:</td>
      <td><input type='text' name='email'></td>
    </tr><tr>
      <td><input type='hidden' name='level' value='1'></td>
    </tr><tr>
      <td><input type='hidden' name='active' value='0'></td>
    </tr><tr>
      <td colspan='2' align='center'>
        <input type='image' src='images/user.png' alt='New User' border='0' id='Submit_btn' value='New User'>
        <input type='image' src='images/cross_shield.png' alt='Clear' value='Clear'>
      </td>
    </tr> 
</form>
</table>";

?>

insere.php

<?php

require_once ('../../BioCantProject/functions.php');

$reg = new Registration;

if ($password == $repeatpassword){

$reg->SetName($name);
$reg->SetUsername($user);
$reg->SetPassword($password);
$reg->SetEmail($email);
$reg->SetAccessLevel($level);
$reg->SetActive($active);
$reg->SetRegister($register);

$error = $reg->InsertUserToSql();

if(!empty($error['2']))
{
echo $error['2'];
}

header('Location: ../../BioCantProject/index.php');

}else{
header('Location: ../../BioCantProject/index.php');
}
?>

e a parte da function que é necessario

class login extends Registration
{
	/**
	 * @return if falis return false if ok return session 
	 */
	function CheckLogin()
	{
		try {
		    $stmt = $this->dbh->prepare("SELECT NAME, ACCESS_LEVEL
				FROM user WHERE USER = :user AND PASSWORD = :password");
			$stmt->bindParam(':user', $this->Username);
			$stmt->bindParam(':password', $this->Password);
			$stmt->execute();
		} catch (PDOException $e) {
		    echo 'Query error: ' . $e->getMessage();
		}

		if($stmt->rowCount() > 0 )
		{	
			$result = $stmt->fetch(PDO::FETCH_BOTH);
			$_SESSION['USER'] = $this->Username;
			$_SESSION['NAME_USER'] = $result[0];
			$_SESSION['ACCESS_LEVEL'] = $result[1];

return true;
		}
		else
		{
			return false;
		}

	}
}

como faço agora para verificar se o ACTIVE é 0 ou 1 antes de efectuar o login? Que so posso deixar fazer o login se tiver o ACTIVE=1

PS: eu pensei em fazer uma coisa, na query SELECT do login colocava mais uma condição no WHERE, algo do género "ACTIVE = 1", é boa politica fazer assim? ou há outra forma melhor? ?

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

eu usei o WHERE ACTIVE=1 e ficou a funcionar, nao sei se é o mais correcto, mas funciona, é que eu preciso verificar se o ACTIVE ta a 0 ou a 1 antes de deixar efectuar o login, porque so quem tem ACTIVE=1 é que pode fazer o login, mas a tua resposta é boa, vai dar-me jeito quando fizer aparecer na tabela todos os users, e assim posso separar os que tao activos dos que estao inactivos 😕

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

No código PHP, não te poderei ajudar muito, até porque também me estou a iniciar nesta linguagem. Mas funcionalmente, poderei apoiar e sugerir que pegues no exemplo do elcsat e desenvolvas uma tabela, em conformidade com o valor obtido pelo ACTIVE.

  • Obtém todos os registos da tabela;
  • Faz um ciclo para cada selecção/registo;
  • Valida o valor de ACTIVE:
    • Se ACTIVE = 0 então desenha a linha da tabela em vermelho;
    • Se ACTIVE = 1 então desenha a linha da tabela em preto;

Se a minha explicação ainda te parece confusa, peço a alguém que tente traduzir para código (como disse, ainda estou a dar os primeiros passos no PHP). Entretanto, estarei a tentar desenvolver para depois postar aqui.

Link to comment
Share on other sites

eu vou deixar aqui o meu código caso ajude, e desde já agradeço a disponibilidade em ajudarem 😉

<?php

$dsn = 'mysql:dbname=***;host=localhost';
	$user = '***';
	$password = '***';

	try {
	    $dbh = new PDO($dsn, $user, $password);
	    
	} catch (PDOException $e) {
	    echo 'Connection failed: ' . $e->getMessage();
	}

$sql = "SELECT * FROM user";

echo'<table class="tabela">
    <tr>
        <th  align=center>
    		Name
        </th>
       	<th  align=center>
        	E-Mail
       	</th>
       	<th  align=center>
        	Access Level
       	</th>';
        		
/* Verifica nivel de acesso do utilizador. 
        			Apenas quem tem acesso de nivel 2 consegue visualizar estas opções. */
if ($_SESSION['ACCESS_LEVEL']==2){
       	echo'<th  align=center>
       			Active
       		</th>
       		<th  align=center>
       			Edit User
       		</th>
       		<th  align=center>
       			Delete User
       		</th>
       		</tr>';
       		}

foreach ($dbh->query($sql) as $row)
        {
        echo '<tr>
        	<td>';
        		print $row['NAME'];
        	echo'</td>
        	<td>';
        		print $row['EMAIL'];
        	echo'</td>
        	<td  align=center>';
        		print $row['ACCESS_LEVEL'];
        	echo'</td>';
        			
        	/* Verifica nivel de acesso do utilizador. 
        	Apenas quem tem acesso de nivel 2 consegue visualizar estas opções. */
        	if ($_SESSION['ACCESS_LEVEL']==2){
        	echo"
       			<td  align=center>";
        		print $row['ACTIVE'];
        		echo"</td>
        		<td align=center>
       				<a href=restrito.php?opcao=admin&op=users&ot=edit&id=$row[iD_USER]><img src=images/pencil.png border=0 align=center></a>
      			</td>
       			<td align=center>
       				<a href=restrito.php?opcao=admin&op=users&ot=delete&id=$row[iD_USER]><img src=images/cross.png border=0 align=center></a>
       			</td>";}
	echo'</tr>';
        }
         
        echo "</table>
        <table align=center>";
		if ($_GET['ot']=='edit'){
			include('edit_user.php');
		}elseif($_GET['ot']=='delete'){
			include('delete.php');
		}
        echo "</table>";
?>

eu não me importo de, em vez de ser o 0 a ficar a vermelho que seja a célula em que está o 0 que mude de cor, se for mais simples ?

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

Basta adicionares, onde te parece melhor a validação a ACTIVE. Para manter o que pediste inicialmente, eu colocaria no início de cada <TR>, justamente para que a linha inteira fique com as letras vermelhas:

[...]
foreach ($dbh->query($sql) as $row)
{
if ($row['ACTIVE']==0) {
	echo '<tr style="color:red">'
} else {
	echo '<tr>'
}
   echo '<td>';
[...]

Não testei o código.  😉

Link to comment
Share on other sites

eu vou testar e ja digo algo 😉

PS: testei e nao funciona, mas sei o motivo, por causa do css que tenho, ja tinha definido no css

.tabela td
{
background: #66FF99;
}

posso mudar a cor da letra, mas a cor de fundo não aceita por causa do css, para mudar só a cor da letra eu fiz e funciona:

if (($_SESSION['ACCESS_LEVEL']==2)AND ($row['ACTIVE']==0)){
        	echo"
       			<td class=tdactive><font color=red style='font-weight: bold'>";
        		print $row['ACTIVE'];
        		echo"</font>
        		</td>
        		<td align=center>
       				<a href=restrito.php?opcao=admin&op=users&ot=edit&id=$row[iD_USER]><img src=images/pencil.png border=0 align=center></a>
      			</td>
       			<td align=center>
       				<a href=restrito.php?opcao=admin&op=users&ot=delete&id=$row[iD_USER]><img src=images/cross.png border=0 align=center></a>
       			</td>";
        	}elseif(($_SESSION['ACCESS_LEVEL']==2)AND ($row['ACTIVE']==1))
        	{
        		echo"
       			<td><font style='font-weight: bold'>";
        		print $row['ACTIVE'];
        		echo"</font>

por enquanto tenho assim, é o básico e simples, mas funciona, se houver outra forma melhor para resolver eu altero e agradeço sugestões 😉

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

agora vou dificultar as coisas eu sei, mas por exemplo, se o ACTIVE for igual a 0 eu queria que o 0 fosse um "link" por assim dizer, e sempre que clico no 0 eu altero na base de dados o ACTIVE de 0 para 1, e vice versa, sempre que clicar no 1 mudo na base de dados para 0.

assim posso activar e desactivar os users de forma rápida e simples, sei que vou dar muitas voltas por causa disto mas pronts ?

PS: ou tao eu crio mais um botao para activar e desactivar os users, assim evito de usar o 0 e o 1 para clicar e alterar, o que seria mais simples e eficaz?

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

resolvido todos os problemas. deixo aqui o codigo caso alguem esteja interessado 😉

aqui apresento os dados:

if (($_SESSION['ACCESS_LEVEL']==2)AND ($row['ACTIVE']==0)){
        	echo"
       			<td class=tdactive>
       				<font color=red style='font-weight: bold'>";
        			print $row['ACTIVE'];
        		echo"</font>
        		</td>
        		<td>
        			<a href=restrito.php?opcao=admin&op=users&ot=active&id=$row[iD_USER]><img src=images/delete.png border=0 align=center></a>
        		</td>
        		<td align=center>
       				<a href=restrito.php?opcao=admin&op=users&ot=edit&id=$row[iD_USER]><img src=images/pencil.png border=0 align=center></a>
      			</td>
       			<td align=center>
       				<a href=restrito.php?opcao=admin&op=users&ot=delete&id=$row[iD_USER]><img src=images/cross.png border=0 align=center></a>
       			</td>";
        	}elseif(($_SESSION['ACCESS_LEVEL']==2)AND ($row['ACTIVE']==1))
        	{
        		echo"
       			<td>
       				<font style='font-weight: bold'>";
        			print $row['ACTIVE'];
        		echo"</font>
        	</td>
        	<td>
        		<a href=restrito.php?opcao=admin&op=users&ot=deactivate&id=$row[iD_USER]><img src=images/accept.png border=0 align=center></a>
        		</td>
        		<td align=center>
       				<a href=restrito.php?opcao=admin&op=users&ot=edit&id=$row[iD_USER]><img src=images/pencil.png border=0 align=center></a>
      			</td>
       			<td align=center>
       				<a href=restrito.php?opcao=admin&op=users&ot=delete&id=$row[iD_USER]><img src=images/cross.png border=0 align=center></a>
       			</td></tr>";
        	}
        }
        echo "</table>
        <table align=center>";
		if ($_GET['ot']=='edit'){
			include('edit_user.php');
		}elseif($_GET['ot']=='delete'){
			include('delete.php');
		}elseif($_GET['ot']=='deactivate'){
			include('deactivate.php');
		}elseif($_GET['ot']=='active'){
			include('active.php');
		}

        echo "</table>";

e aqui altero os dados e volto a pagina anterior:

$dsn = 'mysql:dbname=***;host=localhost';
	$user = '***';
	$password = '***';

	try {
	    $dbh = new PDO($dsn, $user, $password);
	    
	} catch (PDOException $e) {
	    echo 'Connection failed: ' . $e->getMessage();
	}
try{
	$stmt = $dbh->prepare("UPDATE user SET ACTIVE = 0 WHERE ID_USER = :id");

		$stmt->bindParam(':id', $_GET['id']);
		$stmt->execute();

	}
catch ( PDOException $e )
	{ echo "Error: ".$e->getMessage(); 
	}

header('Location: ../BioCantProject/restrito.php?opcao=admin&op=users');

este é o codigo para desactivar, mas para activar é so trocar o 0 por 1,

$stmt = $dbh->prepare("UPDATE user SET ACTIVE = 1 WHERE ID_USER = :id");

e obrigado pela ajuda 😉

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

Gostava de sugerir algumas melhorias no código:

if (($_SESSION['ACCESS_LEVEL']==2){
echo"
<td class=tdactive>
<font color=red style='font-weight: bold'>";
print $row['ACTIVE'];
echo"</font>
</td>
<td>"
if ($row['ACTIVE']==0)) {
	echo "<a href=restrito.php?opcao=admin&op=users&ot=change&act=0&id=$row[iD_USER]><img src=images/delete.png border=0 align=center></a>"
} else {
	echo "<a href=restrito.php?opcao=admin&op=users&ot=change&act=1&id=$row[iD_USER]><img src=images/accept.png border=0 align=center></a>"
}
echo "</td>
<td align=center>
<a href=restrito.php?opcao=admin&op=users&ot=edit&id=$row[iD_USER]><img src=images/pencil.png border=0 align=center></a>
</td>
<td align=center>
<a href=restrito.php?opcao=admin&op=users&ot=delete&id=$row[iD_USER]><img src=images/cross.png border=0 align=center></a>
</td>";
}
}
echo "</table>
<table align=center>";
if ($_GET['ot']=='edit'){
include('edit_user.php');
}elseif($_GET['ot']=='delete'){
include('delete.php');
}elseif($_GET['ot']=='change'){
include('change.php');
}

echo "</table>";

change.php

$dsn = 'mysql:dbname=***;host=localhost';
$user = '***';
$password = '***';

try {
$dbh = new PDO($dsn, $user, $password);

} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
try{
if($act==0) {
	$stmt = $dbh->prepare("UPDATE user SET ACTIVE = 1 WHERE ID_USER = :id");
} else {
	$stmt = $dbh->prepare("UPDATE user SET ACTIVE = 0 WHERE ID_USER = :id");
}

$stmt->bindParam(':id', $_GET['id']);
$stmt->execute();

}
catch ( PDOException $e )
{ echo "Error: ".$e->getMessage();
}

header('Location: ../BioCantProject/restrito.php?opcao=admin&op=users');

O que achas?

O código não foi testado, nem sequer posso garantir que não existam erros...No PHP apenas dou babysteps😉

Link to comment
Share on other sites

se bem percebi a ideia, tu juntas-te o que eu fiz em dois ficheiros em apenas um, é uma hipótese, e assim ficava com menos ficheiros, não vejo erros assim numa análise por cima, deve estar a funcionar, vou testar, e obrigado pela sugestão 😉

PS: a tua sugestão para alterar o código funciona, só há uma crise, qualquer valor tanto 1 como 0 aparece a vermelho, mas é algo que eu vou tentar alterar, obrigado pela ajuda 😉

PS2: já alterei o que disse no PS anterior, deixo aqui o código alterado

if ($_SESSION['ACCESS_LEVEL']==2)
        	{
        echo"
	        <td>";
	        if ($row['ACTIVE']==0) 
	        {
	        echo "<font color=red style='font-weight: bold'>";
	        	print $row['ACTIVE'];
	        echo "</font>";
	        } else {
	        echo "<font style='font-weight: bold'>";
	        	print $row['ACTIVE'];
	        echo "</font>";
        		}
        	}

...Join the dark side...and get a free cookie...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.