Въпрос за бан система - авторска

CosaNostra

Registered
Здравейте! Значи, направил съм си елементарна бан система за никнейм, но обаче имам голям проблем. Примерно, ако блокирам следния ник ( admin ) при логин с написан ник по този начин ( admin ) не може да се логне, но ако се промени една от буквите по следния начин ( aDmIn ) вече може да се логне. Как мога да оправя това и по какъвто и да е друг начин се промени името да не може да се логва? Надявам се, че сте ме разбрали.

Поздрави,
CosaNostra
 
Има 2 варианта:
Или при проверка в заявката с MySql , или после с php сравняваш стринговете.

Дай някакъв код. Как го проверяваш тоя юзърнейм?
 
Код:
$sql7 = "SELECT * FROM `table` WHERE username = '$postusername'";
$result7 = mysql_query($sql7) or die (mysql_error());
$bann7 = mysql_fetch_array($result7);
$nica = $bann7['username'];
$reason = $bann7['reason'];
$todate = $bann7['todate'];
$dnes = date("d.m.Y H:i");
if($todate > $dnes && $postusername == $nica){
echo "<div style=\"font-size: 11px; color: red; font-weight: normal; margin-top: -5px;\">
Акаунта е блокиран до<br /> $todate!<br />
Причина: $reason</div>";
} else { //кода за логин
По този начин проверявам никът.
 
Еми пак, ако променя някоя буква ( admin => Admin ) ме логва... само на ника, който задавам за баннат ( admin ) не може да влезе...
 
Код:
$sql7 = "SELECT * FROM `table` WHERE BINARY username = '$postusername'"; 
$result7 = mysql_query($sql7) or die (mysql_error()); 
$bann7 = mysql_fetch_array($result7); 
$nica = $bann7['username']; 
$reason = $bann7['reason']; 
$todate = $bann7['todate']; 
$dnes = date("d.m.Y H:i"); 
if($todate > $dnes && strcmp($postusername, $nica)==0){ 
echo "<div style=\"font-size: 11px; color: red; font-weight: normal; margin-top: -5px;\"> 
Акаунта е блокиран до<br /> $todate!<br /> 
Причина: $reason</div>"; 
} else { //кода за логин
 
Код:
$sql7 = "SELECT * FROM `table` WHERE username = '$postusername'"; 
$result7 = mysql_query($sql7) or die (mysql_error()); 
$bann7 = mysql_fetch_array($result7); 
$nica = $bann7['username']; 
$reason = $bann7['reason']; 
$todate = $bann7['todate']; 
$dnes = date("d.m.Y H:i"); 
if($todate > $dnes && strtolower($postusername) == strtolower($nica)){ 
echo "<div style=\"font-size: 11px; color: red; font-weight: normal; margin-top: -5px;\"> 
Акаунта е блокиран до<br /> $todate!<br /> 
Причина: $reason</div>"; 
} else { //кода за логин
 
Видях, че тази функция прави всички букви малки. Това означава ли, че в базата данни ако има записано име "aDMIn" ще ме логва с "admin"? Смисъл трябва ли записите в базата данни да са с малки, а не с главни букви?
 
Не, не е нужно записите в базата данни да са само с малки букви.
Всичко зависи къде ще ги използваш. Ако нямаш претенции към малките и големите букви в потребителските имена, то едва ли ще има проблеми. Понеже не бях вникнал в проблема(или просто не бях прочел правилно) бях решил първоначално, че искаш да направиш проверка с малки и големи букви. Но сега виждам, че най-удачния вариант е да заместиш
Код:
strtolower($postusername) == strtolower($nica)
с
Код:
strcasecmp($postusername, $nica)==0
в условието.
 
Хм... обаче пак, ако променя някоя буква ме логва... :shock: :shock:

ЕДИТ:
Зададох тази функция като извеждам написаното име в полето
$postusername = strtolower($_POST['username']);
И така сега не ме логва, а изписва, че акаунта е блокиран независимо дали всички букви са малки, главни или смесени. Надявам се вече да не ми прави проблеми. Благодаря ти!
 

Back
Горе