View file reg.php

File size: 15.98Kb
<?php

include_once 'sys/inc/start.php';
include_once COMPRESS;
include_once SESS;
include_once 'sys/inc/home.php';
include_once SETTINGS;
include_once DB_CONNECT;
include_once IPUA;
include_once FNC;
include_once SHIF;

$show_all = true; // показ для всех

include_once USER;

only_unreg();

$set['title'] = 'Регистрация';

include_once THEAD;

title();

echo '<div class="list-group">';

if ($set['guest_select'] == '1') {
    msg("Доступ к сайту разрешен только авторизованым пользователям");
}

if ((!isset($_SESSION['refer']) || $_SESSION['refer'] == NULL) && isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != NULL && !preg_match('#mail\.php#', $_SERVER['HTTP_REFERER'])) {
    $_SESSION['refer'] = str_replace('&', '&amp;', preg_replace('#^http://[^/]*/#', '/', $_SERVER['HTTP_REFERER']));
}

if ($set['reg_select'] == 'close') {
    $err = 'Регистрация временно приостановлена';

    err();

    echo "<a href='/aut.php'>Авторизация</a><br />\n";

    include_once TFOOT;
} elseif ($set['reg_select'] == 'open_mail' && isset($_GET['id']) && isset($_GET['activation']) && $_GET['activation'] != NULL) {
    if (dbresult(dbquery("SELECT COUNT(*) FROM `user` WHERE `id` = '" . intval($_GET['id']) . "' AND `activation` = '" . my_esc($_GET['activation']) . "'"), 0) == 1) {

        dbquery("UPDATE `user` SET `activation` = null WHERE `id` = '" . intval($_GET['id']) . "' LIMIT 1");

        $user = dbassoc(dbquery("SELECT * FROM `user` WHERE `id` = '" . intval($_GET['id']) . "' LIMIT 1"));

        dbquery("INSERT INTO `reg_mail` (`id_user`,`mail`) VALUES ('$user[id]','$user[ank_mail]')");

        msg('Ваш аккаунт успешно активирован');

        $_SESSION['id_user'] = $user['id'];

        include_once TFOOT;
    }
}

if (isset($_SESSION['step']) && $_SESSION['step'] == 1 && dbresult(dbquery("SELECT COUNT(*) FROM `user` WHERE `nick` = '" . $_SESSION['reg_nick'] . "'"), 0) == 0 && isset($_POST['pass1']) && $_POST['pass1'] != NULL && $_POST['pass2'] && $_POST['pass2'] != NULL) {
    if ($set['reg_select'] == 'open_mail') {
        if (!isset($_POST['ank_mail']) || $_POST['ank_mail'] == NULL) {
            $err[] = 'Неоходимо ввести Email';
        } elseif (!preg_match('#^[A-z0-9-\._]+@[A-z0-9]{2,}\.[A-z]{2,4}$#ui', $_POST['ank_mail'])) {
            $err[] = 'Неверный формат Email';
        } elseif (dbresult(dbquery("SELECT COUNT(*) FROM `reg_mail` WHERE `mail` = '" . my_esc($_POST['ank_mail']) . "'"), 0) != 0) {
            $err[] = "Пользователь с этим E-mail уже зарегистрирован";
        }
    }

    if (strlen2($_POST['pass1']) < 6) {
        $err[] = 'По соображениям безопасности пароль не может быть короче 6-ти символов';
    }
    if (strlen2($_POST['pass1']) > 32) {
        $err[] = 'Длина пароля превышает 32 символа';
    }
    if ($_POST['pass1'] != $_POST['pass2']) {
        $err[] = 'Пароли не совпадают';
    }
    if (!isset($_SESSION['captcha']) || !isset($_POST['chislo']) || $_SESSION['captcha'] != $_POST['chislo']) {
        $err[] = 'Неверное проверочное число';
    }

    if (!isset($err)) {
        if ($set['reg_select'] == 'open_mail') {
            $activation = md5(passgen());

            dbquery("INSERT INTO `user` (`nick`, `pass`, `date_reg`, `date_last`, `pol`, `activation`, `ank_mail`) values('" . $_SESSION['reg_nick'] . "', '" . shif($_POST['pass1']) . "', '$time', '$time', '" . intval($_POST['pol']) . "', '$activation', '" . my_esc($_POST['ank_mail']) . "')", $db);

            $id_reg = mysql_insert_id();
            $subject = "Активация аккаунта";
            $regmail = "Здравствуйте $_SESSION[reg_nick]<br />
                Для активации Вашего аккаунта перейдите по ссылке:<br />
                <a href='http://$_SERVER[HTTP_HOST]/reg.php?id=$id_reg&amp;activation=$activation'>http://$_SERVER[HTTP_HOST]/reg.php?id=" . mysql_insert_id() . "&amp;activation=$activation</a><br />
                Если аккаунт не будет активирован в течении 24 часов, он будет удален<br />
                С уважением, администрация сайта<br />";
            $adds = "From: \"password@$_SERVER[HTTP_HOST]\" <password@$_SERVER[HTTP_HOST]>\n";
            //$adds = "From: <$set[reg_mail]>\n";
            //$adds .= "X-sender: <$set[reg_mail]>\n";
            $adds .= "Content-Type: text/html; charset=utf-8\n";

            mail($_POST['ank_mail'], '=?utf-8?B?' . base64_encode($subject) . '?=', $regmail, $adds);
        } else {
            dbquery("INSERT INTO `user` (`nick`, `pass`, `date_reg`, `date_last`, `pol`) values('" . $_SESSION['reg_nick'] . "', '" . shif($_POST['pass1']) . "', '$time', '$time', '" . intval($_POST['pol']) . "')", $db);
        }

        $user = dbassoc(dbquery("SELECT * FROM `user` WHERE `nick` = '" . my_esc($_SESSION['reg_nick']) . "' AND `pass` = '" . shif($_POST['pass1']) . "' LIMIT 1"));

        if (isset($_POST['ank_name']) && preg_match('#^([A-zА-я \-]*)$#ui', $_POST['ank_name'])) {
            $user['ank_name'] = $_POST['ank_name'];
            mysql_query("UPDATE `user` SET `ank_name` = '" . my_esc($user['ank_name']) . "' WHERE `id` = '$user[id]' LIMIT 1");
        } else {
            $err[] = 'Неверный формат имени';
        }

        if (isset($_POST['ank_d_r']) && (is_numeric($_POST['ank_d_r']) && $_POST['ank_d_r'] > 0 && $_POST['ank_d_r'] <= 31 || $_POST['ank_d_r'] == NULL)) {
            $user['ank_d_r'] = $_POST['ank_d_r'];
            if ($user['ank_d_r'] == null) {
                $user['ank_d_r'] = 'null';
            }
            mysql_query("UPDATE `user` SET `ank_d_r` = $user[ank_d_r] WHERE `id` = '$user[id]' LIMIT 1");
            if ($user['ank_d_r'] == 'null') {
                $user['ank_d_r'] = NULL;
            }
        } else {
            $err[] = 'Неверный формат дня рождения';
        }

        if (isset($_POST['ank_m_r']) && (is_numeric($_POST['ank_m_r']) && $_POST['ank_m_r'] > 0 && $_POST['ank_m_r'] <= 12 || $_POST['ank_m_r'] == NULL)) {
            $user['ank_m_r'] = $_POST['ank_m_r'];
            if ($user['ank_m_r'] == null) {
                $user['ank_m_r'] = 'null';
            }
            mysql_query("UPDATE `user` SET `ank_m_r` = $user[ank_m_r] WHERE `id` = '$user[id]' LIMIT 1");

            if ($user['ank_m_r'] == 'null') {
                $user['ank_m_r'] = NULL;
            }
        } else {
            $err[] = 'Неверный формат месяца рождения';
        }

        if (isset($_POST['ank_g_r']) && (is_numeric($_POST['ank_g_r']) && $_POST['ank_g_r'] > 0 && $_POST['ank_g_r'] <= date('Y') || $_POST['ank_g_r'] == NULL)) {
            $user['ank_g_r'] = $_POST['ank_g_r'];

            if ($user['ank_g_r'] == null) {
                $user['ank_g_r'] = 'null';
            }
            mysql_query("UPDATE `user` SET `ank_g_r` = $user[ank_g_r] WHERE `id` = '$user[id]' LIMIT 1");
            if ($user['ank_g_r'] == 'null') {
                $user['ank_g_r'] = NULL;
            }
        } else {
            $err[] = 'Неверный формат года рождения';
        }

        /* Создание настроек юзера */

        dbquery("INSERT INTO `user_set` (`id_user`) VALUES ('$user[id]')");
        dbquery("INSERT INTO `discussions_set` (`id_user`) VALUES ('$user[id]')");
        dbquery("INSERT INTO `tape_set` (`id_user`) VALUES ('$user[id]')");
        dbquery("INSERT INTO `notification_set` (`id_user`) VALUES ('$user[id]')");

        if (isset($_SESSION['http_referer'])) {
            dbquery("INSERT INTO `user_ref` (`time`, `id_user`, `type_input`, `url`) VALUES ('$time', '$user[id]', 'reg', '" . my_esc($_SESSION['http_referer']) . "')");
        }

        $_SESSION['id_user'] = $user['id'];
        setcookie('id_user', $user['id'], time() + 60 * 60 * 24 * 365);
        setcookie('pass', cookie_encrypt($_POST['pass1'], $user['id']), time() + 60 * 60 * 24 * 365);

        if ($set['reg_select'] == 'open_mail') {
            msg('Вам необходимо активировать Ваш аккаунт по ссылке, высланной на Email');
        } else {
            dbquery("update `user` set `wall` = '0' where `id` = '$user[id]' limit 1");
            header('Location: /umenu.php?login=' . htmlspecialchars($_POST['reg_nick']) . '&pass=' . htmlspecialchars($_POST['pass1']));
        }

        echo "<div class='list-group-item'>\n";
        echo "Если Ваш браузер не поддерживает Cookie, Вы можете создать закладку для автовхода<br />\n";

        echo "<input type='text' value='http://$_SERVER[SERVER_NAME]/login.php?id=$user[id]&amp;pass=" . htmlspecialchars($_POST['pass1']) . "' /><br />\n";
        if ($set['reg_select'] == 'open_mail') {
            unset($user);
        }
        echo "</div>\n";

        echo "<div class='list-group-item'>\n";
        echo "<a href='/user/settings/'>Мои настройки</a><br />\n";
        echo "<a href='umenu.php'>Кабинет</a><br />\n";
        echo "</div>\n";

        include_once TFOOT;
    }
} elseif (isset($_POST['nick']) && $_POST['nick'] != NULL) {
    if (dbresult(dbquery("SELECT COUNT(*) FROM `user` WHERE `nick` = '" . my_esc($_POST['nick']) . "'"), 0) == 0) {
        $nick = my_esc($_POST['nick']);
        if (!preg_match("#^([A-zА-я0-9\-\_\ ])+$#ui", $_POST['nick'])) {
            $err[] = 'В логине присутствуют запрещенные символы';
        }

        if (preg_match("#[a-z]+#ui", $_POST['nick']) && preg_match("#[а-я]+#ui", $_POST['nick'])) {
            $err[] = 'Разрешается использовать символы только русского или только английского алфавита';
        }

        if (preg_match("#(^\ )|(\ $)#ui", $_POST['nick'])) {
            $err[] = 'Запрещено использовать пробел в начале и конце ника';
        }

        if (strlen2($nick) < 3) {
            $err[] = 'Короткий логин';
        }

        if (strlen2($nick) > 32) {
            $err[] = 'Длина логина превышает 32 символа';
        }
    } else {
        $err[] = 'Логин "' . stripcslashes(htmlspecialchars($_POST['nick'])) . '" уже зарегистрирован';
    }

    if (!isset($err)) {
        $_SESSION['reg_nick'] = $nick;
        $_SESSION['step'] = 1;
        msg("Логин \"$nick\" может быть успешно зарегистрирован");
    }
}

err();
if (isset($_SESSION['step']) && $_SESSION['step'] == 1) {

    echo "<form method='post' class='list-group-item' action='/reg.php?$passgen'>\n";
    echo "Ваш логин:<br /><input type='text' name='nick' required class='form-control' maxlength='32' value='$_SESSION[reg_nick]' /><br />\n";
    echo "<button type='submit' class='btn btn-success'><i class='mdi mdi-check'></i> Обновить логин</button>";
    echo "</form>\n";

    echo "<form method='post' class='list-group-item' action='/reg.php?$passgen'>\n";
    echo "<div class='mb-3'>";
    echo "<label class='form-label'>Имя</label>";
    echo "<input type='text' required class='form-control' name='ank_name' value='$user[ank_name]' maxlength='32' />\n";
    echo "</div>\n";

    echo "Ваш пол:<br /><select name='pol' class='form-select'><option value='1'>Мужской</option><option value='0'>Женский</option></select><br />\n";

    echo "<div class='mb-3'>";
    echo "<label class='form-label'>Дата рождения:</label>";
    echo "<div class='input-group mb-3'>";
    echo '<select name="ank_d_r" class="form-select">';

    for ($i = 1; $i <= 31; $i++) {
        echo "<option " . ($user['ank_d_r'] == "$i" ? "selected" : null) . " value='$i'>$i</option>";
    }
    echo "</select>";

    echo '<select name="ank_m_r" class="form-select">';

    echo "<option " . ($user['ank_m_r'] == '1' ? "selected" : null) . " value='1'>января</option>";
    echo "<option " . ($user['ank_m_r'] == '2' ? "selected" : null) . " value='2'>февраля</option>";
    echo "<option " . ($user['ank_m_r'] == '3' ? "selected" : null) . " value='3'>марта</option>";
    echo "<option " . ($user['ank_m_r'] == '4' ? "selected" : null) . " value='4'>апреля</option>";
    echo "<option " . ($user['ank_m_r'] == '5' ? "selected" : null) . " value='5'>мая</option>";
    echo "<option " . ($user['ank_m_r'] == '6' ? "selected" : null) . " value='6'>июня</option>";
    echo "<option " . ($user['ank_m_r'] == '7' ? "selected" : null) . " value='7'>июля</option>";
    echo "<option " . ($user['ank_m_r'] == '8' ? "selected" : null) . " value='8'>августа</option>";
    echo "<option " . ($user['ank_m_r'] == '9' ? "selected" : null) . " value='9'>сентября</option>";
    echo "<option " . ($user['ank_m_r'] == '10' ? "selected" : null) . " value='10'>октября</option>";
    echo "<option " . ($user['ank_m_r'] == '11' ? "selected" : null) . " value='11'>ноября</option>";
    echo "<option " . ($user['ank_m_r'] == '12' ? "selected" : null) . " value='12'>декабря</option>";

    echo "</select>";

    echo '<select name="ank_g_r" class="form-select">';
    if (!empty($user['ank_g_r'])) {
        echo '<option value=""></option>';
    }

    for ($i = date("Y") - 7; $i >= 1930; $i--) {
        echo "<option " . ($user['ank_g_r'] == "$i" ? "selected" : null) . " value='$i'>$i</option>";
    }
    echo '</select><br/>';

    echo "</div>";
    echo "</div>";

    if ($set['reg_select'] == 'open_mail') {
        echo "E-mail:<br /><input type='text' required class='form-control' name='ank_mail' /><br />\n";
        echo "* Указывайте ваш реальный адрес E-mail. На него придет код для активации аккаунта.<br />\n";
    }
    echo "Введите пароль (6-32 символов):<br /><input type='password' required class='form-control' name='pass1' maxlength='32' /><br />\n";
    echo "Повторите пароль:<br /><input type='password' name='pass2' required class='form-control' maxlength='32' /><br />\n";
    echo "<img src='/captcha.php?$passgen&amp;SESS=$sess' width='100' height='30' alt='Проверочное число' /><br />\n<input name='chislo' required class='form-control' size='5' maxlength='5' value='' type='text' /><br/>\n";
    echo "Регистрируясь, Вы автоматически соглашаетесь с <a href='/rules.php'>правилами</a> сайта<br />\n";

    echo "<button type='submit' class='btn btn-success'><i class='mdi mdi-check'></i> Продолжить</button>";
    echo "</form>\n";
} else {
    echo "<form class='list-group-item' method='post' action='/reg.php?$passgen'>\n";
    echo "Выберите логин:<br /><input type='text' required class='form-control' name='nick' maxlength='32' /><br />\n";
    echo "<button type='submit' class='btn btn-success'><i class='mdi mdi-check'></i> Продолжить</button>";
    echo "</form>\n";

    echo "<div class='list-group-item list-group-item-warning'>";
    echo "Регистрируясь, Вы автоматически соглашаетесь с <a href='/rules.php'>правилами</a> сайта\n";
    echo "</div>";
}

echo "<div class='list-group-item'>Уже зарегистрированы?<br /><a href='/aut.php'><i class='mdi mdi-exit-to-app'></i> Авторизация</a></div>";

echo "</div>";

include_once TFOOT;
?>