Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 08.04.2011
Сообщений: 20
1

Проблема с капчей

29.01.2012, 18:53. Показов 3130. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет друзья. У меня проблема. Начал изучение PHP, пишу сайт с codeignater-ом. создал форму с несколькими полями (имя, мэйл, тема сообщения, текст сообщения и капча). когда дело доходит до капчи, вношу правильный цифры с картинки, но проверка не проходит в контроллере и мне говорят что цифры с картинки были неверно вбиты. Пожалуйста подскажи что делать
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2012, 18:53
Ответы с готовыми решениями:

Работа с капчей
Кто знает как обойти такую капчу? кот картинка вот что на странице видно <table border="0"...

Проблемы с капчей
Доброго времени суток! Проблемы возникли с капчей, ни как не удается придумать решение, прошу...

Проблемы с капчей!
Подскажите, пожалуйста, как сделать так, чтобы при вводе неправильной капчи анкета не выводилась?!...

Регистрация с капчей
Добрый день! Копаюсь сейчас с регистрацией на сайте, для безопасности после 5 неудачных попыток...

11
0 / 0 / 0
Регистрация: 08.04.2011
Сообщений: 20
30.01.2012, 03:29  [ТС] 2
Это контроллер

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
 
class Pages extends CI_Controller
{
    public function __construct()
    {
       parent::__construct();
       $this->load->model('pages_model');
    }
    
    
    
    public function index()
    {
        redirect(base_url());
    }
 
    public function show ($page_id)
    {
        
        //Формируем массив для передачи в вид
        $data=array();
         // Массив по свежим материалам 
        $data['latest_materials'] = $this->materials_model->get_latest();
        
        // Массив по популярным материалам 
        $data['popular_materials'] = $this->materials_model->get_popular();
        
         // Массив по одной странице   
        $data['main_info'] = $this->pages_model->get($page_id);
        
        switch($page_id)
        {
            ///Если страница главная
            case 'index':
            
                $name = 'pages/mainpage';
                
                $this->display_lib->user_page($data,$name);
                
                break;
            
            // Если страница "Контакты"
            case 'contact':
            
                $this->load->library('captcha_lib');
                
                
            // Не нажата кнопка "Отправить"
            if( ! isset($_POST['send_message']))
            {
                // Получаем код картинки
                $data['imgcode'] = $this->captcha_lib->captcha_actions();
                $data['info'] = ''; // Информационное сообщение
                $name = 'pages/contact';
                
                $this->display_lib->user_page($data,$name);
            }
            // Нажата кнопка "Отправить"
            else
            {
                // Установка правил валидации
                $this->form_validation->set_rules($this->pages_model->contact_rules);
                
                $val_res = $this->form_validation->run();
                
                // если валидация пройдена
                if($val_res == TRUE)
                {
                    // Получаем значение поля капча
                    $entered_captcha = $this->input->post('captcha');
                       
                    
                    // Если капча совпадает, отправляем письмо
                    if($entered_captcha == $this->session->userdata('rnd_captcha'))
                    {
                        $this->load->library('typography');
                        
                        // Имя отправителя
                        $name = $this->input->post('name');
                        
                        // Указанный отправителем email
                        $email = $this->input->post('email');
                        
                        // Тема сообщения, указанная отправителем 
                        $text = $this->input->post('topic');
                        
                        // Текст сообщения
                        $text = $this->input->post('message');
                        
                        // Переносы после 70 знаков (Ограничение mail в PHP)
                        $text = wordwrap($text,70);
                        
                        // TRUE - более двух переводов строк все равно считаются за два перевода строки
                        $text = $this->typography->auto_typography($text,true); 
                        
                        // Удаляем html-тэги для удобства чтения
                        $text = strip_tags($text);
                        
                        // Куда отправляется письмо
                        $address = "codeharmony.ru@gmail.com";
                        
                        // Тема письма как ее видит получатель
                        $subject = "Вопрос из формы обратной связи";
                        
                        $message = "Написал(а):$name\nТема: $topic\nСообщение: \n$text\nE-mail отправителя: $email";
                        
                        // Отправляем письмо
                        mail($address,$subject,$message,"Content-type:text/plain;charset = windows-1251\r\n");
                        
                        $data['info'] = 'Ваше сообщение отправлено. Если оно требует ответа, я свяжусь с вами в кратчайшие сроки.';
                        $name = 'info';
                        
                        $this->display_lib->user_info_page($data,$name);
                    }
                    // Если капча не совпадает
                    else
                    {
                        // Получаем код картинки
                        $data['imgcode'] = $this->captcha_lib->captcha_actions();
                        
                        $data['info'] = 'Неверно введены цифры с картинки';
                        $name = 'pages/contact';
                        
                        $this->display_lib->user_info_page($data,$name);            
                    }
                }
                
                // Если валидация не пройдена
                else
                {
                    // Получаем код картинки
                    $data['imgcode'] = $this->captcha_lib->captcha_actions();
                    $data['info'] = ''; // Информационное сообщение
                    
                    $name = 'pages/contact';
                    
                    $this->display_lib->user_page($data,$name);
                }
            }
                break;
                
                
                
            // Любая другая страница
            default:
            
            // Если массив пуст
            if(empty($data['main_info']))
            {
                $data['info'] = 'Нет такой страницы';
                $name = 'info';
                
                $this->display_lib->user_info_page($data,$name);
            }
            
            else
            {
                $name = 'pages/page';
                $this->display_lib->user_page($data,$name);
            }
        
        }
    }
 
 
}
 
 
?>
Добавлено через 52 секунды
Библиотека captcha_lib

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
 
    class Captcha_lib
    {
        public function captcha_actions()
        {
            $CI =& get_instance();
            
            // Загружаем хелпер Капча
            $CI->load->helper('captcha');
            
            // Загружаем хэлпер для генерирования случайной строки
            $CI->load->helper('string');
            $rnd_str = random_string('numeric',5);  
            
            // Записываем строку в сессию
            $ses_data = array();
            $ses_data['rnd_captcha'] = $rnd_str;
            $CI->session->set_userdata($ses_data);
            
            //Параметры картинки
            $settings = array('word'         => $rnd_str,
                              'img_path'     => './img/captcha/',
                              'img_url'      => base_url().'img/captcha/',
                              'font_path'    => './system/fonts/texb.ttf',
                              'img_width'    => 120,
                              'img_height'   => 30,
                              'expiration'   => 10);
                              
            // Создаем капчу
            $captcha = create_captcha($settings);
            
            // Получаем в переменную код картинки
            $imgcode = $captcha['image'];
            return $imgcode;
            
                        
        }
    }
 
 
 
 
?>
Добавлено через 7 часов 38 минут
Друзья пожалуйста подскажите, а то никак не могу понять что, да как

 Комментарий модератора 
Используйте теги форматирования кода!
0
0 / 0 / 0
Регистрация: 08.04.2011
Сообщений: 20
31.01.2012, 17:10  [ТС] 3
ЛЮЮЮЮДИИИИ помогите
0
103 / 70 / 5
Регистрация: 09.06.2011
Сообщений: 263
04.02.2012, 01:26 4
а ты сам то в вышеизложеном коде разобрался для начала?
0
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
04.02.2012, 12:39 5
Ты сам писал код ? или копипаст
0
0 / 0 / 0
Регистрация: 08.04.2011
Сообщений: 20
05.02.2012, 01:20  [ТС] 6
да я разобрался. а код взял с видео урока ) Там проверка не проходит, и говорит о том что код с картинки не верно введен
0
103 / 70 / 5
Регистрация: 09.06.2011
Сообщений: 263
05.02.2012, 01:58 7
а не проще найти код для капчи без использования ООП?
0
gubarets
05.03.2013, 11:22 8
У меня такаяже проблема на этих же уроках. Мне кажеться что баг в самом codeigniter2, т.к. в codeigniter1 все работает.
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
05.03.2013, 11:33 9
Цитата Сообщение от gubarets Посмотреть сообщение
У меня такаяже проблема на этих же уроках. Мне кажеться что баг в самом codeigniter2, т.к. в codeigniter1 все работает.
это урок под кодеигнитер 1, а не под 2. Я вообще функции display_lib не смог найти.
0
gubarets
05.03.2013, 22:37 10
Да там разницы почти никакой добавить приставку CI (CI_Models,CI_contoller)Бконструктор немного иначе (parent::__construct), да и капча теперь не плагин, а хелпер. Все остальное один в один . Только вот капча ему все не та да и логин пароль тоже...что за глюк...под 1 codeigniter все работает.
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
05.03.2013, 23:11 11
посоны - учите пхп с пхп, а не с фреймворков.
0
387 / 294 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
24.03.2013, 02:05 12
Писал изучая php:

Привожу код html и класс капчи остальные классы в исходниках:

PHP
1
2
3
4
// В папке QCaptcha две папки:
// captchaBack - фоны для капчи, скидывая туда фоны класс сам просматривает папку на файлы *.png
// captchaTTF - шрифты работают также, просто кидаем туда нужный шрифт и он будет отображаться
// QCodeGen есть еще методы интересно смотрите там

PS: При клике по капче она меняется.


index.php
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Test class</title>
</head>
 
<body>
    <table style="width: 100%; height: 100%; text-align: center;">
        <tr>
            <td>
                <p><a href='#' onclick="document.getElementById('captchaImg').src='Qp/QCaptcha/classQCaptcha.php?'+Math.random(); return false;"><img id='captchaImg' src='Qp/QCaptcha/classQCaptcha.php'></a></p>
            </td>
        </tr>
    </table>
</body>
</html>

class (classQCaptcha.php):

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
 
namespace Qp;
 
session_start();
 
include_once('../QCodeGen/classQCodeGen.php');
include_once('../QDir/classQDir.php');
 
class QCaptcha {
 
    private $dirImage;
    private $dirTff;
    private $fontSize = 16;
    private $lines = 6;
    private $sizeCode;
    private $enumCode;
 
    private $arrImage = array();
    private $arrTtf = array();
    // Конструктор
    function __construct($sizeCode = 8, $enumCode = 0){
        $this->dir = 'codeGen/';
 
        $this->dirImage = 'captchaBack/';
        $this->dirTff = 'captchaTTF/';
 
        $this->enumCode = $enumCode;
        $this->sizeCode = $sizeCode;
 
        $qDir = new QDir($this->dirImage);
        $this->arrImage = $qDir->entryListFiles('png');
        $qDir->setDir($this->dirTff);
        $this->arrTtf = $qDir->entryListFiles('ttf');
    }
    // Установка размера шрифта
    function setFontSize($fontSize){
        $this->fontSize = $fontSize;
    }
    // Установка количества линий
    function setNumLines($lines){
        $this->lines = $lines;
    }
 
    function getCaptcha(){
 
        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
        header("Last-Modified: " . gmdate("D, d M Y H:i:s", 10000) . " GMT");
        header("Cache-Control: no-store, no-cache, must-revalidate");
        header("Cache-Control: post-check=0, pre-check=0", false);
        header("Pragma: no-cache");
        header("Content-Type:image/png");
 
        $img = imagecreatefrompng($this->dirImage.$this->arrImage[rand(0,count($this->arrImage)-1)]); //создаем изображение со случайным фоном
 
        // Рисуем линии
        for ($i=0; $i<$this->lines; $i++){
            $color = imagecolorallocate($img, rand(0, 150), rand(0, 100), rand(0, 150));
            imageline($img, rand(0, -10), rand(1, 50), rand(150, 180), rand(1, 50), $color);
        }
 
        $color = imagecolorallocate($img, rand(0, 200), 0, rand(0, 200));
 
        // Генерируем нужный пароль
        $codeGen = new QCodeGen($this->sizeCode);
 
        switch($this->enumCode){
            case 0:
                $codeGen->genCodeEng_Number();  // Генерируется код англ+цифры
                break;
            case 1:
                $codeGen->genCodeEng();         // Генерируется код англ
                break;
            case 2:
                $codeGen->genCodeNumber();      // Генерируется код цифры
                break;
        }
 
        $code = $codeGen->getCode(); // Получение кода из класса
 
        $_SESSION['captchaCode'] = $code; // Сохранение кода в сессии для проверки
 
        imagettftext ($img, $this->fontSize, rand(0, 4), rand(0, 25), rand(30, 40), $color, $this->dirTff.$this->arrTtf[rand(0,count($this->arrTtf)-1)], $code);//накладываем код
 
        //еще раз линии! Уже сверху.
        for ($i=0; $i<$this->lines; $i++){
            $color = imagecolorallocate($img, rand(0, 150), rand(0, 100), rand(0, 150));
            imageline($img, rand(0, 150), rand(0, 0), rand(0, 0), rand(150, 150), $color);
        }
 
        ImagePNG($img);
        ImageDestroy($img);//ну вот и создано изображение!
    }
}
 
$captcha = new QCaptcha(6,1); // Установливаем размер кода(1) и тип пароля(2(0,1,2))
$captcha->setFontSize(20);   // Установка размера шрифта
$captcha->setNumLines(4);    // Установка количества линий (перечеркуют шрифт)
$captcha->getCaptcha();      // Выводим капчу
 
// Удачи!
Миниатюры
Проблема с капчей   Проблема с капчей   Проблема с капчей  

Вложения
Тип файла: zip Qp.zip (441.6 Кб, 18 просмотров)
0
24.03.2013, 02:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2013, 02:05
Помогаю со студенческими работами здесь

Проблемы с математической капчей
Здравствуйте! Очень нужна помощь! Запутался на ерунде. Делаю сейчас математическую капчу...

Отправка письма с капчей
Есть полностью валидный код отправки письма с капчей. Мне необходимо (дополнить код) отправлять...

Криво работает форма с капчей
Доброе время суток ! Народ помогите пожалуйста дорихтовать форму с капчей . Вобщем прикрутил капчу...

Работа с капчей. Что не так?
Сделал капчу при добавлении комментариев и не могу соединить это все в 1. Если капча введена...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru