Следующий файл, который нам понадобиться, будет отвечать за обработку формы отзывов:
action.php
<?php
require_once("connect.php");
// добавляем данные в таблицу comments:
try
{
// проверяем заполненость полей формы:
if(empty($_POST['name'])){exit('<font color="coral">He заполнено поле "Ник/имя"</font>');}
if(empty($_POST['mesage'])){exit('<font color="coral">He заполнено поле "Сообщение"</font>');}
// добавляем данные в таблицу comments:
$query = "INSERT INTO comments VALUES (NULL, NOW(), :name, :mesage)";
$comments = $pdo->prepare($query);
$comments->execute(['name'=>$_POST['name'], 'mesage'=>$_POST['mesage']]);
// осуществляем переадресацию на главную страницу:
header("Location:index.php");
}
catch(PDOException $e){echo"<font color='coral'>Oшибка выполнения запроса: </font>".$e->getMessage();}
?>
Форма
будет снабжена защитой от ботов, эдаких противных программ, которые лезут в форму со всякой рекламой.
Защищать форму мы будем при помощи капчи. Для этого создадим файл capcha.php.
Имя файла - произвольное:
capcha.php
<?php
/* Задаем параметры капчи(при желании можно вынести в отдельный файл - config)
Переменная, в которой храниться список символов, используемых в капче */
$let = "0123456789abcdefgABCDEFG";
// количество символов в капче:
$len = 7;
// шрифт символов на капче( шрифт поместим в папку со скриптом):
$dir = dirname(realpath(__FILE__));
$sep = DIRECTORY_SEPARATOR;
$font = $dir.$sep."georgia.ttf";
// Размер шрифта:
$fontsize = 25;
// Размер капчи:
$width = 130; // длина
$height = 50; // высота// Задаем заголовок для вывода картинки:
header("Content-type: image/png");
// Создаем изображение:
$img = imagecreatetruecolor($width, $height);
// фон для капчи:
$white = imagecolorallocate($img, 220, 220, 220);
imagefill($img, 0, 0, $white);
// Переменная, для хранения значения капчи:
$capchaText = " ";
// Заполням изображение символами:
for ($i = 0; $i < $len; $i++)
{
// Из списка символов, берем случайный символ:
$capchaText .= $let[rand(0, strlen($let)-1)];
// Вычесляем положение одного символа:
$x = ($width - 20) / $len * $i + 10;
$y = $height - (($height - $fontsize) / 2);
// Укажем случайный цвет для символа:
$color = imagecolorallocate($img, rand(0, 150), rand(0, 150), rand(0, 150) );
// Генерируем угол наклона символа:
$naklon = rand(-30, 30);
// Рисуем символы:
imagettftext($img, $fontsize, $naklon, $x, $y, $color, $font, $capchaText[$i]);
}
$_POST["capcha"] = $capchaText;
// вывод капчи на страницу:
imagepng($img);
// чистим память, корторую мы заняли при создании картинки:
imagedestroy($img);
?>
В результате это будет выглядеть примерно так:
Главное преимущество этого метода защиты - файл капчи хранится отдельно, на web-сервере, а не на
страничке. Особое внимание хочется уделить двум элементам этого кода: $font - это переменная,
отвечающая за шрифт из которого будет формироватся контрольное изображение; файл шрифта ttf
(150-250 кВ) можно взять из папки WINDOWS компа; header - это папка и формат в котором web-сервер
будет хранить контрольное изображение; Изображение будет представлено в трёх цветах : белом,
сером и чёрном. Но можно и поэкспериментировать, если есть желание.
Предполагается, что вы завели базу данных (БД) на hoste,
ознакомились с её структурой и управлением. В таблице будет четыре колонки (это - в нашем случае,
а так - сколько угодно) : id, data, name и mesage
(имена можете выбрать свои). В первом случае (id) - порядковый номер будет автоматически задаваться БД.
Выводить - ли его на страничку - вам решать. Во втором случае (data) - время отзыва будет задаваться специальной
функцией РНР NOW();. Два последних элемента (name и mesage) - будут заносится гостем в специальные поля формы.
К слову сказать - количество полей в форме (<input ...>) зависит только от вашего желания. дальше... ...назад