нужна помощь, чтобы добавить контактную форму с капчей
Привет, я новичок в PHP и хотел бы получить некоторую помощь, пожалуйста. Я создал контактную форму и хотел бы добавить немного капчи. Я создал несколько gif-изображений, на которых есть цифры с добавлением некоторого шума, и назвал code_01.gif для № 1, code_02.gif для no2 и т. Д. и т. Д. Я поместил некоторые из них в свою форму, статически, для целей отображения следующим образом:
<img src="images/code_01.gif" />
<img src="images/code_07.gif" />
<img src="images/code_01.gif" />
<img src="images/code_08.gif" />
<img src="images/code_03.gif" />
<img src="images/code_07.gif" />
<input name="captcha" type="text" id="captcha" />
Я хотел бы добавить некоторые функции для случайного отображения кодов изображений каждый раз, а также проверить, соответствует ли ввод совпадает с отображаемыми 6 цифрами.
Буду признателен за любую помощь.
3 answers
Простая PHP-капча
Это один из самых простых сценариев КАПЧИ, которые вы когда-либо будете использовать. Хотя он не скрывает текст, он хорошо послужит своей цели для многих людей, которым нужно низкоуровневое решение для КАПЧИ. Этот сценарий практически не требует настройки. Единственная зависимость - это библиотека PHP GD.
Он может быть таким же простым в использовании, но он также настраивается:
<?php
session_start();
include("captcha.php");
$_SESSION['captcha'] = captcha();
echo '<img src="' . $_SESSION['captcha']['image_src'] . '" alt="CAPTCHA" />';
?>
Демонстрация: http://labs.abeautifulsite.net/simple-php-captcha /
Вы также можете использовать это: Изображение безопасности
Securimage - это бесплатный PHP-скрипт КАПЧИ с открытым исходным кодом для создания сложных изображений и кодов КАПЧИ для защиты форм от спама и злоупотреблений. Его можно легко добавить в существующие формы на вашем веб-сайте, чтобы обеспечить защиту от спам-ботов. Он может работать практически на любом веб-сервере, если у вас установлен PHP и поддержка GD в PHP. Securimage выполняет все: от создания изображений с КАПЧЕЙ до проверки введенного кода. Слышимый коды могут передаваться в браузер с помощью Flash для людей с ослабленным зрением.
Вот простая математическая вещь типа captha, которую я нашел давным-давно.
Преимущества:
- Нет изображений, поэтому меньше использование полосы пропускания.
- Никакой внешней зависимости.
ПРОЦЕСС ПОТОКА
В form.php
:
- Выберите одно случайное число
$n1
- Выберите другое случайное число
$n2
- Вычислить
$n1
&$n2
с различными математическими операциями и сохраните его как$result
, чтобы результирующее число было непредсказуемым и не выровненным с$n1+$n2
- Эхо "Что такое
$n1
+$n2
?" - Попросите пользователя ввести ответ на вопрос, заданный на шаге 4.
- Добавьте
$result
в качестве скрытого значения в форме. - При отправке значения
$_POST
обрабатываютсяcheck.php
.
В check.php
:
- Если установлено значение
$_POST["answer"]
, сохраните его в$answer
- Вычислите
$answer
таким же образом, как это было вычислено на шаге 3 изform.php
- Теперь, если
$answer
равно$_POST["result"]
, проверяется, что пользователь Человек.
Имейте в виду, что $answer
- это ответ, отправленный пользователем & $result
- это наш результат после выполнения математических операций над $answer
.
КОД:
Файл:form.php
<?php
$n1 = rand(1,15);
$n2 = rand(1,15);
//start making our result unpredictable & non-aligned with hidden value
$result = $n1+$n2;
$result = ($result*3)-2;
$result = ($result+4)*5;
$question="what is $n1 + $n2?";
?>
<form method="post" action="check.php">
<?php echo $question.PHP_EOL; ?>
<input name="answer" type="text"><br />
<input type="hidden" name="result" value="<?php echo $result; ?>">
</form>
Файл:check.php
<?php
if(isset($_POST["answer")){
$answer = $_POST["answer"];
// start doing same math on $answer
$answer = ($answer*3)-2;
$answer = ($answer+4)*5;
if($answer == $_POST["result"]{
// echo Hurray, you are Human..
// Do anything here..
}else{
echo "Wrong Answer";
}
Реализация логики на http://codepad.org/2MtULNhZ
Ключ в том, чтобы усложнить формулу кодирования и декодирования. Так что кто-то, глядя на hidden form value
result
и Question
не следует выяснять связь между обоими их.