Я не знаю кто такой Жур и чему он учит, но советовал бы вам учить язык программирования не по мультикам, а по учебникам. Хотите научиться вязать спицами? Согласен, в этом случае мультики помогут.
Изучать надо с простого до сложного, ибо вы не понимая многого, пытаетесь охватить необъятное.
Здесь два простых файла, сохраните первый под именем index.php, а второй captcha.php на локальном сервере в созданном локальном домене тестовом. Запустите.
Код из JS имеет только нативный обработчик, изменяющий код каптчи щелчком по самой каптче. Отправляйте форму ничего в нее не вводя - результата не будет, будет вновь предлагаться форма. Введите только код каптчти, опять будет форма. Введите и имя, но с неверным кодом каптчи - опять форма. Все это ошибки, которые не отвечают требованию проверки:
if($post['secret'] && $post['secret']==$_SESSION['secret'] && $post['name'])
и только если и имя введено и код каптчи верный, то будет результат.
Поймите как это работает, и тут самое главное, это сам механизм сессии, состояние которой можно проверять выводом ее содержимого на экран, а при обновлении каптчи записью в файл.
Поймете это простое, тогда следующий этап - прикрутить к этому асинхронный обмен клиента с сервером, и т.д., и т.п.
<?php
session_start();
if($post = array_diff(array_map('trim', $_POST), [''])) {
if($post['secret'] && $post['secret']==$_SESSION['secret'] && $post['name']) {
$_SESSION['clubman'] = htmlspecialchars($post['name']);
unset($_SESSION['secret']);
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
form {
width: 30%;
margin: 40px auto;
}
label {
display: block;
margin: 10px;
}
label * {
vertical-align: middle;
}
img {
cursor: pointer;
}
button {
padding: 3px 15px;
margin-top: 10px;
float: right;
}
</style>
</head>
<body>
<?php
if(!$_SESSION['clubman']) {
?>
<form method="post">
<fieldset>
<legend>Вы не робот?</legend>
<label>Имя: <input name="name" /></label>
<label>Код: <input name="secret" /> <img src="captcha.php?<?=time()?>" onclick="this.src=this.src.replace(/\d+/, new Date().getTime())" /></label>
</fieldset>
<button>Подтверждаю</button>
</form>
<?php
} else {
?>
<p>Приветствуем участника клуба <?=$_SESSION['clubman']?>!</p>
<?php
}
?>
</body>
</html>
<?php
session_start();
$code = rand(1000,9999);
$_SESSION['secret'] = $code;
$img = imagecreate (50, 23);
imagecolorallocate($img, 0, 0, 0);
$color = imagecolorallocate($img, 255, 255, 255);
imagestring($img, 5, 6, 3, $code, $color);
header('Cache-control: no-cache');
header('Content-type: image/gif');
imagegif($img);
imagedestroy($img);
?>