Search
Write a publication
Pull to refresh

Альтернативный способ добавления комментариев на PHP

Такой способ я придумал сам.
Принцип способа таков:

1.Пользователь вводит имя, комментарий и капчу в нужные поля.
2.Дальше сервер определяет всё-ли правильно он запомнил.
3.Если да, то комментарий записаваються в txt файл.
Здесь я хотел-бы поподробней.Как помним пользователь ввел все правильно.
Он ввел:
-Комментарий
-Имя
-Капчу(про неё нет смысла говорить)
Имя и комментарий записоваеться в тот самый txt файл.Кстати имя ему: post.txt.
4.Когда пользователь вернется обратно на страницу, то сервер прочтет тот txt файл и выведет информацию из него.
Теперь о том как это сделать.

На странице где должна быть форма добавления комментария должен быть такой код:
<form method="post" action="post.php">
<br>
<p>Комментарий:
	<p>Имя:<br /><input type="text" name="name" /></p>
<br />
<textarea name="post">
</textarea>
</p>
<input type="submit">
<br>
Введите код с картинки:
<br/>
 <img style="border: 1px solid gray; background: url('bg_capcha.png');" src = "captcha.php" width="120" height="40"/>
<br/>
<form action="validator.php" method="POST">
	 <input type="text" name="capcha" />
	 <input type="submit" name="send" value="Проверить"/>
</form>


Как видим должен быть файл post.php(формляйте как хотите его).В нем должен быть такой код:
<br>
<a href = home.php>Назад</a>

<?php


session_start();
if($_POST['capcha'] != $_SESSION['capcha']) {
echo "Текст с картинки введен не верно!";
exit();
}
else {
echo "Комментарий успешно добавлен!";
$strName = $_POST["name"];
$strMessage = $_POST["post"]; //Получить пользовательские вводы
file_put_contents('post.txt', "<br> " . $_POST['name'] . " сказал " . $_POST['post'] , FILE_APPEND);
}

?>

Также нужен файл captha.php для того чтобы генерировалась капча.Для защиты от спам ботов.
Код:
<?php

  $letters = 'ABCDEFGKIJKLMNOPQRSTUVWXYZ'; // алфавит

  $caplen = 6; //длина текста
  $width = 120; $height = 40; //ширина и высота картинки
  $font = 'comic.ttf';//шрифт текста
  $fontsize = 14;// размер текста

  header('Content-type: image/png'); //тип возвращаемого содержимого (картинка в формате PNG) 

  $im = imagecreatetruecolor($width, $height); //создаёт новое изображение
  imagesavealpha($im, true); //устанавливает прозрачность изображения
  $bg = imagecolorallocatealpha($im, 0, 0, 0, 127); //идентификатор цвета для изображения
  imagefill($im, 0, 0, $bg); //выполняет заливку цветом
  
  putenv( 'GDFONTPATH=' . realpath('.') ); //проверяет путь до файла со шрифтами

  $captcha = '';//обнуляем текст
  for ($i = 0; $i < $caplen; $i++)
  {
    $captcha .= $letters[ rand(0, strlen($letters)-1) ]; // дописываем случайный символ из алфавила 
    $x = ($width - 20) / $caplen * $i + 10;//растояние между символами
    $x = rand($x, $x+4);//случайное смещение
    $y = $height - ( ($height - $fontsize) / 2 ); // координата Y
    $curcolor = imagecolorallocate( $im, rand(0, 100), rand(0, 100), rand(0, 100) );//цвет для текущей буквы
    $angle = rand(-25, 25);//случайный угол наклона 
    imagettftext($im, $fontsize, $angle, $x, $y, $curcolor, $font, $captcha[$i]); //вывод текста
  }

  // открываем сессию для сохранения сгенерированного текста
  session_start();
  $_SESSION['capcha'] = $captcha;

  imagepng($im); //выводим изображение
  imagedestroy($im);//отчищаем память

?>

Нечего добавлять в него не надо как так на него перехода не состоится.
Теперь нам нужны ещё два файла.
Шрифт: comic.ttf
Картинка: bg_capcha.png
Со шрифтом нет проблемы.Просто найдите его в интернете или в папке Fonts.Обезательно переименуйте его в comic.ttf.
Картинку можно нарисовать в paint.Её размер 120 на 40 пикселей.Рисуйте там что угодно. Эта картинка фон капчи.
Вот и всё.Могу сказать только, то что эти комментарий похожи больше на чат, но можно с помощью CSS их хорошенько отформатировать.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.