Создать капчу для личного сайта очень просто! Конечно можно воспользоваться сервисами от Яндекса или от Гугла но там так много регистрации и всяческих токенов, с которыми не каждый новичок сможет разобраться, что куда проще написать собственный код который со временем можно только улучшать и всячески модернизировать как душе будит угодно!
Зачем она нужна эта капча?
Ну например, что бы на ваш сайт смогли зайти только реальные люди. Что бы всякие серферы не смогли клонировать контент вашего сайта. Ну и просто защита от DDoS атак.
С чего начать?
Начать надо с логической условности. Например так. Если человек первый раз посещает сайт то он должен ввести капчу если он её вводит правильно то ему открывается доступ к контенту сайта, а если он её вводит не правильно до доступ ему на сайт будет закрыт.
Значит от сюда следует что должна быть некая форма ввода и пример того что человек должен будит сделать самостоятельно.
Например в вести код - 12345
если(код==12345)то{вход открыт}иначе{закрыт}
на языке PHP это будет выглядеть вот так:
if ($capcha==12345){ echo"ок!";}else{echo"не верно!";exit;}
А как логическая функция поймет, что человек ввел 12345 в переменную $capcha ?
Для этой цели воспользуемся методам POST и передадим её значение через тег формы:
$capcha=$_POST[capcha]; // приём
<form method='post' action=''>
<input name='capcha' type='text' >
<button type='submit'>Отправить!</button>
Обратите внимание что action='' пустой , это значит что передавать данные мы будит на эту же самую страницу в которой и будем писать весь наш код!
Пример самого простого кода капчи:
<?
$capcha=$_POST[capcha]; // приём
if ($capcha==12345)
{ echo"ок!";
}else{
echo"
<center><br><br><br><br><br><br><br><br>
<p>Введите 12345</p>
<form method='post' action=''>
<input name='capcha' type='text' >
<button type='submit'>Отправить!</button>
</center>
";
exit;
}
?>
...............................
КОНТЕНТ САЙТА!
...............................
Очен простая капча, давайте её усложнять! Например сделаем так чтобы каждый раз надо было вводить разное цифры. Для этого воспользуемся методам генерации случайного числа - rand
<?
$capcha=$_POST[capcha]; // приём веденных значений
$cap_x=$_POST[x]; // приём случайного x
if ($capcha==$cap_x and $capcha==true)
{ echo"ок!";
}else{
$x=rand(10000,99999);// генерируем любое число от 10000 до 99999 и записываем в $x
echo"
<center><br><br><br><br><br><br><br><br>
<p>Введите $x</p>
<form method='post' action=''>
<input name='capcha' type='text' >
<input type='hidden' name='x' value='$x' ><!--скрытно-->
<button type='submit'>Отправить!</button>
</center>
";
exit;
}
?>
...............................
КОНТЕНТ САЙТА!
...............................
Познав основы логики капчи вы сможете её делать все интереснее и интереснее!
Например использовать куки что бы человеку был доступ на сайт в течении 24 часов без повторного ввода капчи - setcookie("ok", "1", time() + (3600 * 24) );
Давайте ее внедрим:
<?
$ok=$_COOKIE["ok"];
$capcha=$_POST[capcha]; // прием веденных значений
$cap_x=$_POST[x]; // прием случайного x
if ($capcha==$cap_x and $capcha==true || $ok==1 ){
echo"ок!";
setcookie("ok", "1", time() + (3600 * 24) );
}else{
$x=rand(10000,99999);// генерируем любое число от 10000 до 99999 и записываем в $x
echo"
<center><br><br><br><br><br><br><br><br>
<p>Введите $x</p>
<form method='post' action=''>
<input name='capcha' type='text' >
<input type='hidden' name='x' value='$x' ><!--скрытно-->
<button type='submit'>Отправить!</button>
</center>
";
exit;
}
?>
...............................
КОНТЕНТ САЙТА!
...............................
Так же можно играться со стилям капчи и вместо цифр показывать картинки, или звуки, или загадку, или впускать на сайт только тех людей у которым будут доступ к системе по определённому IP ! Или тех кто оплатил токен ключ прислав вам денюшки на кошелёчек!
Всё это можно реализовать самостоятельно и абсолютна бесплатно!
Ну и в конце я приведу пример шифрования значений капчи:
<?
$ok=$_COOKIE[ok];
$capcha=$_POST[capcha]; // прием веденных значений
$cap_x=$_POST[x]; // прием случайного x
$capcha=md5($capcha); //кодируем хеш в виде 32-символьного шестнадцатеричного числа
if ( $ok==false ){
if ($capcha==$cap_x and $capcha==true ){
echo"ок!";
setcookie("ok", "1", time() + (3600 * 24) ); // сохраняем куку на 24 часа
}else{
for ($i=0;$i<6;$i++){
$x=rand(0,9);// генерируем любое число от 0 до 9 и записываем в $x1
$w=$w."<img src='$x-картинка.png' >"; // картинок должно быть от 0 до 9
$s=$s.$x;
}
$x_cod=md5($s); //кодируем хеш в виде 32-символьного шестнадцатеричного числа
echo"
<center><br><br><br><br><br><br><br><br>
<p>$w</p>
<form method='post' action=''>
<input name='capcha' type='text' >
<input type='hidden' name='x' value='$x_cod' ><!--скрытно-->
<button type='submit'>Отправить!</button>
</center>
";
exit;
}
}
?>
...............................
КОНТЕНТ САЙТА!
...............................
Готовый пример можно скачать по ссылке:
https://disk.yandex.ru/d/-2_0T8jnuxik9A