Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Генератор captchy

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
PATCH
Отправлено: 07 Января, 2012 - 04:28:18
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




PHP:
скопировать код в буфер обмена
  1. class captcha {
  2.         private $capture;
  3.         private $chars;
  4.         private $rand_keys;
  5.         private $x;
  6.         private $rand_long;
  7.         private $prov_char;
  8.         private $i;
  9.         private $rand_color_1;
  10.         private $rand_color_2;
  11.         private $rand_color_3;
  12.         private $color_char;
  13.         private $dX;
  14.         private $y;
  15.         private $size;
  16.         private $angle;
  17.        
  18.         private function Generate_Chars()
  19.     {
  20.               $chars = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
  21.  
  22.             $rand_keys = array_rand($chars,1);
  23.             $_SESSION["captcha"]=$_SESSION["captcha"].$chars[$rand_keys];
  24.             return $chars[$rand_keys];
  25.     }
  26.        
  27.         function generate_captcha ($dir_main)
  28.         {
  29.                 $_SESSION["captcha"]='';
  30.         $capture =  imagecreatefromjpeg ($dir_main."/captcha/images/captcha.jpg");
  31.                 $x=0;
  32.                 $rand_long = mt_rand(2,5);
  33.                 $prov_char='';
  34.                 for ($i=0; $i < $rand_long; $i++)
  35.                 {
  36.                         $rand_color_1= mt_rand(50,200);
  37.                         $rand_color_2= mt_rand(50,200);
  38.                         $rand_color_3= mt_rand(50,200);
  39.                         $color_char = imagecolorallocate ($capture, $rand_color_1, $rand_color_2,$rand_color_3);
  40.                         $dX=25;
  41.                         $x=$x+$dX;
  42.                         $y=26;
  43.                         $size = mt_rand(13,20);
  44.                         $angle=mt_rand(-40,40);
  45.                         imagettftext ($capture, $size, $angle, $x, $y, $color_char,$dir_main."/captcha/fonts/ARIAL.ttf",$this->Generate_Chars());
  46.                 }
  47.                 header ("Content-type: image/jpeg");
  48.                 imagejpeg ($capture,"",100);
  49.         }
  50. }
  51. $captcha_echo = new captcha($dir_main);
  52.  
  53. $captcha_echo->generate_captcha($dir_main);
  54. ?>


проблема с выводом изображения (выводит слово изображение) в исходном коде ошибок нету. а должно вывести captchy (картинку с рандомными текстами и цифрами). вообще captcha рабочая писал сам но без ооп решил переделать в ооп а тут проблема с выводом. за одно мб исправите недочет в написании в ооп) (практикуюсь) P.S прекрипил файл с исходным кодом (не ооп) + файлы
Скачать файл: gd.zip
Скачан раз: 110
 
 Top
Зверь
Отправлено: 07 Января, 2012 - 08:52:07
Post Id



Частый гость


Покинул форум
Сообщений всего: 243
Дата рег-ции: Окт. 2011  


Помог: 7 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class captcha {
  3.         private
  4.                  $capture,
  5.          $chars,
  6.          $rand_keys,
  7.          $x,
  8.          $rand_long,
  9.          $prov_char,
  10.          $i,
  11.          $rand_color_1,
  12.          $rand_color_2,
  13.          $rand_color_3,
  14.          $color_char,
  15.          $dX,
  16.          $y,
  17.          $size,
  18.          $angle;
  19.        
  20.         private function Generate_Chars()
  21.     {
  22.               $chars = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
  23.  
  24.             $rand_keys = array_rand($chars,1);
  25.             $_SESSION["captcha"]=$_SESSION["captcha"].$chars[$rand_keys];
  26.             return $chars[$rand_keys];
  27.     }
  28.        
  29.       public function generate_captcha ()
  30.         {
  31.                 $_SESSION["captcha"]='';
  32.         $capture =  imagecreatefromjpeg ("./images/captcha.jpg");
  33.                 $x=0;
  34.                 $rand_long = mt_rand(2,5);
  35.                 $prov_char='';
  36.                 for ($i=0; $i < $rand_long; $i++)
  37.                 {
  38.                         $rand_color_1= mt_rand(50,200);
  39.                         $rand_color_2= mt_rand(50,200);
  40.                         $rand_color_3= mt_rand(50,200);
  41.                         $color_char = imagecolorallocate ($capture, $rand_color_1, $rand_color_2,$rand_color_3);
  42.                         $dX=25;
  43.                         $x=$x+$dX;
  44.                         $y=26;
  45.                         $size = mt_rand(13,20);
  46.                         $angle=mt_rand(-40,40);
  47.                         imagettftext ($capture, $size, $angle, $x, $y, $color_char,"./fonts/ARIAL.ttf",$this->Generate_Chars());
  48.                 }
  49.                 header ("Content-type: image/jpeg");
  50.                 imagejpeg ($capture,"",100);
  51.         }
  52. }
  53. $captcha_echo = new captcha();
  54.  
  55. $captcha_echo->generate_captcha();
  56. ?>

(Отредактировано автором: 07 Января, 2012 - 08:57:51)

 
 Top
PATCH
Отправлено: 07 Января, 2012 - 18:20:34
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




не работает. да кстати и что толк что ты объединил private переменые , и изменил пути до файлов?) пути верно прописаны были $dir_main передовалась и имеля в себе текущее место расположение index.php от него я уже ориентировался на другие файлы.
 
 Top
snikers987
Отправлено: 07 Января, 2012 - 18:27:35
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Не увидел смысла инициализации свойств класса, если чесно..
Зачем их инициализировать если обращаться к ним как к обычным переменным, а не свойствам класса?

(Отредактировано автором: 07 Января, 2012 - 18:31:26)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Зверь
Отправлено: 07 Января, 2012 - 18:47:46
Post Id



Частый гость


Покинул форум
Сообщений всего: 243
Дата рег-ции: Окт. 2011  


Помог: 7 раз(а)




PATCH пишет:
не работает. да кстати и что толк что ты объединил private переменые , и изменил пути до файлов?) пути верно прописаны были $dir_main передовалась и имеля в себе текущее место расположение index.php от него я уже ориентировался на другие файлы.

Как ни странно, но у меня работает.
А зачем писать private десять раз, если можно 1 и не париться. И да,
к свойствам класса нужно обращаться $this->property
А ошибка была, по-моему в путях до шрифта и изображения, в общем смотрите исходный код страницы что там у вас выводит
 
 Top
PATCH
Отправлено: 07 Января, 2012 - 19:46:37
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




как правильно выводит captchy (вообще картинку в ооп)

PHP:
скопировать код в буфер обмена
  1. <img scr"<?PHP include ('captcha.php'); ?>" >

и в файле captchi
CODE (html):
скопировать код в буфер обмена
  1. $captcha_echo->generate_captcha($dir_main);

или
подключить заранее captchy Т.е ъ
PHP:
скопировать код в буфер обмена
  1. <?PHP include ('captcha.php'); ?>

а в теге img
PHP:
скопировать код в буфер обмена
  1. <img scr"<?PHP $captcha_echo->generate_captcha($dir_main); ?>" >

при написании без ооп надо было тупо инклудить файл но тут же можно вызвать метод.

Цитата:
Не увидел смысла инициализации свойств класса, если чесно..
Зачем их инициализировать если обращаться к ним как к обычным переменным, а не свойствам класса?

p.s я ж писал я практик в ООП) и свойствено допускать грубые ошибки)
 
 Top
Зверь
Отправлено: 07 Января, 2012 - 20:21:36
Post Id



Частый гость


Покинул форум
Сообщений всего: 243
Дата рег-ции: Окт. 2011  


Помог: 7 раз(а)




Цитата:

как правильно выводит captchy (вообще картинку в ооп)

Лучше будет наверно так

А в файле captcha.php уже $captcha_echo->generate_captcha($dir_main);

(Отредактировано автором: 07 Января, 2012 - 20:22:01)

 
 Top
PATCH
Отправлено: 07 Января, 2012 - 22:01:38
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




как переопределить класс ?) ведь он же уже переопределен вроде как)

CODE (htmlphp):
скопировать код в буфер обмена
  1. <div><img src="<? include($dir_main."/Class/Core/captcha.class.php");?>"></div>
  2. <br><br>


PHP:
скопировать код в буфер обмена
  1. $captcha_echo = new captcha($dir_main);
  2. $captcha_echo->generate_captcha($dir_main);

итог

<b>Fatal error</b>: Cannot redeclare class captcha in <b>G:\web\xampp\htdocs\GE\Class\Core\captcha.class.php</b> on line <b>2</b><br />

(Отредактировано автором: 07 Января, 2012 - 23:48:25)

 
 Top
Okula
Отправлено: 08 Января, 2012 - 01:26:14
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




PHP:
скопировать код в буфер обмена
  1. $captcha_echo = new captcha($dir_main);

Что то я не увидил конструктора в класса, что толку что ты передаёшь туда переменную $dir_main
Если тебе нужно получить копию экземпляра класса то клонируй объект:
PHP:
скопировать код в буфер обмена
  1. $captcha_echo = new captcha();
  2. $clone_captcha = clone $captcha_echo;

(Отредактировано автором: 08 Января, 2012 - 01:26:48)

 
 Top
PATCH
Отправлено: 08 Января, 2012 - 02:32:44
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




клонировать ненадо) мне надо вывести изображение) и без помощи конструктора переменая передается)
Прикреплено изображение (Нажмите для увеличения)
1.bmp

(Отредактировано автором: 08 Января, 2012 - 02:42:51)

 
 Top
Зверь
Отправлено: 08 Января, 2012 - 06:35:06
Post Id



Частый гость


Покинул форум
Сообщений всего: 243
Дата рег-ции: Окт. 2011  


Помог: 7 раз(а)




PATCH пишет:
как переопределить класс ?) ведь он же уже переопределен вроде как)

CODE (htmlphp):
скопировать код в буфер обмена
  1. <div><img src="<? include($dir_main."/Class/Core/captcha.class.php");?>"></div>
  2. <br><br>


PHP:
скопировать код в буфер обмена
  1. $captcha_echo = new captcha($dir_main);
  2. $captcha_echo->generate_captcha($dir_main);

итог

<b>Fatal error</b>: Cannot redeclare class captcha in <b>G:\web\xampp\htdocs\GE\Class\Core\captcha.class.php</b> on line <b>2</b><br />

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

К слову о $dir_main, Okula правильно сказал путь не может передаваться, т.к. вы не создали конструктор.
Конструктор это магический метод который выполняется при создании экземпляра класса new captcha(), он может называться либо одним именем с классом либо __construct()
То есть $dir_main витает где-то в памяти, но не используется, говорю же у вас вся проблема с путями. У меня все прекрасно работает и капча отображается
 
 Top
PATCH
Отправлено: 08 Января, 2012 - 07:12:54
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




ох пл*** говорю что все передается нет плин твердят свое , ну если вы так думаете что правы тогда поясните ЭТО.
CODE (html):
скопировать код в буфер обмена
  1. <form action="reg.php" method="post">
  2. <table width="90%" border="0">
  3.   <tr>
  4.     <td>Логин:</td>
  5.     <td><input name="login" type="text"  size="20" maxlength="40"></td>
  6.   </tr>
  7.   <tr>
  8.     <td>Ник:</td>
  9.     <td><input name="nick" type="text"  size="20" maxlength="40"></td>
  10.   </tr>
  11.   <tr>
  12.     <td>Пароль:</td>
  13.     <td><input name="password1" type="password" size="20" maxlength="40"></td>
  14.   </tr>
  15.   <tr>
  16.     <td>Повторите пароль:</td>
  17.     <td><input name="password2" type="password" size="20" maxlength="40"></td>
  18.   </tr>
  19.   <tr>
  20.     <td>Емайл:</td>
  21.     <td><input name="email" type="text"  size="20" maxlength="40"></td>
  22.   </tr>
  23.   <tr>
  24.     <td>Введите код на картинке:</td>
  25.     <td><input type="text" name="captcha" size="20"></td>
  26.   </tr>
  27. </table>
  28. <div><?php include($dir_main."/Class/Core/captcha.class.php"); ?> </div>
  29. <br><br>
  30. <input name="reg_on" type="submit" value="Регистрация">
  31. </form>


PHP:
скопировать код в буфер обмена
  1. class captcha {
  2.  
  3.         private $capture,$chars,$rand_keys,$x,$rand_long,$prov_char,$i,$rand_color_1,$rand_color_2, $rand_color_3, $color_char, $dX, $y, $size, $angle;
  4.  
  5.        
  6.  
  7.         private function Generate_Chars()
  8.  
  9.     {
  10.      $this->chars = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
  11.  
  12.             $this->rand_keys = array_rand($this->chars,1);
  13.             $_SESSION["captcha"]=$_SESSION["captcha"].$this->chars[$this->rand_keys];
  14.             return $this->chars[$this->rand_keys];
  15.      }
  16.  
  17.        
  18.  
  19.         function generate_captcha ($dir_main)
  20.         {
  21.          $_SESSION["captcha"]='';
  22.          $this->capture =  imagecreatefromjpeg ($dir_main."/captcha/images/captcha.jpg");
  23.          $this->x=0;
  24.          $this->rand_long = mt_rand(2,5);
  25.          $this->prov_char='';
  26.          for ($this->i=0; $this->i < $this->rand_long; $this->i++)
  27.          {
  28.           $this->rand_color_1= mt_rand(50,200);
  29.           $this->rand_color_2= mt_rand(50,200);
  30.           $this->rand_color_3= mt_rand(50,200);
  31.           $this->color_char = imagecolorallocate ($this->capture, $this->rand_color_1, $this->rand_color_2,$this->rand_color_3);
  32.           $this->dX=25;
  33.           $this->x=$this->x+$this->dX;
  34.           $this->y=26;
  35.           $this->size = mt_rand(13,20);
  36.           $this->angle=mt_rand(-40,40);
  37.           imagettftext ($this->capture, $this->size, $this->angle, $this->x, $this->y, $this->color_char,$dir_main."/captcha/fonts/ARIAL.ttf",$this->Generate_Chars());
  38.            }
  39.        echo $dir_main;
  40.     // header ("Content-type: image/jpeg");
  41.     // imagejpeg ($capture,"",100);
  42.        }
  43. }
  44.  
  45. $captcha_echo = new captcha($dir_main);
  46. $captcha_echo->generate_captcha($dir_main);



это 1ое (смотрим итог вывода в картинке прикрепленой)
2) если я сделаю так
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div><?php include($dir_main."/Class/Core/captcha.class.php"); ?> </div>

и в captchi
CODE (htmlphp):
скопировать код в буфер обмена
  1. $captcha_echo = new captcha($dir_main);
  2. $captcha_echo->generate_captcha($dir_main);
- то выше видно что все нормально ВЫВОДИТ однако картинку не хочет, ПУТИ ВЕРНЫЕ к файлам СТО раз проверял переменая $dir_main передается!!
3) если я сделаю так в capthi
CODE (htmlphp):
скопировать код в буфер обмена
  1. $captcha_echo->generate_captcha($dir_main);

а в форме html так
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div><?php $captcha_echo->generate_captcha($dir_main);?> </div>

а в файле индекс в которую инклудится форма а перед этим еще и сам класс.
итог мы получаем тот же что и в 1ом примере! но картинку не хочет выводить. нефига клонировать ненадо просто вывести КАРТИНКУ.
4)у меня передалась перменая без конструктура потому что я обращаюсь на прямую к методу и передаю ему переменую.
5)мб реально поможете с проблемой а не лечить будете то что и так работает?

путь до шрифта G:\web\xampp\htdocs\GE\captcha\fonts\ARIAL.TTF отнимаем наш dir_main = G:\web\xampp\htdocs\GE

получаем \captcha\fonts\ARIAL.TTF

а в php эт будет как $dir_main."\captcha\fonts\ARIAL.TTF"

G:\web\xampp\htdocs\GE\captcha\images\captcha.jpg - фон , делаем тоже самое получаем

$dir_main."\captcha\images\captcha.jpg";
и где я тут плин ошибся? а) если относительные пути верные Б) полный путь до корневого каталогая сайта тоже передается!.
Прикреплено изображение (Нажмите для увеличения)
111.jpg

(Отредактировано автором: 08 Января, 2012 - 07:41:53)

 
 Top
Зверь
Отправлено: 08 Января, 2012 - 07:27:40
Post Id



Частый гость


Покинул форум
Сообщений всего: 243
Дата рег-ции: Окт. 2011  


Помог: 7 раз(а)




Ладно, уговорили. Сейчас запущу сервер и сделаю, и не надо так нервничать)
 
 Top
PATCH
Отправлено: 08 Января, 2012 - 07:31:43
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




я не нервничаю просто говорю что передается. нет плин твердите не передается, дело в путях! надо магический конструктор , зачем он если я на прямую обращаюсь к методу и передаю ему переменую). а вот с реальной ошибкой ответа нету.

(Отредактировано автором: 08 Января, 2012 - 07:42:28)

 
 Top
Зверь
Отправлено: 08 Января, 2012 - 07:45:57
Post Id



Частый гость


Покинул форум
Сообщений всего: 243
Дата рег-ции: Окт. 2011  


Помог: 7 раз(а)




Вы передаете $dir_main как в конструктор так и методу generate_captcha()
В общем достаточно только методу.
Вот я сделал и не говорите что не работает)
Скачать файл: captcha.rar
Скачан раз: 109

(Отредактировано автором: 08 Января, 2012 - 07:55:57)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB