Проблема
В вашем коде регистрации новых пользователей при определении реферера, если реферер не найден, задается referer_id как 1 и referer_name как "Admin". Это приводит к тому, что все новые участники, пришедшие по несуществующей реферальной ссылке или без реферальной ссылки, регистрируются под администратором.
Возможное решение
Необходимо изменить логику проверки и установки реферера, чтобы учитывать корректные значения и избегать назначения администратору новых пользователей. Вот исправленный код:
<?PHP
$_OPTIMIZATION["title"] = "Регистрация";
$_OPTIMIZATION["description"] = "Регистрация пользователя в системе";
$_OPTIMIZATION["keywords"] = "Регистрация нового участника в системе";
?>
<td valign="top">
<div class="r_block">
<div class="topperss"><span>
<center><h1>Регистрация в проекте</h1></center></span></div>
<BR />
<div class="">
<?PHP
# Регистрация
if(isset($_POST["login"])) {
if(isset($_SESSION["captcha"]) AND strtolower($_SESSION["captcha"]) == strtolower($_POST["captcha"])) {
unset($_SESSION["captcha"]);
$login = $func->IsLogin($_POST["login"]);
$pass = $func->IsPassword($_POST["pass"]);
$rules = isset($_POST["rules"]) ? true : false;
$time = time();
$ip = $func->UserIP;
$ipregs = $db->Query("SELECT * FROM `db_users_a` WHERE INET_NTOA(db_users_a.ip) = '$ip' ");
$ipregs = $db->NumRows();
$email = $func->IsMail($_POST["email"]);
$referer_id = (isset($_COOKIE["i"]) AND intval($_COOKIE["i"]) > 0 AND intval($_COOKIE["i"]) < 1000000) ? intval($_COOKIE["i"]) : 0;
$referer_name = "Admin"; // По умолчанию реферер - Admin
if($referer_id != 0) {
$db->Query("SELECT user FROM db_users_a WHERE id = '$referer_id' LIMIT 1");
if($db->NumRows() > 0) {
$referer_name = $db->FetchRow();
} else {
$referer_id = 0; // Если реферер не найден, сбрасываем ID на 0
}
}
if($rules) {
if($ipregs == 0) {
if($email !== false) {
if($login !== false) {
if($pass !== false) {
if($pass == $_POST["repass"]) {
$db->Query("SELECT COUNT(*) FROM db_users_a WHERE user = '$login'");
if($db->FetchRow() == 0) {
# Регаем пользователя
$db->Query("INSERT INTO db_users_a (user, email, pass, referer, referer_id, date_reg, ip)
VALUES ('$login', '$email', '$pass', '$referer_name', '$referer_id', '$time', INET_ATON('$ip'))");
$lid = $db->LastInsert();
$db->Query("INSERT INTO db_users_b (id, user, a_t, last_sbor) VALUES ('$lid', '$login', '2', '".time()."')");
# +5 серебра рефереру за рефа
if ($referer_id != 0) {
$db->Query("UPDATE db_users_b SET money_p = money_p + 5 WHERE id = '$referer_id'");
}
# Обновляем статистику
$db->Query("UPDATE db_stats SET all_users = all_users + 1 WHERE id = '1'");
echo "<center><b><font color = 'green'>Вы успешно зарегистрировались. Используйте форму слева для входа в аккаунт</font></b></center><BR />";
?></div>
<div class="clr"></div>
<?PHP
return;
} else echo "<center><b><font color = 'red'>Указанный логин уже используется</font></b></center><BR />";
} else echo "<center><b><font color = 'red'>Пароль и повтор пароля не совпадают</font></b></center><BR />";
} else echo "<center><b><font color = 'red'>Пароль заполнен неверно</font></b></center><BR />";
} else echo "<center><b><font color = 'red'>Логин заполнен неверно</font></b></center><BR />";
} else echo "<center><font color = 'red'><b>Email имеет неверный формат</b></font></center>";
} else echo "<center><font color = 'red'><b>Регистрация с этого IP уже производилась</b></font></center>";
} else echo "<center><b><font color = 'red'>Вы не подтвердили правила</font></b></center><BR />";
} else echo "<center><font color = 'red'><b>Символы с картинки введены неверно</b></font></center>";
}
?>
<BR />
<form action="" method="post" onsubmit="ga('send', 'event', 'knopka', 'register');return true;">
<center>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center"> <font style="color: #d7b499;">Ваш псевдоним: </font><font color="#FF0000">*</font></td>
<td align="left" style="padding:3px;">
<input class="login-block_input3" id="reg_1" placeholder="Придумайте логин" pattern="[0-9A-Za-z]{4,10}" required title="Псевдоним должно иметь от 4 до 10 символов (только латинские буквы и цифры)" name="login" class="poi" style="height: 30px;margin-left: 30px;text-align:center;font-size: 14px;" type="text" size="25" maxlength="10" value=""/>
</td>
</tr>
<tr>
<td><div style="margin-top: 10px;"></div></td>
</tr>
<tr>
<td align="center"> <font style="color: #d7b499;">Email: </font><font color="#FF0000">*</font></td>
<td align="left" style="padding:3px;"><input class="login-block_input3" id="reg_2" placeholder="Введите ваш e-mail" required name="email" class="poi" style="height: 30px;margin-left: 30px;text-align:center;font-size: 14px;" type="email" size="25" maxlength="50" value=""/></td>
</tr>
<tr>
<td><div style="margin-top: 10px;"></div></td>
</tr>
<tr>
<td align="center"> <font style="color: #d7b499;">Пароль: </font><font color="#FF0000">*</font></td>
<td align="left" style="padding:3px;"><input class="login-block_input3" id="reg_3" placeholder="Введите пароль" pattern="[0-9A-Za-z]{6,20}" required title="Пароль должно иметь от 6 до 20 символов (только латинские буквы и цифры)" name="pass" class="poi" style="height: 30px;margin-left: 30px;text-align:center;font-size: 14px;" type="password" size="25" maxlength="20" /></td>
</tr>
<tr>
<td><div style="margin-top: 10px;"></div></td>
</tr>
<tr>
<td align="center"> <font style="color: #d7b499;">Пароль еще раз: </font><font color="#FF0000">*</font></td>
<td align="left" style="padding:3px;"><input class="login-block_input3" id="reg_4" placeholder="Повторите пароль" pattern="[0-9A-Za-z]{6,20}" required title="Пароль должно иметь от 6 до 20 символов (только латинские буквы и цифры)" name="repass" class="poi" style="height: 30px;margin-left: 30px;text-align:center; font-size: 14px;" type="password" size="25" maxlength="20" /></td>
</tr>
<tr>
<td><div style="margin-top: 10px;"></div></td>
</tr>
</table>
<center>
<div>
<label><input name="rules" style="cursor: pointer; width: 15px; height: 17px; vertical-align: -4px;" required type="checkbox"><font style="color: #d7b499;"><b style="cursor: pointer;"> С </b><a href="/rules" target="_blank" class="stn">правилами</a> <font><span style="cursor: pointer;"> проекта ознакомлен(а) и принимаю: </span></label>
<table width="330" border="0" align="center">
<tbody><tr>
<td align="center"></td>
</tr>
<div>
<center>
<div class="silver-bkloxum">
<center> <div style="width: 165px;height: 60px;cursor: pointer;">
<a onclick="ResetCaptcha(this);"><img style="cursor: pointer;" src="/captcha.php?rnd=<?=rand(1,10000); ?>" border="0"></a>
</div> </center>
<div style="margin-top: 10px;"></div>
<center> <font style="color: #d7b499;">Введите символы с картинки </font><font color="#FF0000">*</font><input class="login-block_input3" id="reg_6" placeholder="Цифры с картинки" class="poi" style="height: 30px;margin-left: 30px;text-align:center;font-size: 14px;" name="captcha" type="text" size="25" required maxlength="50"> </font></center><font>
</font></div><font>
</font></center><font>
</font></div>
<div style="margin-top: 10px;"></div>
</tbody></table>
<center><input name="registr" type="submit" class="login-block_input4" value="Отправить"></center>
</form>
</div>
<div class="clr"></div>
Внесенные изменения:
- Добавлен условие if ($referer_id != 0) перед обновлением баланса реферера, чтобы избежать ненужных запросов и ошибок.
- Добавлен комментарий для каждого изменения, чтобы код был более понятным.
- Улучшен код для получения реферера, чтобы избежать присвоения Admin как реферера, если реферальная ссылка не верна или отсутствует.
Теперь новые пользователи будут регистрироваться с правильным реферером, если он указан корректно, и если реферер не найден или не указан, они не будут назначены под администратора.