[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: И опять проблемы с этой капчей, чтоб ее...
Bandicoot
Есть код авторизации с формой, где подключается капча, и код самой капчи. Почти весь код взят с этого форума из разных тем.
Вот код авторизации:

<?php

session_start();

// Загружаем данные о пользователях в ассоциативный массив $users
$data = file('users/users.inc', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$users = array();

foreach($data as $line)
{
list($u, $p) = explode ('|', $line);
$users[$u] = $p;
}
unset($data);

// Если поля логин и пароль, а также текст с капчей заполнены и нажата кнопка "Вход"
if(!empty($_POST['username']) && !empty($_POST['password']) && ($_SESSION['captcha'] == strtolower($_POST['securecode'])))
{
// Объявляем переменные
$username = strip_tags(trim($_POST['username'])); // логин
$password = strip_tags(trim($_POST['password'])); // пароль
$password = md5($password);

// Если сессия зарегистрированна, то объявляем ее в переменную
$sLogin = isset($_SESSION['username']) ? $_SESSION['username'] : NULL;

// Проверяем есть ли в массиве пользователь с ключом login и сравниваем пароли
if(isset($users[$username]) && $users[$username] == $password){
// Если условия выполнены, регистрируем сессию со значением логина
$_SESSION['username'] = $username;
// Рефрешемся
header('Location: '.$_SERVER['PHP_SELF']);
exit;
} else {
// Если пользователь в массиве отсутствует или пароли не совпадают, выводим соответствующее сообщение
echo 'Введены неверные данные';
}
}


// Если все-таки сессия зарегистрированна и переменная благополучно объявлена
if(isset($sLogin)){
// На всякий случай сверяемся с текущими показателями массива.
// На случай если пользователя удалили, а сессия у него все еще висит.

if(!isset($users[$sLogin]) || empty($users[$sLogin])) killSess();

// Если все в порядке - перенаправлем на панель управления
header('Location: panel.php');
exit;

} else { // Если пользователь не ввел данные - выводим форму ввода
echo '<form action="" method="post">';
echo '<table border="0">';
echo '<tr>';
echo '<td colspan="2">Введите Ваше имя:</td>';
echo '<td><input type="text" size="15" maxlength="20" name="username"></td>';
echo '</tr>';
echo '<tr>';
echo '<td colspan="2">Введите пароль:</td>';
echo '<td><input type="password" size="15" maxlength="16" name="password" ></td>';
echo '</tr>';
echo '<tr>';
echo '<td>Введите код с картинки:</td><td><img src="captcha.php" alt="защитный код"></td>';
echo '<td><input type="text" size="15" maxlength="10" name="securecode"></td>';
echo '</tr>';
echo '<tr>';
echo '<td colspan="2"><a href="regform.php"><input type="button" value="Регистрация" /></a></td>';
echo '<td><input type="submit" value="Вход"></td>';
echo '</tr>';
echo '</table>';
echo '</form>';
}
?>

А это капча:

<?php

$width = 100;
$height = 40;
$font_size = 12;
$let_amount = 5;
$back_let_amount = 30;
$path_fonts = 'fonts/';

$letters = array(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm',
'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z', '2', '3', '4', '5', '6', '7', '9'
);

$colors = array('10', '30', '50', '70', '90', '110',
'130', '150', '170', '190', '210'
);


$im = imagecreatetruecolor($width, $height);
$back = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $back);


$fonts = array();
$dir = opendir($path_fonts);

while($font_name = readdir($dir))
{
if($font_name !='.' && $font_name != '..')
$fonts[] = $font_name;
}

closedir($dir);


for($i = 0; $i < $back_let_amount; $i++)
{
$color = imagecolorallocatealpha($im, rand(0, 255), rand(0, 255), rand(0, 255), 100);

$font = $path_fonts . $fonts[rand(0, sizeof($fonts) - 1)];
$letter = $letters[rand(0, sizeof($letters) - 1)];
$size = rand($font_size - 2, $font_size + 2);

imagettftext($im, $size, rand(0, 45), rand($width * 0.1, $width - $width * 0.1),
rand($height * 0.2 , $height), $color, $font, $letter);
}

for($i = 0; $i < $let_amount; $i++)
{
$color = imagecolorallocatealpha($im, $colors[rand(0, sizeof($colors) - 1)],
$colors[rand(0, sizeof($colors) - 1)],
$colors[rand(0, sizeof($colors) - 1)], rand(20, 40));

$font = $path_fonts . $fonts[rand(0, sizeof($fonts) - 1)];
$letter = $letters[rand(0, sizeof($letters) - 1)];
$size = rand($font_size * 2.1 - 2, $font_size * 2.1 + 2);
$x = ($i + 1) * $font_size + rand(4, 7);
$y = (($height * 2) / 3) + rand(0, 5);
$code[] = $letter;

imagettftext($im, $size, rand(0, 15), $x, $y, $color, $font, $letter);
}


$_SESSION['captcha'] = implode('', $code);

header('Content-type: image/gif');
imagegif($im);
imagedestroy($im);

?>

При попытке авторизации уже зарегистрированного пользователя скрипт попросту обновляется, обнуляя поля формы, но вместо этого он должен перенаправлять пользователя в панель управления! Ребят, помогите, уже 3-й день с этой капчей мучаюсь



Спустя 8 часов, 6 минут, 52 секунды (16.02.2011 - 22:53) Bandicoot написал(а):
Ребят, кода вроде не так много, может есть мысли какие-нибудь? Догадываюсь, что проблема в механизме сессий...

Спустя 4 минуты, 4 секунды (16.02.2011 - 22:57) Winston написал(а):
Здесь готовая есть.

Спустя 19 минут, 43 секунды (16.02.2011 - 23:17) Evilsoul написал(а):
Он же говорит что не перенаправляет , причину нужно в хеадере искать или в условии, выполнено ли оно

Попробуй так:
header('Location: http://' . $_SERVER['HTTP_HOST'] . '/panel.php');

И проверь или условие выполняется
if(isset($users[$username]) && $users[$username] == $password)
echo 'Пошло поехало.';
и убери exit для проверки

Спустя 1 минута, 2 секунды (16.02.2011 - 23:18) Evilsoul написал(а):
И ещё выше есть условие, его тоже проверь или выполняется
if(isset($sLogin)){

Спустя 20 минут, 4 секунды (16.02.2011 - 23:38) Bandicoot написал(а):
Хорошо ребят, спасибо, попробую, отпишусь если что

Спустя 18 часов, 36 минут, 54 секунды (17.02.2011 - 18:15) Bandicoot написал(а):
Цитата (PHPprogramer @ 16.02.2011 - 19:57)
Здесь готовая есть.

Большое спасибо, она работает! До этого перепробовал 3 варианта, но этот оказался оптимальным. Вообще классный сайт ребята сделали: irbis-team.com, постоянно пользуюсь их справочником функций плюс все разжевано до мелочей!


_____________
Работаю с Уии
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.