quinta-feira, 21 de março de 2019

TPW - 1ª parte da aula 7

<?php
// 0 ?registar&username
if(isset($_GET['registar'])){
    require_once("../connection.php");
    $username=addslashes($_GET['username']);
    $table="users";
    $sql="SELECT * FROM $table WHERE username='$username'";
    $query=mysqli_query($connect, $sql) or die("erro1");
    $total=mysqli_num_rows($query);
    if($total==0){
          // 1 regista quando não existir username na tabela
        // gerar o token
        $chars = ' 2_34578ABCEFJK_LMSTUZacefghuvyz';
        $maxChars=strlen($chars);
        $token = '';
        for ($i = 0; $i < 20; $i++)
            $token .= $chars[mt_rand(1, $maxChars)];     
        $sql="INSERT INTO $table (username, token) VALUES ('$username', '$token')";
        mysqli_query($connect, $sql) or die("erro2");     
     
        // enviar um email ao user mas neste caso simulamos com um página nova com um link
        $caminho="http://localhost:8080/aula7/users/registoUserEmail.php?username=$username&token=$token";
     
    } else {
           // 2 não regista se existir e informa que já está registado através da variavel repetido
        $caminho="registar.php?repetido";
    }
header("Location:$caminho");
}
?>
    <!DOCTYPE html>
    <html lang="pt">

    <head>
        <meta charset="UTF-8">
        <title>Registo de novo utilizador</title>
    </head>

    <body>
   
       <?php if(isset($_GET['repetido'])){?>   
        <div>O utilizador já se encontra registado.</div>     
        <?php } ?>
     
        <div>
            <h3>Novo registo de utilizador</h3>
            <form>
                <input type="text" name="username" required placeholder="Email" autofocus>
                <input type="submit" name="registar" value="Registar User">
            </form>
        </div>
    </body>

    </html>


*************************************************************************

<?php

# registoUserEmail.php
$username=$_GET['username'];
$token=$_GET['token'];
$caminho="http://localhost:8080/aula7/users/confirmarUser.php?username=$username&token=$token";
?>

<a href="<?php echo $caminho;?>">Clique aqui para ativar o seu registo</a>

************************************************************************

<?php
# confirmarUser.php
# gerar password
$username=$_GET['username'];
$token=$_GET['token'];
$table="users";
require_once("../connection.php");
$sql="SELECT id FROM $table WHERE username LIKE '$username' AND token LIKE '$token' AND estado=0";
$testeQuery=mysqli_query($connect, $sql);
$totalTeste=mysqli_num_rows($testeQuery);
# se o estado da tabela users for igual 0 que significa que o token não foi usado
if($totalTeste==1){ 
    // posso ativar  
    # registar passwords
    $chars = ' 2_34578ABCEFJK_LMSTUZacefghuvyz';
    $maxChars=strlen($chars);
    $password = '';
    for ($i = 0; $i < 8; $i++)
            $password .= $chars[mt_rand(1, $maxChars)];
    $table="passwords";    
    $sql="INSERT INTO $table (psw) VALUES ('$password')";
    mysqli_query($connect, $sql) or die("erro");
    $idPassword=mysqli_insert_id($connect); // recupera o id gerado no auto incremento da tabela passwords    
    # registar users_passwords
    $table="users_passwords";
    $fetchUsers=mysqli_fetch_assoc($testeQuery);
    $idUser=$fetchUsers['id'];
    $sql="INSERT INTO $table (idUser, idPassword) VALUES ($idUser, $idPassword)";    
    mysqli_query($connect, $sql) or die("erro");
    
    # registar users_privilegios
    $table="users_privilegios";
    $idPrivilegio=2;
    $sql="INSERT INTO $table (idUser, idPrivilegio) VALUES ($idUser,$idPrivilegio)";
    mysqli_query($connect, $sql);
    
    # alterar o estado do user para 1
    $table="users";
    $sql="UPDATE $table SET estado = 1 WHERE id=$idUser";
    mysqli_query($connect, $sql);    
    // enviar por email a confirmação do registo e a password ao user
    $msg="ok";
    
}else{
    // já foi ativado
    $msg="nok";
}
header("Location:http://localhost:8080/aula7/login.php?msg=$msg");
?>

Sem comentários:

Enviar um comentário