PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
stdm
Отправлено: 02 Июля, 2013 - 08:22:38
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2013
Помог: 0 раз(а)
Добрый день.
Помогите разобраться с порядком вывода данных на html страницу из сессии.
Директория, с 3-мя файлами. Файл с классом генерации капчи(kcaptcha), index.php - создание экземпляра класса и вывод капчи, form.html - форма, с обращением к index.php для вывода картинки капчи. При генерации капчи, набор символов сохраняется в переменной сессии.
Код формы:
CODE (
htmlphp ):
скопировать код в буфер обмена
<? php
if ( ! empty ( $_POST [ 'keystring' ] ) ) {
if ( $_POST [ 'keystring' ] === $_SESSION [ 'captcha' ] )
echo 'OK' ;
else
echo 'BAD' ;
}
echo $_SESSION [ 'captcha' ] ;
?>
< form action= "" method= "post" >
< p> Enter text shown below:</ p>
< p>< img src= "http://test1.ru/captcha/index.php" ></ p>
< p>< input type= "text" name= "keystring" ></ p>
< p>< input type= "submit" value= "Check" ></ p>
</ form>
<? php
echo $_SESSION [ 'captcha' ] ;
?>
Почему при таком коде формы, после обращения к index.php, когда капча сгенерирована, выведена на страницу и ее символы сохранены в сессии, echo $_SESSION['captcha'] выдает пустую строку?
По логике ведь должен выдать после обращения к index.php, уже сохраненные даннные.
echo $_SESSION['captcha'] - пустая строка
<img src="http://test1.ru/captcha/index.php"> - генерация новой капчи
echo $_SESSION['captcha'] - символы капчи
При этом после отправки формы, скрипт корректно сравнивает значение из формы со значением сессии.
stdm
Отправлено: 02 Июля, 2013 - 09:21:14
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2013
Помог: 0 раз(а)
класс генерирующий капчу
CODE (
htmlphp ):
скопировать код в буфер обмена
<? php
# KCAPTCHA PROJECT VERSION 2.0
# Automatic test to tell computers and humans apart
# Copyright by Kruglov Sergei, 2006, 2007, 2008, 2011
# www.captcha.ru, www.kruglov.ru
# System requirements: PHP 4.0.6+ w/ GD
# KCAPTCHA is a free software. You can freely use it for developing own site or software.
# If you use this software as a part of own sofware, you must leave copyright notices intact or add KCAPTCHA copyright notices to own.
# As a default configuration, KCAPTCHA has a small credits text at bottom of CAPTCHA image.
# You can remove it, but I would be pleased if you left it. ;)
# See kcaptcha_config.php for customization
class KCAPTCHA{
// generates keystring and image
function KCAPTCHA( ) {
# KCAPTCHA configuration file
$alphabet = "0123456789abcdefghijklmnopqrstuvwxyz" ; # do not change without changing font files!
# symbols used to draw CAPTCHA
//$allowed_symbols = "0123456789"; #digits
//$allowed_symbols = "23456789abcdegkmnpqsuvxyz"; #alphabet without similar symbols (o=0, 1=l, i=j, t=f)
$allowed_symbols = "23456789abcdegikpqsvxyz" ; #alphabet without similar symbols (o=0, 1=l, i=j, t=f)
# folder with fonts
$fontsdir = 'fonts' ;
# CAPTCHA string length
$length = mt_rand ( 5, 7) ; # random 5 or 6 or 7 //$length = 6;
# CAPTCHA image size (you do not need to change it, this parameters is optimal)
$width = 160 ;
$height = 80 ;
# symbol's vertical fluctuation amplitude
$fluctuation_amplitude = 8 ;
#noise
//$white_noise_density=0; // no white noise
$white_noise_density = 1/ 6 ;
//$black_noise_density=0; // no black noise
$black_noise_density = 1/ 30 ;
# increase safety by prevention of spaces between symbols
$no_spaces = true ;
# show credits
$show_credits = true ; # set to false to remove credits line. Credits adds 12 pixels to image height
$credits = 'www.captcha.ru' ; # if empty, HTTP_HOST will be shown
# CAPTCHA image colors (RGB, 0-255)
//$foreground_color = array(0, 0, 0);
//$background_color = array(220, 230, 255);
# JPEG quality of CAPTCHA image (bigger is better quality, but larger file size)
$jpeg_quality = 90 ;
//require(dirname(__FILE__).'/kcaptcha_config.php');
$fontsdir_absolute = dirname ( __FILE__ ) . '/' . $fontsdir ; if ( $handle = opendir ( $fontsdir_absolute ) ) { while ( false !== ( $file = readdir ( $handle ) ) ) { $fonts [ ] = $fontsdir_absolute . '/' . $file ;
}
}
}
$alphabet_length = strlen ( $alphabet ) ;
do {
// generating random keystring
while ( true ) {
$this -> keystring = '' ;
for ( $i = 0 ; $i < $length ; $i ++ ) {
$this -> keystring .= $allowed_symbols { mt_rand ( 0, strlen ( $allowed_symbols ) - 1) } ; }
if ( ! preg_match ( '/cp|cb|ck|c6|c9|rn|rm|mm|co|do|cl|db|qp|qb|dp|ww/' , $this -> keystring ) ) break ; }
unset ( $_SESSION [ 'captcha' ] ) ; $_SESSION [ 'captcha' ] = $this -> keystring ;
$symbol = 0 ;
$reading_symbol = false ;
// loading font
for ( $i = 0 ; $i < $fontfile_width && $symbol < $alphabet_length ; $i ++ ) {
if ( ! $reading_symbol && ! $transparent ) {
$font_metrics [ $alphabet { $symbol } ] = array ( 'start' => $i ) ; $reading_symbol = true ;
continue ;
}
if ( $reading_symbol && $transparent ) {
$font_metrics [ $alphabet { $symbol } ] [ 'end' ] = $i ;
$reading_symbol = false ;
$symbol ++;
continue ;
}
}
// draw text
$x = 1 ;
if ( $odd == 0) $odd =- 1 ;
for ( $i = 0 ; $i < $length ; $i ++ ) {
$m = $font_metrics [ $this -> keystring { $i } ] ;
$y = ( ( $i % 2) * $fluctuation_amplitude - $fluctuation_amplitude / 2) * $odd
+ ( $height - $fontfile_height ) / 2 ;
if ( $no_spaces ) {
$shift = 0 ;
if ( $i > 0) {
$shift = 10000 ;
for ( $sy = 3 ; $sy < $fontfile_height - 10 ; $sy += 1) {
for ( $sx = $m [ 'start' ] - 1 ; $sx < $m [ 'end' ] ; $sx += 1) {
$opacity = $rgb >> 24 ;
if ( $opacity < 127) {
$left = $sx - $m [ 'start' ] + $x ;
$py = $sy + $y ;
if ( $py > $height ) break ;
for ( $px = min ( $left , $width - 1) ; $px > $left - 200 && $px >= 0 ; $px -= 1) { if ( $color + $opacity < 170 ) { // 170 - threshold
if ( $shift > $left - $px ) {
$shift = $left - $px ;
}
break ;
}
}
break ;
}
}
}
if ( $shift == 10000) {
}
}
} else {
$shift = 1 ;
}
imagecopy ( $img , $font , $x - $shift , $y , $m [ 'start' ] , 1, $m [ 'end' ] - $m [ 'start' ] , $fontfile_height ) ; $x += $m [ 'end' ] - $m [ 'start' ] - $shift ;
}
} while ( $x >= $width - 10) ; // while not fit in canvas
//noise
for ( $i = 0 ; $i < ( ( $height - 30) * $x ) * $white_noise_density ; $i ++ ) {
}
for ( $i = 0 ; $i < ( ( $height - 30) * $x ) * $black_noise_density ; $i ++ ) {
}
$center = $x / 2 ;
// credits. To remove, see configuration file
$foreground = imagecolorallocate ( $img2 , $foreground_color [ 0] , $foreground_color [ 1] , $foreground_color [ 2] ) ; $background = imagecolorallocate ( $img2 , $background_color [ 0] , $background_color [ 1] , $background_color [ 2] ) ; $credits = empty ( $credits ) ?$_SERVER [ 'HTTP_HOST' ] : $credits ;
// periods
$rand1 = mt_rand ( 750000, 1200000) / 10000000 ; $rand2 = mt_rand ( 750000, 1200000) / 10000000 ; $rand3 = mt_rand ( 750000, 1200000) / 10000000 ; $rand4 = mt_rand ( 750000, 1200000) / 10000000 ; // phases
$rand5 = mt_rand ( 0, 31415926) / 10000000 ; $rand6 = mt_rand ( 0, 31415926) / 10000000 ; $rand7 = mt_rand ( 0, 31415926) / 10000000 ; $rand8 = mt_rand ( 0, 31415926) / 10000000 ; // amplitudes
//wave distortion
for ( $x = 0 ; $x < $width ; $x ++ ) {
for ( $y = 0 ; $y < $height ; $y ++ ) {
$sx = $x + ( sin ( $x * $rand1 + $rand5 ) + sin ( $y * $rand3 + $rand6 ) ) * $rand9 - $width / 2+ $center + 1 ; $sy = $y + ( sin ( $x * $rand2 + $rand7 ) + sin ( $y * $rand4 + $rand8 ) ) * $rand10 ;
if ( $sx < 0 || $sy < 0 || $sx >= $width - 1 || $sy >= $height - 1) {
continue ;
} else {
}
if ( $color == 255 && $color_x == 255 && $color_y == 255 && $color_xy == 255) {
continue ;
} else if ( $color == 0 && $color_x == 0 && $color_y == 0 && $color_xy == 0) {
$newred = $foreground_color [ 0] ;
$newgreen = $foreground_color [ 1] ;
$newblue = $foreground_color [ 2] ;
} else {
$frsx1 = 1- $frsx ;
$frsy1 = 1- $frsy ;
$newcolor = (
$color * $frsx1 * $frsy1 +
$color_x * $frsx * $frsy1 +
$color_y * $frsx1 * $frsy +
$color_xy * $frsx * $frsy ) ;
if ( $newcolor > 255) $newcolor = 255 ;
$newcolor = $newcolor / 255 ;
$newcolor0 = 1- $newcolor ;
$newred = $newcolor0 * $foreground_color [ 0] + $newcolor * $background_color [ 0] ;
$newgreen = $newcolor0 * $foreground_color [ 1] + $newcolor * $background_color [ 1] ;
$newblue = $newcolor0 * $foreground_color [ 2] + $newcolor * $background_color [ 2] ;
}
}
}
header ( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' ) ; header ( 'Cache-Control: no-store, no-cache, must-revalidate' ) ; header ( 'Cache-Control: post-check=0, pre-check=0' , FALSE ) ; header ( "Content-Type: image/jpeg" ) ; header ( "Content-Type: image/gif" ) ; header ( "Content-Type: image/x-png" ) ; }
}
// returns keystring
function getKeyString( ) {
return $this -> keystring ;
}
}
?>
index.php
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB