За последние 24 часа нас посетили 19333 программиста и 1605 роботов. Сейчас ищут 878 программистов ...

Ошибка в капче (помогите найти)

Тема в разделе "PHP для новичков", создана пользователем Колбася, 13 июл 2012.

  1. Колбася

    Колбася Активный пользователь

    С нами с:
    12 дек 2011
    Сообщения:
    722
    Симпатии:
    0
    Есть 2 файла
    первый сама капча sec1.php

    Код (PHP):
    1. <?PHP
    2. // Настройки
    3.  
    4.    $SECURITY_IMAGE_TYPE = 'GIF';     // Возможные форматы: GIF, JPEG, PNG
    5.    $SECURITY_WIDTH = 130;            // Ширина изображения
    6.    $SECURITY_HEIGHT = 30;            // Высота изображения
    7.    $SECURITY_NUM_GENSIGN = 5;        // Количество символов, которые нужно набрать
    8.    $path_fonts = 'fonts/';         // Путь к шрифтам
    9.  
    10.    $EXT = strtoupper($_GET['ext']);
    11.    if($EXT == 'GIF' || $EXT == 'JPEG' || $EXT == 'PNG') $SECURITY_IMAGE_TYPE = $EXT;
    12.    if(is_numeric($_GET['width']) && $_GET['width']>100 && $_GET['width']<500) $SECURITY_WIDTH = $_GET['width'];
    13.    if(is_numeric($_GET['height']) && $_GET['height']>100 && $_GET['height']<500) $SECURITY_HEIGHT = $_GET['height'];
    14.    if(is_numeric($_GET['qty']) && $_GET['qty']>2 && $_GET['qty']<10) $SECURITY_NUM_GENSIGN = $_GET['qty'];
    15.  
    16. // Ядро
    17.  
    18.     $_SESSION['securityCode'] = $securityCode;
    19.  
    20.    $SECURITY_FONT_SIZE = intval($SECURITY_HEIGHT/(($SECURITY_HEIGHT/$SECURITY_WIDTH)*7));
    21.    $SECURITY_NUM_SIGN = intval(($SECURITY_WIDTH*$SECURITY_HEIGHT)/150);
    22.    $CODE = array();
    23.    $LETTERS = array('0','1','2','3','4','5','6','7','8','9');
    24.    $FIGURES = array('50','70','90','110','130','150','170','190','210');
    25.  
    26. // Создаем полотно
    27.  
    28.    $src = imagecreatetruecolor($SECURITY_WIDTH,$SECURITY_HEIGHT);
    29.  
    30. // Заливаем фон
    31.  
    32.    $fon = imagecolorallocate($src,255,255,255);
    33.    imagefill($src,0,0,$fon);
    34.  
    35. // Загрузка шрифтов
    36.  
    37.    $FONTS = array();
    38.    $dir = opendir($path_fonts);
    39.  
    40.    while($fontName = readdir($dir))
    41.    {
    42.        if($fontName != "." && $fontName != "..")
    43.        {
    44.            if(strtolower(strrchr($fontName,'.'))=='.ttf') $FONTS[] = $path_fonts.$fontName;
    45.        }
    46.    }  
    47.    closedir($dir);
    48.  
    49. // Если есть шрифты
    50.  
    51.    if(sizeof($FONTS)>0)
    52.    {
    53.  
    54.     // Рисуем линии на заднем фоне
    55.  
    56.        for($i = 0; $i<($SECURITY_HEIGHT)/(($SECURITY_HEIGHT)/4); $i++)
    57.        {    
    58.  
    59.         // Ориентир
    60.  
    61.            $h = 1;
    62.            $x1 = 0;
    63.            $y1 = ($h == rand(8,10)) ? (($SECURITY_HEIGHT*1.3*3)/5) + rand(0,$SECURITY_HEIGHT*0.5) : (($SECURITY_HEIGHT*1.3*3)/5) - rand(0,$SECURITY_HEIGHT*0.5);
    64.            $x2 = $SECURITY_WIDTH;
    65.            $y2 = ($h == rand(8,10)) ? (($SECURITY_HEIGHT*1.3*3)/5) + rand(0,$SECURITY_HEIGHT*0.5) : (($SECURITY_HEIGHT*1.3*3)/5) - rand(0,$SECURITY_HEIGHT*0.5);
    66.            $color = imagecolorallocatealpha($src,$FIGURES[rand(0,sizeof($FIGURES)-1)],$FIGURES[rand(0,sizeof($FIGURES)-1)],$FIGURES[rand(0,sizeof($FIGURES)-1)],rand(10,30));
    67.            ImageLine($src, $x1, $y1, $x2, $y2, $color);
    68.        }        
    69.        unset($x,$y);      
    70.        unset($x1,$y2);
    71.  
    72.     // Если папка шрифтов не пуста то, заливаем основными буквами
    73.  
    74.        for($i = 0; $i<$SECURITY_NUM_GENSIGN; $i++)
    75.        {
    76.  
    77.         // Ориентир
    78.  
    79.            $h = 1;
    80.  
    81.         // Рисуем
    82.  
    83.            $color = imagecolorallocatealpha($src,$FIGURES[rand(0,sizeof($FIGURES)-1)],$FIGURES[rand(0,sizeof($FIGURES)-1)],$FIGURES[rand(0,sizeof($FIGURES)-1)],rand(10,30)); 
    84.            $font = $FONTS[rand(0,sizeof($FONTS)-1)];
    85.            $letter = $LETTERS[rand(0,sizeof($LETTERS)-1)];
    86.            $size = rand($SECURITY_FONT_SIZE*1.8-0.5,$SECURITY_FONT_SIZE*1.8+0.5);
    87.        $x = (empty($x)) ? $SECURITY_WIDTH*0.16 : $x + ($SECURITY_WIDTH*0.7)/$SECURITY_NUM_GENSIGN+rand(0,$SECURITY_WIDTH*0.01);
    88.            $y = ($h == rand(8,10)) ? (($SECURITY_HEIGHT*1.3*3)/5) + rand(0,$SECURITY_HEIGHT*0.02) : (($SECURITY_HEIGHT*1.3*3)/5) - rand(0,$SECURITY_HEIGHT*0.02);
    89.            $angle = rand(5,40);
    90.  
    91.         // Запоминаем
    92.  
    93.            $CODE[] = $letter;
    94.            if($h == rand(0,10)) $letter = strtoupper($letter);
    95.            if($h == rand(1,2)) $angle = rand(355,340);
    96.  
    97.         // Пишем
    98.  
    99.            imagettftext($src,$size,$angle,$x,$y,$color,$font,$letter);
    100.        }
    101.  
    102.     // Если нет шрифтов
    103.  
    104.    }
    105.    else
    106.    {
    107.  
    108.     // Если папка шрифтов пуста
    109.  
    110.        for($i = 0; $i<$SECURITY_NUM_GENSIGN; $i++)
    111.        {
    112.  
    113.         // Ориентир
    114.  
    115.            $h = 1;
    116.  
    117.         // Рисуем
    118.  
    119.            $color = imagecolorallocatealpha($src,$FIGURES[rand(0,sizeof($FIGURES)-1)],$FIGURES[rand(0,sizeof($FIGURES)-1)],$FIGURES[rand(0,sizeof($FIGURES)-1)],rand(10,30)); 
    120.            $letter = $LETTERS[rand(0,sizeof($LETTERS)-1)];
    121.            $x = (empty($x)) ? $SECURITY_WIDTH*0.1 : $x + ($SECURITY_WIDTH*0.8)/$SECURITY_NUM_GENSIGN+rand(0,$SECURITY_WIDTH*0.01);
    122.            $y = ($h == rand(1,2)) ? (($SECURITY_HEIGHT*1)/4) + rand(0,$SECURITY_HEIGHT*0.1) : (($SECURITY_HEIGHT*1)/4) - rand(0,$SECURITY_HEIGHT*0.1);
    123.  
    124.         // Запоминаем
    125.  
    126.            $CODE[] = $letter;
    127.            if($h == rand(0,10)) $letter = strtoupper($letter);
    128.  
    129.         // Пишем
    130.  
    131.            imagestring($src,9,$x,$y,$letter,$color);
    132.        }
    133.    }
    134.  
    135. // Получаем код
    136.  
    137.    $_SESSION['securityCode'] = implode('',$CODE);
    138.  
    139. // Печать
    140.  
    141.    if($SECURITY_IMAGE_TYPE == 'PNG')
    142.    {
    143.        header ("Content-type: image/png"); 
    144.        imagepng($src);
    145.    }
    146.    elseif($SECURITY_IMAGE_TYPE == 'JPEG')
    147.    {
    148.        header ("Content-type: image/jpeg"); 
    149.        imagejpeg($src);
    150.    } 
    151.    else
    152.    {
    153.        header ("Content-type: image/gif"); 
    154.        imagegif($src);
    155.    }
    156.  
    157.    imagedestroy($src);
    158. ?>
    второй регистрационная форма где выводится капча register.php

    Там много учловий все они работают а вот условия для капчи


    Код (PHP):
    1.                 elseif (isset($_POST['securityCode']) && isset($_SESSION['securityCode'])) {
    2.                     if (strtolower($_POST['securityCode']) == $_SESSION['securityCode']) {
    3.                         unset($_SESSION['securityCode']);
    4.                     }
    5.                     else{
    6.                         $stop =1;
    7.                         $err .= "<cetner>Неверный защитный код ! </center>";
    8.                         unset($_SESSION['securityCode']);
    9.                     }
    10.                 }
    11.                 elseif (!isset($_POST['securityCode']) || !isset($_SESSION['securityCode'])) {
    12.                     $stop =1;
    13.                     $err .= "<center>Вы не ввели защитный код ! </center>";
    14.                 } 

    тут-же текстареа для ввода чисел

    Код (PHP):
    1.                 <TD><div align="center" style='middle'><?if (!$_GET['edit']) {?>
    2.                   <img src="sec1.php" border="1"><BR>
    3.                   Введите защитный код:<BR>
    4.                 <input type="text" name="securityCode" size="20" value="" maxlength="5" ><?}?>
    5.                 </TD>

    Вот сейчас пробую - рисунок вроде скринится вот только всегда появляется условие - Вы не ввели защитный код !
    Типа сессия не передается походу - что-то с ней...подскажите чтобы работало ребятки ...я вот сейчас сам смотрю...

    Добавлено спустя 6 минут 58 секунд:
    Даже знаете пишет так сначала Неверный защитный код !
    а потом все
    Вы не ввели защитный код
    Вы не ввели защитный код
    Вы не ввели защитный код
    такое ощущение что сессия раз проходит а потом какое то время отключается и вобщем не работает капча цыфровая проверка по ощущениям

    Добавлено спустя 14 минут 15 секунд:
    В капче дописал
    Код (PHP):
    1. session_start('securityCode'); 
    все заработало ребята :/Добавлено спустя 12 минут 18 секунд:тут прикольно можно в фонтс кидать шрифты и будет считай какбы капча меняться.