PHP рефералы

miracle

Участник
пользователи приглашают людей а они идут все под админа ! что не так в скрипте ?
 

Вложения

geronimo

Местный
насколько помню в папке inc файл _set_referer.php

нужно смореть его,можно путь реферала не верно написан,по стандарту сайт/?i=id

возможно в файле вместо i стоит ref

а может еще проще,кеш почтистить надо и проверять с разных браузеров
 

Alexandrovich1993

Местный
Проблема
В вашем коде регистрации новых пользователей при определении реферера, если реферер не найден, задается 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;">&nbsp;проекта ознакомлен(а) и принимаю: </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>

Внесенные изменения:
  1. Добавлен условие if ($referer_id != 0) перед обновлением баланса реферера, чтобы избежать ненужных запросов и ошибок.
  2. Добавлен комментарий для каждого изменения, чтобы код был более понятным.
  3. Улучшен код для получения реферера, чтобы избежать присвоения Admin как реферера, если реферальная ссылка не верна или отсутствует.
Теперь новые пользователи будут регистрироваться с правильным реферером, если он указан корректно, и если реферер не найден или не указан, они не будут назначены под администратора.
 

geronimo

Местный
так в этом весь смысл,чтобы все кто без реферала шли под админа,тоже мне гений.
 
Верх