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ářů(62)
Admin - 2015-12-07  15:07:37
 Zdravím, zkuste použít ob_start();
Václav Kutiš - 2015-12-05  11:58:01
 Zdravím, vždy když si chci změnit uživatelské jméno, tak mi pak po změně se ukáže tento wa
ing, ale jméno se změní.


Wa
ing: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/115017/virtual/www/subdom/random2/update_user.php:71) in /data/web/virtuals/115017/virtual/www/subdom/random2/update_user.php on line 72

Může mi někdo pomoci?
Jakub - 2014-02-10  13:20:57
 Děkuji, už to funguje!
Admin - 2014-02-10  08:21:34
 Zdravím,
ro znamená, že nemate tabulku v databázi. Ověřte si to v phpmyadmin
Jakub - 2014-02-09  20:27:26
 Dobrý den,
vše funguje tak, jak má. Jen když se přihlásím a kliknu na seznam uživatelů, napíše to Table 'greece.users' doesn't exist - 1146. Nevíte co s tím? Děkuji.
Admin - 2014-01-28  09:12:40
 Za prvé, zkuste to udělat tak, že error_reporting bude na prvním místě a až potom bude sessions. Pokud to nezabere, pošlete mi Váše zdrojáky na tento email koding.burobin@gmail.com a zazipované MySQL tabulky. Podívam se na to.
Admin - 2014-01-27  11:16:54
 Změňte akorat &amp; na normální ampersand ( mě se to tady bohužel automatický zaměňuje ).
Admin - 2014-01-27  11:13:35
 Zdravím,
Je to jenom war ning, takže ho můžete jednoduše vypnout doplňením tohoto řádku na začátek index.php

<?php

error_reporting(E_ALL &amp; ~E_NOTICE);

?>


Martin - 2014-01-26  23:17:14
 Zdravím,

při volání souboru pridavani.php mi hlásí:
Wa
ing: session_start(): Cannot send session cache limiter - headers already sent ...

ve všech ostatní souborech stačilo, když jsem "session_start()" dal na první řádku, ale v tomto případě nic nezabírá. I když e-mail to odešle správně a vše vlastně funguje - rád bych se zbavil té chybové hlášky.

Netušíte v čem by mohl být problém?

Díky moc,
Martin
Admin - 2014-01-15  15:22:24
 To bude určitě nastavením serveru ic.cz, podívejte se v administraci ( ic.cz ), jestli je zapnuté posilání emailů. Pak ještě zkuste, v odkázu co jsem Vám posílal před tím, okopirovat ten formulář a zkusit poslat email.
Alois - 2014-01-15  11:32:36
 Ještě doplňuji, že jsem zkoušel registraci na vašem ukázkovém serveru a aktivační email dorazil ihned. Jsem si jistý, že chyba je na mé straně, jen bohužel nevím kde.
Alois - 2014-01-15  11:23:24
 Zdravím, díky za radu. Program Test Mail Server Tool jsem si nainstaloval a funguje to skvěle na localhost. Jenže jak mám vyřešit posílání aktivačního emailu na serveru. Když nakopíruji stránky na server, tak mám pořád ten stejný problém. Stáhl jsem si hotový váš script na registraci (registration_4) nakopíroval na server, vytvořil tabulku v MySql a stále je problém stejný. Omlouvám se, jestli vás tím to obtežuji, nejsem ješte tak dokonalej v PHP. Děkuji moc za pomoc.
Admin - 2014-01-14  13:15:07
 zkuste si nainstalovat tento program, Test Mail Server Tool, popisuji ho zde
Alois - 2014-01-14  13:05:31
 Pořád mi to hlásí: E-mail nebyl odeslán. Zkuste to za 5 minut.
Alois - 2014-01-14  12:31:49
 Prave jsem si naistaloval vertrigo včetne všeho. Stránky jsem spustil bez problémů na localhost, vše funguje jak má. Problém ale přetrvává. Aktivační emaily se neodesílají.
Alois - 2014-01-14  00:13:01
 Ne zkouším to na serveru ic.cz.
Admin - 2014-01-13  10:12:43
 Zdravím,
zkoušite to na lokálním serveru ?
Alois - 2014-01-13  02:15:30
 Zdravim, potřebuji prosím poradit. Při dokončení registrace se mi ukáže:
E-mail nebyl odeslán. Zkuste to za 5 minut.Děkuji za registraci, teď se můžete přihlásit.
Emaily se neodesílají. Zkouším to pořád, ale nic. Díky za rady.
Admin - 2013-11-28  07:52:51
 Zdravím,
Díky, já bohužel s tímhle zkušenosti nemám.
Korem - 2013-11-27  13:36:46
 Čus, díky za super článek :-)

Myslím že PHP má budoucnost, je to celkem srozumitelnej jazyk a i to uplatnění je ok :-)

Chtěl jsem se jenom zeptat, nemáte někdo zkušenost s tímhle agenturou? itprojekty-německo-dot-cz

Uvažuju právě že na chvíli pojedu někam do ciziny, tak jestli mi někdo nemůže nějakou agenturu doporučit. Dík ;)

PS
Sorry za ten odkaz, snad to takhle neva
[1] [2] [3] [4] 
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.