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 :: SQL, XSS, помогите защититься [2]

 PHP.SU

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


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

> Без описания
nomak_suntown
Отправлено: 29 Сентября, 2014 - 12:06:43
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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

[+]


ну я ведь только разбираюсь, все работает если вписывать только с плюсом и без условий, а я хочу, чтобы программа случайно решала, складывать числа или отнимать, вот... но как записать в imagettftext правильно эту переменную, не знаю.
(Добавление)
ааа кажется понял, точечки нехватает, а я ее пихал куда только можно))
(Добавление)
Благодарю!!!!!

(Отредактировано автором: 29 Сентября, 2014 - 12:09:45)

 
 Top
Sail
Отправлено: 29 Сентября, 2014 - 12:38:50
Post Id



Участник


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


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




nomak_suntown, какой такой "точечки"?!
Вот после:
PHP:
скопировать код в буфер обмена
  1. if ($aa > 5) { $a = "$number_1 + $number_2";} else
  2. if ($aa < 5) { $a = "$number_3 - $number_4";}

что будет с переменной $a, если $aa == 5, учитывая, что до вышеприведённого кода она не инициализируется...
 
 Top
nomak_suntown
Отправлено: 29 Сентября, 2014 - 12:44:28
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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

[+]


$number_1.' + '.$number_2;
вот какой такой
(Добавление)
$aa = rand (1,10);
if ($aa > 5) { $a = $number_1.' + '.$number_2;} else
if ($aa < 5) { $a = $number_3.' - '.$number_4;}
if ($aa = 5) { $a = $number_1.' + '.$number_2;}


Такая проблема:

в сессию передается 3+5, именно 3+5 а не результат = 8. Т.е. на другой странице при проверки в форме ввести результат - 8, будет не верно, надо вводить 3+5.. а все из-за того что в imagettftext записана переменная $a а не результат... че делать то)))
 
 Top
Sail
Отправлено: 29 Сентября, 2014 - 13:33:49
Post Id



Участник


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


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




nomak_suntown, лучше так:
PHP:
скопировать код в буфер обмена
  1. if ($aa > 5) {
  2.   $a = $number_1.' + '.$number_2;
  3. } elseif ($aa < 5) {
  4.   $a = $number_3.' - '.$number_4;
  5. } else {
  6.   $a = $number_1.' + '.$number_2;
  7. }

nomak_suntown пишет:
в сессию передается 3+5, именно 3+5 а не результат = 8. Т.

А что на картинке хотите видеть? Выражение, или число?
Если выражение и так, чтобы пользователь вводил результат, то сохраняйте в сессию результат.
Например, попутно с формированием выражения (строки), которая записывается в $a, вычисляйте, например $b = $number1+$number2 для случая $aa < 5 и в сессию пишите $b, а не $a.
Как-то так Улыбка
 
 Top
nomak_suntown
Отправлено: 29 Сентября, 2014 - 13:43:57
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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

[+]


Благодарю, сейчас попробую.
А чем Ваше выражение:

PHP:
скопировать код в буфер обмена
  1. if ($aa > 5) {
  2.  
  3.   $a = $number_1.' + '.$number_2;
  4.  
  5. } elseif ($aa < 5) {
  6.  
  7.   $a = $number_3.' - '.$number_4;
  8.  
  9. } else {
  10.  
  11.   $a = $number_1.' + '.$number_2;
  12.  
  13. }


лучше моего?
PHP:
скопировать код в буфер обмена
  1. $aa = rand (1,10);
  2.  if ($aa > 5) { $a = $number_1.' + '.$number_2;} else
  3.  if ($aa < 5) { $a = $number_3.' - '.$number_4;}
  4.  if ($aa = 5) { $a = $number_1.' + '.$number_2;}


Мне мое больше нравится, но нравится-не всегда значит правильно. Объясните пожалуйста, почему по-Вашему будет лучше?(правильней?)
(Добавление)
Всё работает как надо. Работает следующий код:

PHP:
скопировать код в буфер обмена
  1. $number_1 = rand(1, 10);
  2. $number_2 = rand(1, 4);
  3. $number_3 = rand(7, 10);
  4. $number_4 = rand(1, 4);
  5. $aa = rand (1,10);
  6. if
  7. ($aa > 5) {$a = $number_1.' + '.$number_2; $_SESSION['cpt_code'] = $number_1 + $number_2;} elseif
  8. ($aa < 5) {$a = $number_3.' - '.$number_4; $_SESSION['cpt_code'] = $number_3 - $number_4;} else
  9.           {$a = $number_1.' + '.$number_2; $_SESSION['cpt_code'] = $number_1 + $number_2;}
  10.  
  11. $font = "css/".rand(1,10);"";  //(случайно загружается 1 из 10 шрифтов, правильно реализовал? работает ведь..)
  12. //далее в imagettftext гружу переменную $a т.е. просто выражение, а не результат. А в сессию записал результат.
  13. imagettftext ($image, mt_rand(18,20), mt_rand(-8, 8), mt_rand(5,46), mt_rand(27,36), $color, "$font", $a);
  14. header("Content-type: image/png");
  15. imagepng($image);
  16. header('Cache-Control: no-store, no-cache, must-revalidate');
  17. header('Cache-Control: post-check=0, pre-check=0', FALSE);
  18. header('Pragma: no-cache');
  19. ?>



Теперь вопрос) Правильно ли? Правильно ли написание
PHP:
скопировать код в буфер обмена
  1. ($aa > 5) {$a = $number_1.' + '.$number_2; $_SESSION['cpt_code'] = $number_1 + $number_2;}
? По-моему муть какая-то.. мне кажется нужно до конца разобраться с точками и не писать одно и тоже по 10 раз, а можно сделать все намного проще.

И правильно ли я очищаю кеш вконце?
p.s. вначале этого скрипта стартует сессия, нужно ли вначале скрипта очищать сессию унсетом? гдето прочитал, что сначала она очищается, потом создается (в каптчах)


А так все работает, но мне кажется код кривой.
 
 Top
Мелкий Супермодератор
Отправлено: 29 Сентября, 2014 - 14:02:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




nomak_suntown пишет:
if ($aa = 5)

Хочу обратить внимание на то, что это условие будет истинно всегда, при абсолютно любом $aa.
Смысла делать две идентичные ветки с > 5 и =5 тем более нету. Оператор сравнения >= вполне себе существует.
PHP:
скопировать код в буфер обмена
  1. if ($aa > 5) {
  2.     $a = $number_1.' + '.$number_2;
  3. } else {
  4.     $a = $number_3.' - '.$number_4;
  5.     }


Оформление кода - смотрите стандарты кодирования. Но с вашим уровнем туда ещё преждевременно соваться, позже сами дойдёте.
У вас при беглом просмотре теряется else, его не видно. И кажется, будто это 3 равноправных условия, а не взаимосвязанных.


-----
PostgreSQL DBA
 
 Top
nomak_suntown
Отправлено: 29 Сентября, 2014 - 14:18:03
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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

[+]


понял. А что касательно записи в сессию? и записи в картинку? так пойдет?
или такую простую каптчу, как случайно определить знак + или - и показать пользователю картинку 1+2 или 1-2 и чтобы он решил эту задачку, полбюбому можно проще написать..?

А в остальном большое спасибо, во многом разобрался и вообще пока все работает.
 
 Top
nomak_suntown
Отправлено: 20 Октября, 2014 - 16:16:03
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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

[+]


-

(Отредактировано автором: 20 Октября, 2014 - 16:18:14)

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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB