Ошибка в функции. Как определить.

seosniks
На сайте с 13.08.2007
Offline
389
731

Всем добрый вечер.

Возникла проблемма У меня делаю Сайт.

Стоит пока локально на денвер 3

Не работает функция генерации капчи.

Ошибка Неподдержанные типы операнда

Сама функция вот

function ungenerate_key($key)

{
$key=substr($key, 7, strlen($key)-7);
$key_X=$key[0];
$key[0]=$key[strlen($key)-1];
$key[strlen($key)-1]=$key_X;
$key=($key-1)/2+777;

return $key;
};

Ошибка в строке

$key=($key-1)/2+777;

Fatal error: Unsupported operand types in Y:\home\com\ on line 409

Елси закоментировать то выводит надпись array тобишь пустоцй массив

если поставить @, то ничего не помогает.

Может кто подскажет как найти ошибку. На серваке все пашет Норм

tommy-gung
На сайте с 22.11.2006
Offline
304
#1

я так понимаю в $key - текст записан, вот и не вычитается

Здесь не могла быть ваша реклама
seosniks
На сайте с 13.08.2007
Offline
389
#2
tommy-gung:
я так понимаю в $key - текст записан, вот и не вычитается

В в $key Должно быть значение циферок выводимых на картинку.

На сервере работает а в от на денвере не хочет

если в $key=777; то в капче выведет 777. но работать не будет

$key=($key-1)/2+777; Здесь значение $key вычитается 1 и затем делиться на 2+777

Елси я не ошибаюсь.

И то что получается должно быть выведено

G
На сайте с 26.01.2008
Offline
11
#3

попробуй привести key к числу (int)$key

seosniks
На сайте с 13.08.2007
Offline
389
#4
gilyaev:
попробуй привести key к числу (int)$key

Вот весь код А ошибку не могу определить. Мало опыта работы с графикой

если указать $key=777;

То и в капче будет 777. но это не верное значение. ПРидеться капчу переписать наверное

чтоб работала нормально



<?php
function generate_key()
{
mt_srand((double)microtime()*1000000);
$key_confirm = mt_rand(100000,999999);
$key_crypt = ($key_confirm-777)*2+1;
$key_crypt = (string)$key_crypt;

$key_X=$key_crypt[0];
$key_crypt[0]=$key_crypt[strlen($key_crypt)-1];
$key_crypt[strlen($key_crypt)-1]=$key_X;
$key_confirm_mith = mt_rand(1000000,9999999);
$key=(string)$key_confirm_mith.$key_crypt;

return $key;
};

function ungenerate_key($key)
{
$key=substr($key, 7, strlen($key)-7);
$key_X=$key[0];
$key[0]=$key[strlen($key)-1];
$key[strlen($key)-1]=$key_X;
$key=($key-1)/2+777;

return $key;
};

$key = ungenerate_key($key);
header("Content-type: image/png");

$im = imagecreatefromgif("images/confirm.gif");

ImageString($im,5,17,8,$key, 9);

ImagePng($im);
ImageDestroy($im);


?>
Mmonger
На сайте с 01.12.2005
Offline
165
#5

А intval($key) не помог?

Всё будет хорошо, но мы приложим усилия!
seosniks
На сайте с 13.08.2007
Offline
389
#6
Mmonger:
А intval($key) не помог?

Что то не выходит.

Завтра попробую прикрутить такую капчу

$r=rand(1000000,9999999);


for($i=0;$i < 7;$i++)//разбиваем секретный код на массив чисел
$arr[$i]=substr($r,$i,1);

$im=imagecreate(130,40);//создаем картинку
imagecolorallocate($im,255,255,255);
$a=0;
for($i=0;$i < 7;$i++)//наносим код на картинку
{
$color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagestring($im,rand(2,9),$a+=15,rand(0,20),$arr[$i],$color);
}
header("Content-type: image/jpeg");
imagejpeg($im,'',100);//выводим капчу
М
На сайте с 08.02.2006
Offline
59
#7

В $key[0]=$key[strlen($key)-1] у вас $key стал массивом и далее в $key[strlen($key)-1]=$key_X strlen к нему применять нельзя. Strlen - строковая функция, а вы ей скармливаете массив.

seosniks
На сайте с 13.08.2007
Offline
389
#8
Магнат:
В $key[0]=$key[strlen($key)-1] у вас $key стал массивом и далее в $key[strlen($key)-1]=$key_X strlen к нему применять нельзя. Strlen - строковая функция, а вы ей скармливаете массив.

Код скрипта не мой по этому разобраться в чужих извращениях трудно :D

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий