Делаю капчу, возникла странная проблема - на картинке рисуется не то число которое генерирует функция rand, если задавать число вручную без rand то выводится на картинке и пишется в БД одно и тоже число, то которое я задал, а вот при использовании ранд число на картинке и то что пишется в БД не совпадает совершенно. Я весь код 500 раз перепроверил, все должно работать нормально но выходит вот эта хрень. В чем может быть проблема? Заранее спасибо за помощь.
Ну попробуем поиграть в экстрасенсов. Скорее всего у тебя идет несколько генераций rand, один раз ты вызываешь рандом при отрисовке, второй раз ты его вызываешь при записи. Что бы этого не было - необходимо присвоить переменной этот рандом и уже отрисовывать и записывать эту переменную.
О да...похоже меня тут принимают за дауна... Вот код(надо было сразу конешн кинуть но чет тупанул): PHP: if ($_action == "get_captcha") { header("Content-type: image/gif"); $captcha_code = rand(100, 999); //Случайное число //$captcha_code = 547; $ip = $_SERVER['REMOTE_ADDR']; $time = time(); //Время жизни кода капчи $r_time = $time - 60*5; $dbl->sql_query("DELETE FROM `cap_captcha` WHERE `time` < '{$r_time}'"); $query = $dbl->sql_query("SELECT count(*) FROM `cap_captcha` WHERE `ip` = '{$ip}'"); $captcha_count = $dbl->sql_fetchfield(0,0,$query); if ($captcha_count > 0) { $dbl->sql_query("UPDATE `cap_captcha` SET `code` = '{$captcha_code}', `time` = '{$time}' WHERE `ip` = '{$ip}'"); } else { $query = $dbl->sql_query("INSERT INTO `cap_captcha` (`ip`,`code`,`time`) VALUES ('{$ip}', '{$captcha_code}', '{$time}')"); } //$font = rand (1, 25); //Случайный выбор шрифта $font = 26; $color1 = rand (10, 200); $color2 = rand (10, 200); $color3 = rand (10, 200); $rgb=0x2f2f2f;//цвет заливки $txt_box=imagettfbbox(18, 0, "captcha_lib/".$font.".ttf", $captcha_code); if($txt_box[0]<0){$txt_box[0]=$txt_box[0]*(-1);} if($txt_box[1]<0){$txt_box[1]=$txt_box[1]*(-1);} if($txt_box[2]<0){$txt_box[2]=$txt_box[2]*(-1);} if($txt_box[3]<0){$txt_box[3]=$txt_box[3]*(-1);} if($txt_box[4]<0){$txt_box[4]=$txt_box[4]*(-1);} if($txt_box[5]<0){$txt_box[5]=$txt_box[5]*(-1);} if($txt_box[6]<0){$txt_box[6]=$txt_box[6]*(-1);} if($txt_box[7]<0){$txt_box[7]=$txt_box[7]*(-1);} $box_width=($txt_box[0]+$txt_box[2]+$txt_box[4]+$txt_box[6])/2; $box_height=($txt_box[1]+$txt_box[3]+$txt_box[5]+$txt_box[7])/2; //$img = imagecreatetruecolor($box_width+1,$box_height+1);//вспомагательное изображение $img = imagecreatetruecolor(60,33);//вспомагательное изображение imagefill($img, 0, 0, $rgb);//заливаем его ... //imageColorTransparent($img, $rgb); imagettftext($img, 18, 0, 1, $box_height-2, imageColorAllocate($img, $color1,$color2,$color3), "captcha_lib/".$font.".ttf", $captcha_code); imagegif($img);//готово к употреблению //убираем после себя imagedestroy($img); exit(); }
$captcha_code = rand(100, 999); Вот эта строчка генерит случайную цифру, если заменяю ее на: $captcha_code = 123; (т.е. просто на задаваемое число) То все становится нормально.