БлогNot. Пишем текстовую капчу на PHP и Javascript

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

Пишем текстовую капчу на PHP и Javascript

Капча должна быть не сложнее, чем в этом блоге (текстовая строка, размеченная выбранными тегами), но при этом обладать следующими свойствами:

Для работы капчи понадобятся включённые в браузере Javascript и Cookies.

Вот описание порядка действий и основных функций:

Как и в любых скриптах, работающих с данными сессии, до вывода любой разметки должна быть вызвана стандартная функция session_start. Вот полный код скрипта-примера, его можно выполнить как файл .php на локальном хосте, например, в Denwer. Проверено на PHP 5.5.9.

<?php  session_start(); ?>

<div id="sform"></div>

<?php
 if (isset($_POST['ok'])) {
  $valid='';
  if (isset($_SESSION['valid'])) $valid=$_SESSION['valid'];
  $code = strval(intval($_POST['code'])-1000);
  if (md5($code) == $valid) { 
   echo '<b>ok</b>'; 
   //любые действия, выполняемые при правильном вводе
   exit; 
  }
  else {
   echo '<b>no</b>';
   //при ошибке выводится no и работа скрипта продолжается
  }
 }

 function visible_code ($s) {
  $tags = Array (
   Array ('<span>','</span>'), Array ( '<b>','</b>'), Array ( '<i>','</i>'),
   Array ('<u>','</u>'), Array ('<s>','</s>'), Array ('<sub>','</sub>'),
   Array ('<sup>','</sup>'), Array ('<big>','</big>'), Array ('<small>','</small>')
  );
  $len = strlen ($s);
  $res = '';
  for ($i = 0; $i < $len; $i++) {
   $c = substr ($s, $i, 1);
   $n = rand(0, count($tags)-1);
   $res .= $tags[$n][0].$c.$tags[$n][1];
  }
  return $res;
 }

 function generate_code () {
  srand (time());
  $str = 'Введите код сообщения: ';
  $valid = mt_rand(1000,9999);
  $str .= visible_code ($valid);
  $_SESSION['valid'] = md5 ($valid - 1000);
  $str .= ' <input type="text" name="code" size="5" maxlength="4" value="">';
  return $str;
 }

 function commentform () { 
  return '<form method="post">'.generate_code().
   ' <input type="submit" name="ok"></form>';
 }

 function trim1 ($string) { return preg_replace("/\s+/"," ",trim($string)); }

 echo '<script>
  window.addEventListener("load", function() { 
   document.getElementById("sform").innerHTML = \''.trim1(commentform()).'\'; 
  });
 </script>
 <noscript>Нужен включённый в Вашем браузере Javascript</noscript>';
?>

Вот как выглядит приложение в браузере Firefox:

Текстовая капча в Firefox, скриншот
Текстовая капча в Firefox, скриншот

теги: php javascript программирование безопасность

12.01.2019, 12:43; рейтинг: 117

  свежие записипоиск по блогукомментариистатистикао "вирусах" в архивах .zip

Наверх Яндекс.Метрика
© PerS
вход