Теперь посмотрим, как выглядит страничка с формой обратной связи, которая будет обрабатываться файлом
action.php:
index.php
<!doctype html>
<html lang="ru-RU">
<head>
<meta charset="utf-8" />
</head>
<body bgcolor="e0eee0">
<?php
require_once('dbconnect.php'); // открываем соединение с сервером
try
{
$sql="SELECT * FROM comm ORDER BY dt DESC"; // выбор всех записей из таблицы, начиная с последней по времени dt
$q = $pdo->query($sql);
$q->setFetchMode(PDO::FETCH_ASSOC); // возвращаем набор результатов как массив
}
catch(PDOException $e){echo'<font color="coral">Данные не выбраны</font>'.$e->getMessage();}
$num=0; // количество сообщений
while($row = $q->fetch()): // отслеживаем выборку в цикле
$id=$row['id']; // фиксируем номер отзыва/записи
if($id%2){$color="#ffffff";} // цвет для четных записей
else{$color='#ffffcc';} // цвет для нечетных записей
?>
<!-- вывод данных на страничку-->
<table border='0' width='80%' bgcolor='<?php echo $color ?>'>
<tr><td><i><?php echo $row['data'] ?></i></td></tr>
<tr><td><b><?php echo $row['name']?></b></td></tr>
<tr><td><?php echo $row['mesage'] ?></td></tr>
</table>
<?php
endwhile;
$num++;
if($num==0){echo'<font color="coral">Отзывов нет</font>';}
?>
<!--форма отправки сообщения-->
<table>
<form name="forma" action="action.php" method="POST">
<tr>
<td><b>Ваш ник/логин:</b></td>
<td><input name="name" rows="1" cols="30" title="Сюда - имя"></td>
</tr>
<tr>
<td><b>Ваше сообщение:</b></td>
<td><textarea name="mesage" rows="10" cols="50" title="Сюда - отзыв"></textarea></td>
</tr>
<input type="hidden" name="botas" value="">
<tr>
<td><img src="capcha.php" width="100" height="30"></td>
<td></td>
</tr>
<tr>
<td><b>Символы с картинки :</b></td>
<td>
<input class="input" type="text" name="norobot">
<input type="submit" class="button" value="Добавить">
<input type="reset" class="button" value="Очистить">
</td>
</tr>
</form>
</table>
</body>
</html>
Как видим - ничего экстраординарного, обычная форма. Для акуратности она "упакована" в таблицу. Часть этого
кода выделена другим цветом. Именно она отвечает за вывод содержимого таблицы 'comments' на
страничку, перед формой обратной связи. Для акуратности, содержимое таблицы так-же упаковано...в таблицу (не
каламбур).
И так - у вас есть форма и есть таблица comments, которую ваши гости заполнят при помощи вышеупомянутой формы.
Если при оформлении файлов мы не наделали синтаксических ошибок, то в результате всё будет выглядеть примерно
так. Для наглядности комментарий упакован в 'border'.
Несколько слов о неприятном.
Как показывает практика - 6 ($len = 6;) символов в капче служат достаточным препятствием для спам-ботов. Но они то-же
умнеют. Можно добавить элемент модерации отзывов, если вам не лень каждый раз навещать MySQL-базу. На начало 2020-го года существует
неплохой, хотя и достаточно сложный, способ защиты от спама - KeyCaptcha.
Порядок использования приведён здесь.
А что там в кавычках?
Это небольшое отступление связано с использованием в РНР-скрипте разного типа кавычек -
одновременно. Остановимся мы на двойных и одиночных. Есть ещё обратные, но не стоит так глубоко лезть, ни к чему
это. Рассмотрим пример использования функции:
Аргументом в функции у нас идёт строка - мы берём каждую её составную часть в двойные
кавычки, чтобы интерпретатору было понятно, что это строка символов, в данном случае - инструкция. А что-бы интерпретатору
было понятно, что вместо переменных $ip и $data (это то-же набор символов) необходимо добавить их значения - их так-же берём в кавычки,
теперь - одиночные (двойные у нас уже заняты). Но поскольку одиночные кавычки - это то-же строчные символы, то они
попадают "внутрь" двойных. Точки вокруг переменных говорят интерпретатору, что их значения являются частью строки
символов. Мой совет - начинайте с двойных кавычек. Как видите - ничего сложного. Используйте редактор с
подсветкой кода и 98% проблем будет снято. А ещё неплохо-бы подружится с индейцем племени Apache.
***
А теперь - небольшая интрига:
добавлять отзывы на страничку можно без базы, файлов и РНР. Для этого необходимо познакомится с Java
Script, DOM (Document Object Model) и динамичным HTML (DHTML). Но об этом