Regitrace uživatelů - čast. 4 ( automatické přihlášení, obnovení hesla, aktivace účtu přes e-mail )

 2012-09-25 00:00:00
 Dmitry Burobin

Toto je pokračování sérií článků o registraci uživatelů. Doplníme registraci o: automatické přihlášení, obnovení hesla a aktivaci účtu přes e-mail.

Aktivace účtu.

Zaprvé musíme přidat 3 pole do tabulky users. email - e-mail nového uživatele, activation - stav, zda je účet aktivován nebo ne ( 0 - není, 1 - aktivován) a date - datum a čas.
phpmyadmin

registration.php

Do souboru registration.php doplníme pole pro zadání emailové adresy.

<div><input type="text" name="login"></div>
<!--  Do 
textového pole se jménem login name="login" nový uživatel zadá svůj login  -->


<!-----------------
NOVÉ------------------------->


    <
div><label for="email">Váš E-mail:</label></div>
    <
div><input name="email" type="text"></div>
<!--  Do 
textového pole se jménem email name="email" nový uživatel zadá svůj platný email  -->


<!-----------------
KONEC NOVÉHO------------------------->


    <
div><label for="avatar">AvatarObrázek musi být ve formatu jpggif nebo png:</label></div>

pridavani.php

Soubor pridavani.php doplníme o kontrolu e-mailu a o posílaní dopisu s aktivačním odkazem. Děláme to proto, aby jsme ověřili, že emailova schránka patří uživateli.

<?php
                unset($heslo);
        }
    }
//uložime do proměnné $heslo heslo, které uživatel zadál ve formuláři, 
//a hned ji ošetříme několika funkcemi, aby ani tagy ani skripty nefungovali a odstraníme mezery ( trim ) 
//Jestli je proměnná prázdna tak ji odstraníme.


/***************NOVÉ*********************/


    
if(isset($_POST['email']))
    {
        
$email stripcslashes(htmlspecialchars(trim($_POST['email'])));
        if(
$email == '')
        {
                unset(
$email);
        }
    }
//uložime do proměnné $email email, který uživatel zadál ve formuláři, 
//a hned ji ošetříme několika funkcemi, aby ani tagy ani skripty nefungovali a odstraníme mezery ( trim ) 
//Jestli je proměnná prázdna tak ji odstraníme.



// ověříme email regulárním výrazem, protože potřebujeme platný email pro aktivací účtu
    
if(!preg_match("/^[a-z0-9_-]{1,20}+(\.){0,20}+([a-z0-9_-]){0,20}@(([a-z0-9-]+\.)+(com|net|org|mil|".
    
"edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-".
    
"9]{1,3}\.[0-9]{1,3})$/is",$email)) 
    {
        exit    (
"E-mail není platný!");
    }


/***************KONEC NOVÉHO*********************/



//V případě, že jakákoli proměnná je prázdna, zastavíme skript a vyvedeme hlášení    
    
if(empty($name) or empty($login) or empty($heslo) or empty($heslo))
?>
<?php
    $q1 mysql_query("SELECT * FROM `users` WHERE `login`='".$login."'");
    if(!
$q1) { echo mysql_error() . ' - ' mysql_errno(); }
    else {
//Jestli existuje tak vyvedeme hlášení
        
if(mysql_num_rows($q1)==1){
            exit(
"Uživatelské jméno je obsazené, vyberte si jiné");
        } else {
            
            
/***************NOVÉ*********************/
            
            
//V případě, že není tak vložíme data o novém uživateli do databáze
// !!! NEZAPOMEŇTE VLOŽIT DO DATABÁZE EMAIL A DATUM !!!
            
$q2 mysql_query("INSERT INTO `users`(`name`,`login`,`pass`,`avatar`,`email`,`date`) VALUES('".$name."','".$login."','".$heslo."','".$avatar."','".$email."', NOW())");
            if(!
$q2) { echo mysqll_error() . ' - ' mysql_errno(); }
            else {
                
// vybereme identifikátor nového uživatele a pomocí něj vytvoříme kód aktivace účtu
                
$q3 mysql_query("SELECT `id` FROM `users` WHERE `login`='".$login."'");
                
$r3 mysql_fetch_assoc($q3);
                
// do proměnné $activation zašifrujeme identifikátor a přihlášovací jméno
                
$activation md5($r3['id']).md5($login);
                
// pošleme uživateli e-mail s aktivačním kódem
                
$_to $email;
                
                
$_subject "Potvrzení registrace";
                
                
$_message "<div style=\"font-size:11pt; font-family:Times New Roman; color:black; padding:5px;\"><div>Dobrý den,</div>";
                
$_message .= "<div style=\"text-indent:10px;\">děkuji Vám za registraci na portálu koding.cz. Pro aktivaci vašeho účtu klikněte na odkaz: http://localhost/registration/activation.php?login=".$login."&amp;code=".$activation.".</div>";
                
$_message .= "<div style=\"margin:10px 0;\">Vaše uživatelské jméno: ".$login."</div>";
                
$_message .= "<div>S pozdravem, administrace koding.cz</div>";
                
                
$_headers  'MIME-Version: 1.0' "\r\n";
                
$_headers .= 'Content-type: text/html; charset=utf-8' "\r\n";
                
$_headers .= 'From: <info@koding.cz>' "\r\n";
    
                if(@
mail($_to'=?UTF-8?B?'.base64_encode($_subject).'?='$_message$_headers))
                {
                    echo 
"Za chvíli obdržíte e-mailovou zprávu s odkazem pro potvrzení registraci. Pozor! Odkaz je platný 1 hodinu. <a href=\"index.php\">Hlavní stránka</a>";
                } else {
                    echo 
"E-mail nebyl odeslán. Zkuste to za 5 minut.";
                }
            
            }
            
            
/***************KONEC NOVÉHO*********************/


        
}
    }
    
} else { 
header("Location: ".$_SERVER['SERVER_ROOT']."registration.php"); }
?>
Teď když se uživatel zaregistruje, dostané zprávu s aktivačním odkazem a jakmíle na něj klikné, pole activation v tabulce users se změní z 0 na 1.

activation.php

Vytvoříme samotný soubor activation.php, který bude aktivovat uživatele.

<?php

//Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce )        
require_once 'db.php';

if(isset(
$_GET['login']) AND isset($_GET['code']))
{    
    
$login stripslashes(htmlspecialchars(trim($_GET['login'])));
    
$code htmlspecialchars(trim($_GET['code']));
    
// Vybereme identifikátor uživatele abysme vytvořili aktivační kód
    
$query mysql_query("SELECT `id` FROM `users` WHERE `login`='".$login."'");
    if(
mysql_num_rows($query)!=0)
    {
        
$result mysql_fetch_assoc($query);
        
$activation md5($result['id']).md5($login);
        
// Porovnáme aktivační kód, který uživatel odesíla kliknutím na odkaz v e-mailu s nově vytvořeným
        
if($activation == $code)
        {
            
// Pokud tyto kódy odpovídají, aktualizujeme tabulku users a nastavíme pole activation na 1. ( 1 - uživatel aktivován, 0 - uživatel není aktivován )
            
$query1 mysql_query("UPDATE `users` SET `activation`=1 WHERE `login`='".$login."'");
            if(!
$query1) { echo mysql_error() . " - " mysql_errno(); }
            else {
                echo 
"Váš e-mail byl úspěšně potvrzen, teď se můžete <a href=\"index.php\">přihlásit</a>.";
            }
        } else {
            echo 
"Váš e-mail nebyl potvrzen <a href=\"index.php\">Hlavní stránka</a>";
        }
    } else {
        exit(
"Login a aktivační kód neodpovídají");
    }
} else {
    exit(
"Nemáte co tady dělat.");
}

// Ještě odstraníme uživatele, kteři neaktivovali e-mail do 1 hodiny
// Vybereme jejich obrázky, abysme je následně odstranili.
$query2 mysql_query("SELECT `avatar` FROM `users` WHERE `activation`=0 AND UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 3600");
if(
mysql_num_rows($query2) > 0)
{
// projdeme cyklusem všechny záznamy
    
while($result2 mysql_fetch_assoc($query2))
    {
// pokud nemají vlastní obrázek, tak nic nebudeme dělat
            
if($result2['avatar'] == 'no_avatar.jpg')
            {
                
$nic '';
            } else {
// Jinak odstraníme obrázek
                
unlink("avatar/".$result2['avatar']);
            }
    }
// Odstraníme záznamy z databáze
    
mysql_query("DELETE FROM `users` WHERE `activation`=0 AND UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 3600");

?>

overeni.php

Máme aktivovaného uživatele, teď potřebujeme omezit přístup všem ostatním, protože zatím se ještě může přihlásit neaktivovaný uživatel. Otevřeme soubor overeni.php a doplníme příkaz pro vybíraní dat o uživateli:

<?php
// a použijí k tomu md5, pak se ničeho nedocíli. Můžete taky přidat symboly na začátku nebo uprostřed hesla.          
    
$heslo    $heslo."g5ds8";

            
/***************NOVÉ*********************/


// Vypišeme z databáze veškera data o uživateli s zadaným loginem a heslem
    
$q1 mysql_query("SELECT * FROM `users` WHERE `login`='".$login."' AND `pass`='".$heslo."' AND `activation`=1");
    
// Je vhodné doplnit tuto kontrolu do jiných podobných příkazů    
    
/***************KONEC NOVÉHO*********************/
    
    
if(!$q1) { echo mysql_error() . ' - ' mysql_errno(); }
?>

Obnovení hesla.

V případě, že uživatel zapomeněl heslo, doplníme na hlavní stránce odkaz pro obnovení hesla. Takže otevřeme index.php

        echo '<div><input type="password" name="heslo" ></div>';
    }
           
echo 
'
<div><input name="save" type="checkbox" value="1">Zapamatovat mě.</div>

<!--------------NOVÉ---------------------->

<div><input name="autovstup" type="checkbox" value="1">Automatickié přihlášení.</div>

<!--------------KONEC NOVÉHO---------------------->

<div><input type="submit" name="go" value="Ok"></div>
</form>'
;

echo 
"Ahoj návtěvníku. Tyto <a href=\"#\">stránky</a> můžou navštívit jen registrované uživatele";    
echo 
'<div class="back"><a href="registration.php">registrace</a></div>'

/*--------------NOVÉ----------------------*/

echo '<br><div class="back"><a href="new_pass.php">Zapomněli jste heslo?</a></div>';   

/*--------------KONEC NOVÉHO----------------------*/
    
} else {
//V případě, že v databázi je obrázek u uživatele s heslem a loginem, které máme uložené v COOKIEc?>
a hned taký přidáme checkbox pro automatické přihlášení.

new_pass.php

Pokud uživatel zapoměl heslo, pak na této stránce zadá svoje přihlášovací jméno a e-mail, ověříme, zda login a e-mail jsou v databázi a odpovídají stejnému uživateli. Když ano tak mu pošleme nové heslo.

<?php
//Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce )        
require_once 'db.php';

if(isset(
$_POST['submit']))
{
    
    if(isset(
$_POST['login']))
    {
        
$login stripcslashes(htmlspecialchars(trim($_POST['login'])));
        if(
$login == '')
        {
                unset(
$login);
        }
    }
    
    if(isset(
$_POST['email']))
    {
        
$email stripcslashes(htmlspecialchars(trim($_POST['email'])));
        if(
$email == '')
        {
                unset(
$email);
        }
    }
    
    if(!
preg_match("/^[a-z0-9_-]{1,20}+(\.){0,20}+([a-z0-9_-]){0,20}@(([a-z0-9-]+\.)+(com|net|org|mil|".
    
"edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-".
    
"9]{1,3}\.[0-9]{1,3})$/is",$email)) 
    {
        exit    (
"E-mail není platný!");
    }
    
    if(empty(
$login) or empty($email)) 
    {
        exit(
"Vyplňte všechna pole");
    }
    
    if(isset(
$login) AND isset($email))
    {
        
// Vybereme z databáze identifikátor uživatele s zadaným loginem a emailem a ověříme, zda je jeho účet aktivován
        
$query mysql_query("SELECT `id` FROM `users` WHERE `login`='".$login."' AND `email`='".$email."' AND `activation`=1");
        if(
mysql_num_rows($query)!=0)
        {
// Vygenerujeme nové heslo, do proměnné $date uložíme dnešní datum a čas
            
$date date('YmdHis');
// použijeme md5 šifrování
            
$new_password md5($date);
// vybereme 6 symbolů
            
$new_password substr($new_password,2,6);
// Zašifrujeme ho jako obvykle a uložíme do DB        
            
$new_password_enc strrev(md5($new_password))."g5ds8";
            
$query1 mysql_query("UPDATE `users` SET `pass`='".$new_password_enc."' WHERE `login`='".$login."'");
            if(!
$query1) { echo mysql_error() . " - " mysql_errno(); }
            else {
// Pošleme uživateli e-mail s novým heslem                
                
$_to $email;
                
                
$_subject "Obnovení hesla";
                
                
$_message "<div style=\"font-size:11pt; font-family:Times New Roman; color:black; padding:5px;\"><div>Dobrý den,</div>";
                
$_message .= "<div style=\"margin:10px 0;\">Váše nové heslo je: ".$new_password."</div>";
                
$_message .= "<div>S pozdravem, administrace koding.cz</div>";
                
                
$_headers  'MIME-Version: 1.0' "\r\n";
                
$_headers .= 'Content-type: text/html; charset=utf-8' "\r\n";
                
$_headers .= 'From: <info@koding.cz>' "\r\n";
    
                if(@
mail($_to'=?UTF-8?B?'.base64_encode($_subject).'?='$_message$_headers))
                {
                    echo 
"E-mail s novým heslem byl odeslán. <a href=\"index.php\">Hlavní stránka</a>";
                } else {
                    echo 
"E-mail nebyl odeslán. Zkuste to za 5 minut. <a href=\"index.php\">Hlavní stránka</a>";
                }
    
            }
            
        } else {
            exit(
"Uživatel s tímto e-mailem neexistuje.");
        }
    }
    
} else {
echo 
'
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <title>Nové heslo</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
<h2>Obnovit heslo</h2>
<form action="" method="POST">

<div><label for="login">Váš login:</label></div>
<div><input type="text" name="login"></div>

<div><label for="email">Váš e-mail:</label></div>
<div><input type="text" name="email"></div>

<div><input type="submit" name="submit" value="Odeslat"></div>

</form>
</body>
</html>
'
;
}
?>

Automatické přihlášení.

Pokud si člověk zaškrtné checkbox pro automatické přihlášení do COOKIE přidame hodnotu auto, která se bude rovnat yes auto = "yes". Pak při načítaní stránky se hned vytvoří proměnné a jejich hodnoty se přiřadí session. Otevřte soubor overeni.php a doplňte:

<?php
// Dále uložime data do COOKIE, pro pozdější přihlášení                
// POZOR!!! DATA V COOKIE NEJSOU ŠIFROVÁNÁ, DĚLEJTE TO NA ZÁKLADĚ VLASTNÍHO UVÁŽENÍ            
            
if($_POST['save'] == 1
            {
// Jestli uživetel chce, aby jeho data byla uložena pro pozdější přihlášení, pak uložime je do COOKIE souboru prohlížeče 
                
setcookie("login"$_POST['login'], time()+9999999);
                
setcookie("password"$_POST['heslo'], time()+9999999);
                
setcookie("id"$r1['id'],    time()+9999999);
            }   
            
            if(isset(
$_POST['autovstup']))
            {
// Pokud se uživatel chce přihlášovat automatický                 
                
setcookie("auto""yes"time()+9999999);
                
setcookie("login"$_POST['login'], time()+9999999);
                
setcookie("password"$_POST['heslo'], time()+9999999);
                
setcookie("id"$r1['id'], time()+9999999);
            }                                    
?>

index.php.

V souboru index.php potřebujeme ověřit, zda už není proměnná COOKIE s hodnotou auto.

<?php
//Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce )    
require_once 'db.php';
 
 
/***************NOVÉ*********************/
 
// Pokud v COOKIE jsou proměnné pro automatické přihlášení 
if (isset($_COOKIE['auto']) AND isset($_COOKIE['login']) AND isset($_COOKIE['password']))
{
    if (
$_COOKIE['auto'] == 'yes'
    { 
// Nadefinujeme hned potřebné proměnné SESSION
        
$_SESSION['heslo'] = strrev(md5($_COOKIE['password']))."g5ds8"
        
$_SESSION['login'] = $_COOKIE['login'];
        
$_SESSION['id'] = $_COOKIE['id'];
    }        
}
 
/***************KONEC NOVÉHO*********************/
?>

Odhlášení.

Teď, aby jsme se mohli odhlásit potřebujeme vynulovat hodnotu auto u COOKIE. Do souboru index.php dopište:

<?php
if($_GET['action']=='odhlasit_se'){

    
$_SESSION['login']='';
    
$_SESSION['heslo']='';
    
$_SESSION['id']='';
    unset(
$_SESSION['login']);
    unset(
$_SESSION['heslo']);
    unset(
$_SESSION['id']);
    
/***************NOVÉ*********************/

    
setcookie("auto"""time()+9999999);
    
/***************KONEC NOVÉHO*********************/

}
?>

update_user.php

Taktéž potřebujeme aktualizovat COOKIE jestli došlo ke změně logina nebo hesla v souboru update_user.php

<?php
// Jestli změna proběhla vpořádku taktéž musíme aktualizovat tabulku se zprávami, kde aktualizujeme jméno odesílatele
                            
$query2 mysql_query("UPDATE `message` SET `odesilatel`='".$login."' WHERE `odesilatel`='".$old_login."'");
// Uložíme nové přihlášovací jméno do sessions
                            
$_SESSION['login'] = $login

/***************NOVÉ*********************/

// Aktualizujeme login v COOKIE proměnné, pokud je. 
                            
if(isset($_COOKIE['login'])) 
                            {
                                
setcookie("login"$logintime()+9999999);
                            }
                            
/***************KONEC NOVÉHO*********************/                            
                            
                            
echo "<script>alert('Změna proběhla vpořádku.')</script>";
                            
header("Refresh: 0; url=uzivatel.php?id=".$_SESSION['id']."");
?>
<?php
                    if(!$query3) { echo mysql_error() . " - " mysql_errno(); }    
                    else {
// Uložíme nové heslo do sessions
                        
$_SESSION['heslo'] = $heslo;
                        
                        
/***************NOVÉ*********************/

// Aktualizujeme heslo v COOKIE proměnné, pokud je. 
                            
if(isset($_COOKIE['password'])) 
                            {
                                
setcookie("password",$_POST['heslo'], time()+9999999);
                            }
                            
/***************KONEC NOVÉHO*********************/        

                        
                        
echo "<script>alert('Změna proběhla vpořádku.')</script>";
                        
header("Refresh: 0; url=uzivatel.php?id=".$_SESSION['id']."");
?>

Závěr

Je to vše. Doufám, že se Vám tato sírie článků líbila, možná, že přidám ještě neco, kdyby Vás něco napadlo tak napište v komentářích.

Systém Orphus
Napište komentář.
Celkem komenrářů(132)
Ronweix - 2017-10-21  21:42:00
 Noprescriptiondrugs [url=http://tadalaf20mg.com]cialis[/url] Cialis Lilly Icos Tadalafil
Ronweix - 2017-10-21  21:41:59
 Noprescriptiondrugs [url=http://tadalaf20mg.com]cialis[/url] Cialis Lilly Icos Tadalafil
Ronweix - 2017-10-21  21:41:57
 Noprescriptiondrugs [url=http://tadalaf20mg.com]cialis[/url] Cialis Lilly Icos Tadalafil
Ronweix - 2017-10-21  21:41:55
 Noprescriptiondrugs [url=http://tadalaf20mg.com]cialis[/url] Cialis Lilly Icos Tadalafil
LarExaf - 2017-10-20  20:18:36
 Viagra Sildenafil Citrate Tablets Zithromax Vitamin Interactions Gunstige Kamagra [url=http://cheapvia25mg.com]viagra[/url] Kamagra Consegna Veloce
LarExaf - 2017-10-20  20:18:34
 Viagra Sildenafil Citrate Tablets Zithromax Vitamin Interactions Gunstige Kamagra [url=http://cheapvia25mg.com]viagra[/url] Kamagra Consegna Veloce
LarExaf - 2017-10-20  20:18:33
 Viagra Sildenafil Citrate Tablets Zithromax Vitamin Interactions Gunstige Kamagra [url=http://cheapvia25mg.com]viagra[/url] Kamagra Consegna Veloce
LarExaf - 2017-10-20  20:18:32
 Viagra Sildenafil Citrate Tablets Zithromax Vitamin Interactions Gunstige Kamagra [url=http://cheapvia25mg.com]viagra[/url] Kamagra Consegna Veloce
Ronweix - 2017-10-16  18:50:24
 Pharmacy Online Usa Male Ed Pharmacy Amoxil Bon [url=http://viaonlineusa.com]online pharmacy[/url] For Sale Isotretinoin Diclofenac Online Pharmacy Us No Rx Viagra Natural Para Mujeres Recetas
Ronweix - 2017-10-16  18:50:22
 Pharmacy Online Usa Male Ed Pharmacy Amoxil Bon [url=http://viaonlineusa.com]online pharmacy[/url] For Sale Isotretinoin Diclofenac Online Pharmacy Us No Rx Viagra Natural Para Mujeres Recetas
Ronweix - 2017-10-16  18:50:21
 Pharmacy Online Usa Male Ed Pharmacy Amoxil Bon [url=http://viaonlineusa.com]online pharmacy[/url] For Sale Isotretinoin Diclofenac Online Pharmacy Us No Rx Viagra Natural Para Mujeres Recetas
Ronweix - 2017-10-16  18:50:20
 Pharmacy Online Usa Male Ed Pharmacy Amoxil Bon [url=http://viaonlineusa.com]online pharmacy[/url] For Sale Isotretinoin Diclofenac Online Pharmacy Us No Rx Viagra Natural Para Mujeres Recetas
Ronweix - 2017-10-15  15:38:28
 Viagra France Pharmacie Effect Of Food On Amoxicillin Absorption [url=http://mailordervia.com]buy viagra online[/url] Propecia Online Discount
Ronweix - 2017-10-15  15:38:27
 Viagra France Pharmacie Effect Of Food On Amoxicillin Absorption [url=http://mailordervia.com]buy viagra online[/url] Propecia Online Discount
Ronweix - 2017-10-15  15:38:26
 Viagra France Pharmacie Effect Of Food On Amoxicillin Absorption [url=http://mailordervia.com]buy viagra online[/url] Propecia Online Discount
Ronweix - 2017-10-15  15:38:24
 Viagra France Pharmacie Effect Of Food On Amoxicillin Absorption [url=http://mailordervia.com]buy viagra online[/url] Propecia Online Discount
Ronweix - 2017-10-13  17:03:13
 Que Es Levitra Y Para Que Sirve Propecia Ferritina Cialis 5 Mg Comprar [url=http://cheapvia50mg.com]online pharmacy[/url] Nitrostat With Out Rx Canada Meds Online Pharmacy Propecia En Exceso
Ronweix - 2017-10-13  17:03:11
 Que Es Levitra Y Para Que Sirve Propecia Ferritina Cialis 5 Mg Comprar [url=http://cheapvia50mg.com]online pharmacy[/url] Nitrostat With Out Rx Canada Meds Online Pharmacy Propecia En Exceso
Ronweix - 2017-10-13  17:03:10
 Que Es Levitra Y Para Que Sirve Propecia Ferritina Cialis 5 Mg Comprar [url=http://cheapvia50mg.com]online pharmacy[/url] Nitrostat With Out Rx Canada Meds Online Pharmacy Propecia En Exceso
Ronweix - 2017-10-13  17:03:09
 Que Es Levitra Y Para Que Sirve Propecia Ferritina Cialis 5 Mg Comprar [url=http://cheapvia50mg.com]online pharmacy[/url] Nitrostat With Out Rx Canada Meds Online Pharmacy Propecia En Exceso
[1] [2] [3] [4] [5] [6] [7] 
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.