Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемка с Captcha, Выводиться только картинка 
:(
    Опции темы
NetJunky
  Дата 4.6.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: 0
Всего: 0



Всем привет!
Делал форму обратной связи. Спросил у знакомого, что всё ли ок и он сказал ДА, только не хватает Captcha чтобы не получать спам.
Сделал Captcha ввиде функции и вызов данной функции в ячейке, где хотел чтобы данная картинка отображалась.

Код Captcha сделал самым простым, так как пока не особо хотел замарачиваться с алгоритмом, а просто посмотреть функциональность.
В данный момент, так:
Код

function image_create(){
        // Size
        $width = 115;
        $height = 30;
        
        // Frame and color
        $im = imagecreatetruecolor($width, $height);
        $red = imagecolorallocate($im, 255, 0, 0);
        $black = imagecolorallocate($im, 0, 0, 0);

        imagefill($im, 10, 10, $red);
        $numbers = range(1, 9);
        $letters = range('a', 'z');
        shuffle($numbers);
        shuffle($letters);
        for($i = 0; $i < 3; $i++) $captcha .= $numbers[$i]." ".$letters[$i]." ";
        $captcha_arr = explode(" ", $captcha);
        shuffle($captcha_arr);
        $captcha = implode("", $captcha_arr);

        //echo $captcha;
        imagestring($im, 5, 30, 7, $captcha, $black);
    
        header('Content-type: image/png');
        //echo $image;
        //echo $captcha;
        imagepng($im);

        imagedestroy($im);
    }


В HTML вывыодил так:
Код

<table>
    <tr>
        <td>
            Verification Code:
        </td>
        <td>
            ".image_create()."
        </td>
    </tr>
    <tr>
        <td>
            Enter Verification Code:
        </td>
        <td>
            <input type='text' name='captcha' />
        </td>
    </tr>
</table>


У меня подозрение, что дело в header(). Могу быть не прав.


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
Sanchezzz
  Дата 4.6.2009, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Код

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// HTTP/1.1
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 src="captcha.php">



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
NetJunky
Дата 4.6.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: 0
Всего: 0



Sanchezzz, Ваш код PHP я так понимаю надо разместить вне функции моей или внутри там где уже есть хэдер и сохраить функцию ввиде отдельного PHP файла а там уже на неё просто ссылаться?


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
Sanchezzz
Дата 4.6.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



там где html добавь это
        <img src="твой скрипт где картинка">
где пхп добавь к хейдеам это чтобы картинка некашироваласьтам где твоя функция
Код

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// HTTP/1.1
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 src= путь до скрипта который выдает картику


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
skyboy
Дата 4.6.2009, 13:34 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(NetJunky @  4.6.2009,  10:46 Найти цитируемый пост)
<td>
            ".image_create()."
        </td>

показывай код, который формирует HTML.
Код

echo '<td>.image_create().</td>';

не выдаст нужного тебе.
кроме того. в одном запросе не может формироваться и HTML код, в котором должна быть картинка, и сама картинка.
т.е. когда формируешь html ты просто вставляешь <img src="<путь к скрипту, который формирует КАПЧУ>">.
а уже скрипт по <пути к скрипту, который формирует капчу>, уже сформирует картинку и выведет её вместе с соответствующим заголовком.
PM MAIL   Вверх
NetJunky
Дата 4.6.2009, 14:11 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: 0
Всего: 0



Тогда встречный вопрос.
У меня есть .htaccess файл:
Код

<Files ~ ".">
deny from all
</Files>

<Files *.css>
Allow from all
</Files>

<Files *.js>
Allow from all
</Files>

<Files index.php>
Allow from all
</Files>

<Files user_reg.php>
Allow from all
</Files>

<Files contact.php>
Allow from all
</Files>


Как мне корректно указать файл с Captcha чтобы .htaccess не надо было блокировать. Так как если .htaccess не заблокирован, то captcha.php не отображается. а когда пытаюсь через броузер посмотреть, то выдаёт ошибку 403.


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
lelik133
Дата 4.6.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 5
Всего: 14



так же как у вас указаны остальные файлы
Код

<Files файл_где_лежит_код_капчи.php>
Allow from all
</Files>

PM ICQ   Вверх
NetJunky
Дата 4.6.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: 0
Всего: 0



lelik133, а вообще можно это как-то иначе прописать или только каждый файл отдельно указывать в .htaccess?


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
lelik133
Дата 4.6.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 5
Всего: 14



Код

<Files ~ ".">
deny from all
</Files>

запрещает доступ ко всем файлам, поэтому для каждого.
Или пересмотрите коцепцию и перепешите htaccess
PM ICQ   Вверх
NetJunky
Дата 4.6.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: 0
Всего: 0



lelik133, а можно как-то в одном тэге прописать допуск или запрет к нескольким файлам, а то так
Код

<Files index.php>
Allow from all
</Files>

каждый раз для каждого файла писать, слишком грамоздким получается.


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
Photon
Дата 4.6.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Злобный программер
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 27.2.2009
Где: Таганрог

Репутация: 10
Всего: 12



А нахрена запрещать доступ ко всем файлам? Доступ надо запрещать допустим к конфигам или еще к чему, что извне не должно быть доступно.  Так проще такие файлы положить в отдельный каталог и уже там в .htaccess написать:

Код

deny from all


Ну или если по такой концепции, тогда 

Код

deny from all

<Files *.php>
allow from all
</Files>


А еще проще взять готовый код капчи с примером использования например на http://captcha.ru

Это сообщение отредактировал(а) Photon - 4.6.2009, 18:35


--------------------
With best regards..
PM MAIL ICQ Skype GTalk Jabber   Вверх
NetJunky
Дата 4.6.2009, 20:35 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: 0
Всего: 0



Цитата(Photon @  4.6.2009,  18:32 Найти цитируемый пост)
А еще проще взять готовый код капчи с примером использования например на http://captcha.ru

Чем же это проще? Готового полно и везде, а вот самому понять и сделать, это другое дело.
За то, что до совета с CAPTCHA, спасибо.


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
NetJunky
Дата 20.7.2009, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: 0
Всего: 0



Sanchezzz, а как мне от туда выдернуть значение? Как мне помимо картинки, ещё получать и значение из того файла, чтобы было с чем проверить введённое.

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

Это сообщение отредактировал(а) NetJunky - 20.7.2009, 19:24


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
Photon
Дата 21.7.2009, 05:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Злобный программер
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 27.2.2009
Где: Таганрог

Репутация: 10
Всего: 12



NetJunky,  у тебя есть строка, которая выводится на капче..  Делаешь:
Код

$_SESSION['captcha'] = $captcha;

А потом в коде, в который передаются данные формы проверяешь:
Код

if ($_REQUEST['captcha'] == $_SESSION['captcha'] {
//Все хорошо
}
else {
//Все плохо
}



--------------------
With best regards..
PM MAIL ICQ Skype GTalk Jabber   Вверх
NetJunky
Дата 21.7.2009, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: 0
Всего: 0



Photon, а не мог бы ты помочь корректно сделать класс из этого кода:
Код

<?php
    // Size
    $width = 115;
    $height = 30;
        
    // Frame and color
    $im = imagecreatetruecolor($width, $height);
    $light_blue = imagecolorallocate($im, 59, 124, 239);
    $black = imagecolorallocate($im, 0, 0, 0);

    imagefill($im, 10, 10, $light_blue);
    $numbers = range(1, 9);
    $letters = range('a', 'z');
    shuffle($numbers);
    shuffle($letters);
    for($i = 0; $i < 3; $i++) $captcha .= $numbers[$i]." ".$letters[$i]." ";
    $captcha_arr = explode(" ", $captcha);
    shuffle($captcha_arr);
    $captcha = implode("", $captcha_arr);

    imagestring($im, 5, 30, 7, $captcha, $black);
    
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    // HTTP/1.1
    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');

    imagepng($im);

    imagedestroy($im);
?>


Или же в этом нету смысла?

За совет с сессией спасибо.
Работает и очень удобно.


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1464 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.