Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Защита от автоматической регистрации "сложение двух цифр"
 
 автор: Степан   (06.10.2009 в 15:14)   письмо автору
 
 

Доброго всем времени суток! Прошу Вашей помощи в решении следующей задачи:
Есть страница регистрации, на которой расположены формы и кнопка, после нажатия на которую высылается письмо на почтовый ящик. В форму "check" вводится число которое равно сумме двух чисел сгенерированных rand. Где я мог допустить ошибку, если после нажатии кнопки $z не принимает значения. Код данной страницы:

if (isset($_POST['send'])){
.......
if ($check != $z)    
   $error11  = "Вы ввели неверное число, наверное, Вы робот";
$errorAll=$error1.$error2.$error3.$error4.$error5.$error6.$error7.$error8.$error10.$error11;
    if ($errorAll ==""){
     $to = "post@mail.ru";
 
     mail($to,"Регистрация в Oriflame",$text);
     $send="Ваша заявка на регистрацию принята.";
         }                
    
     }
 $x=rand(1,100);
     $y=rand(1,10);
     $z=$x+$y;

  Ответить  
 
 автор: neadekvat   (06.10.2009 в 15:30)   письмо автору
 
   для: Степан   (06.10.2009 в 15:14)
 

$z - это $_POST['z'] после отправки формы
У вас в коде я вижу просто $z

  Ответить  
 
 автор: Степан   (06.10.2009 в 16:14)   письмо автору
 
   для: neadekvat   (06.10.2009 в 15:30)
 

заменил на if ($check != $_POST['z']), но $_POST['z'] после отправки формы не принимает значения

  Ответить  
 
 автор: neadekvat   (06.10.2009 в 16:23)   письмо автору
 
   для: Степан   (06.10.2009 в 16:14)
 

session_start();
$_SESSION['sum'] = $a + $b; // вот это на странице, где есть форма, надо вставить наверх, до вывода какого-либо символа в браузер. Т.е. рандомные числа и сумма уже известны. Потом идет разметка, выводятся числа (кроме суммы)


В обработчике формы добавляем тоже:

session_start();
if ($check != $_SESSION['sum']) echo 'Ошибка!';

  Ответить  
 
 автор: Степан   (06.10.2009 в 16:48)   письмо автору
 
   для: neadekvat   (06.10.2009 в 16:23)
 

Так ведь $a и $b нужно тоже получить $POST, если они стоят после $_SESSION['sum'], или они, если стоят выше, после нажатия на кнопку получают новое значение...

  Ответить  
 
 автор: neadekvat   (06.10.2009 в 17:10)   письмо автору
 
   для: Степан   (06.10.2009 в 16:48)
 

Вверху страницы получить две переменные
В сессию записать их сумму
А потом на странице вывести эти переменные никак?

  Ответить  
 
 автор: Trianon   (06.10.2009 в 17:15)   письмо автору
 
   для: neadekvat   (06.10.2009 в 17:10)
 

Одно непонятно. Зачем все эти танцы с бубном? Боту два числа не сложить?

  Ответить  
 
 автор: neadekvat   (06.10.2009 в 17:20)   письмо автору
 
   для: Trianon   (06.10.2009 в 17:15)
 

Я не знаю ответ.
Хотя тоже хотел предложить сделать так:

<input type="hidden" value="<?=$z?>" name="sum">

Безопасность на том же уровне будет

Я лично использую каптчу, и мозг не напрягает (если картинка разборчива) и безопасность выше ("продвинутые" боты и картинку распознают, конечно, но уже что-то)

  Ответить  
 
 автор: Степан   (07.10.2009 в 11:38)   письмо автору
 
   для: neadekvat   (06.10.2009 в 17:20)
 

Вы правы - каптча гораздо эффективнее и ставится довольно просто. Благодарю за совет!

  Ответить  
 
 автор: mihdan   (06.10.2009 в 17:04)   письмо автору
 
   для: Степан   (06.10.2009 в 15:14)
 

Не в тему, но

<?php
$errors 
= array();

if (
$check != $z$error[] = 'Текст ошибки 1';
if (
$check != $b$error[] = 'Текст ошибки 2';
.......

if (
sizeof($errors) > 0) {
    echo 
implode('<li>'$errors);
}
?>

  Ответить  
 
 автор: Trianon   (06.10.2009 в 17:05)   письмо автору
 
   для: mihdan   (06.10.2009 в 17:04)
 

а закрывать их как?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования