Как сделать отзывы на сайте php
Перейти к содержимому

Как сделать отзывы на сайте php

  • автор:

Обработка и вывод рейтинга в PHP

В продолжении статьи о верстки рейтинга, рассмотрим PHP-скрипты системы отзывов и рейтинга в интернет-магазине.

Важно! Скрипты приведены для ознакомления и требуют болле детальной обработки входящих данных, также не стоит публиковать отзывы на сайте без модерации.

Форма добавления отзыва

На странице товара, в форме клиент пишет отзыв и ставит рейтинг, тут понадобятся звезды для формы.

Оставьте отзыв о товаре

Внешний вид формы:

Форма добавления отзыва

В обработчике формы, отзыв с рейтингом добавляется в БД отдельной записью с привязкой к товару.

if (isset($_POST['send'])) < $form['prod_id'] = intval($_POST['prod_id']); // ID товара $form['rating'] = intval($_POST['rating']); // Оценка $form['name'] = $_POST['name']; // Имя $form['text'] = $_POST['text']; // Отзыв $dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль'); $sth = $dbh->prepare(" INSERT INTO `reviews` SET `prod_id` = :prod_id, `rating` = :rating, `name` = :name, `text` = :text, `date` = UNIX_TIMESTAMP() "); $sth->execute($form); >

Вывод рейтинга в товаре

Итак, отзывы и оценки собираются формой, теперь нужно вывести результат. Обычно в верху страницы выводится общая среднеарифметическая оценка.

$sth = $dbh->prepare("SELECT * FROM `reviews` WHERE `prod_id` = ? AND `rating` > 0"); $sth->execute(array($prod_id)); $data = $sth->fetchAll(PDO::FETCH_ASSOC); if (!empty($data)) < $rating = 0; $count = count($data); foreach ($data as $row) < $rating += $row['rating']; >$rating = $rating / $count; ?> 

Средний рейтинг

= 1) echo 'active'; ?>"> = 2) echo 'active'; ?>"> = 3) echo 'active'; ?>"> = 4) echo 'active'; ?>"> = 5) echo 'active'; ?>">

На основе оценок

Вывод рейтинга в товаре

Далее идет вывод отзывов клиентов с их оценками.

Отзывы

Оставить отзыв

= 1) echo ‘active’; ?>»> = 2) echo ‘active’; ?>»> = 3) echo ‘active’; ?>»> = 4) echo ‘active’; ?>»> = 5) echo ‘active’; ?>»>

Вывод отзывов клиентов с их оценками

Рейтинг в листинге товаров

Для вывода рейтинга в списке товаров понадобится мини версия звезд, а из данных общая оценка и количество отзывов.

 
prepare(" SELECT SUM(`rating`) AS `total`, COUNT(`id`) AS `count` FROM `reviews` WHERE `prod_id` = ? AND `rating` > 0 "); $sth->execute(array($prod['id'])); $data = $sth->fetch(PDO::FETCH_ASSOC); $rating = ceil($data['rating'] / $data['count']); ?>
= 1) echo 'active'; ?>"> = 2) echo 'active'; ?>"> = 3) echo 'active'; ?>"> = 4) echo 'active'; ?>"> = 5) echo 'active'; ?>">
">

Рейтинг в листинге товаров

Сортировка по рейтингу

Для удобства поиска товаров можно ввести сортировку по рейтингу по примеру SQL-запроса.

SELECT *, (SELECT SUM(`rating`) / COUNT(`id`) FROM `reviews` WHERE `prod_id` = `prod`.`id`) AS `rating` FROM `prod` ORDER BY `rating` DESC

Создание доски отзывов на PHP, MySQL и jQuery

Согласно Wikipedia, доска отзывов (гостевая книга) — это специальный раздел сайта, где пользователи могут оставлять свои отзывы, при этом регистрация не требуется. Сегодня я вам покажу, как создать подобную систему, используя супер популярную технологию jQuery AJAX. Согласно спецификации, нам необходима форма, в которую пользователь будет вводить своё имя и сообщение. После того как форма будет отправлена, мы отправим введённые данные скрипту через AJAX, который вставит данные в БД и обновит содержимое доски. Но нам также нужно обновить информацию и для других пользователей. Как? Это я вам покажу в конце урока.

В первую очередь, нам необходимо создать базу данных и таблицу, где будет копиться информация:

CREATE TABLE IF NOT EXISTS `shoutbox` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date_time` datetime NOT NULL, `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL, `message` varchar(255) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM

Как я сказал ранее, нам необходима самая простая форма:

Shoutbox

Name: Message:

Данный код создаст нам форму, которая удовлетворяет всем условиям. Теперь я покажу вам код jQuery, который будет извлекать и отсылать данные:

$(function() < $("#submit").click(function() < // получаем то, что написал пользователь var name = $("#name").val(); var message = $("#message").val(); // Формируем строку запроса var data = 'name='+ name +'&message='+ message; // ajax вызов $.ajax(< type: "POST", url: "shout.php", data: data, success: function(html)< // после получения результата $("#shout").slideToggle(500, function()< $(this).html(html).slideToggle(500); $("#message").val(""); >); > >); return false; >); >);

Всё что является на мой взгляд важным, я отметил комментарием. Этот код собирает ту информацию, которую пользователь ввёл в форму, и отправляет в файл shout.php, который в свою очередь вставляет новые данные в БД и возвращает результат. Выражение return false используется для того чтобы определить, была ли отправлена форма. А теперь я покажу вам, как использовать расширение PDO, для того чтобы обезопасить себя при помощи подготовленных выражений и других вещей. PHP Data Objects (PDO) — расширение для PHP, предоставляющее разработчику простой и универсальный интерфейс для доступа к различным базам данных. Вашему вниманию представляю файл shout.php:

    ‘; foreach ($dbh->query($sql) as $row) < echo '
  • ‘; echo ‘‘.date(«d.m.Y H:i», strtotime($row[‘date_time’])).’‘; echo ‘‘.$row[‘name’].’‘; echo ‘‘.$row[‘message’].’‘; echo »; > echo ‘

Позвольте мне тут немного объяснить. В первую очередь, мы определяем переменную, через которую будет осуществляться соединение базой.

$dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);

Это типичная запись для подключения к базе. В этом контектсе мы также выбираем базу данных, с которой будем работать (вместо mysql_selectdb). Теперь, когда соединение установлено через PDO, вы должны понять, как PDO осуществляет процесс вставки данных в БД. Если вы никогда не имели дело с подобными системами, то знайте, что они используют 4 фичи: Атомарность, Согласованность, Изолированность и Долговечность (ACID). Если говорить профессиональным языком, то транзакция, даже та, которая осуществляется поэтапно, гарантированно будет выполняться в безопасном режиме, исключая все сторонние вмешательства. Работа транзакций может быть откатана в любой момент при вашем запросе (если вы не закончили сам процесс), что позволяет эффективнее отловить все пойманные ошибки. Транзакция также позволят вам без особых сложностей применить сразу все обновления; что на самом деле увеличивает эффективность актуализации данных. Другими словами, транзакции могут сделать ваш скрипт быстрым и безопасным (если руки у вас на месте). Второй момент, который я хотел бы объяснить, — это подготовка выражения для вставки в базу данных. Этот процесс обеспечивает вам высшую степень безопасности. Параметры, которые вы вставляете в выражения не нужно помещать в кавычки; драйвер автоматически сделает это за вас. Если приложение использует подготовленные выражения, то разработчик может быть уверен в том, что никакие SQL инъекции ему не страшны. Ещё одно преимущество в том, что выражение может быть составлено единожды, а использовано многократно, при чём с таким же или другим числом параметров. Когда выражение будет готово, адаптер проанализирует все данные, скомпилирует и оптимизирует их, а затем создаст запрос. Для очень сложных запросов времени может потребоваться побольше. В общем, используя такие выражения ваши данные пройдут через следующий цикл: анализ/компиляция/оптимизация. Наша функция populate_shoutbox выбирает последние 10 строк, которые хранятся в таблице и создаёт список, который возвращается на лицевую сторону сайта. Теперь, если вы помните, я сказал о том, при добавлении, данные отобразятся всем пользователям, которые будут находится на данной странице. Также я упомянул, что при этом мы не будем использовать перезагрузку страницы. Ну так вот. Метод, который будет заполнять страницу содержимым, запустится один при входе на страницу, а затем будет вызываться каждые 15 секунд. Этого времени вполне хватит – мы же не чат делаем, в конце концов.

function refresh_shoutbox() < var data = 'refresh=1'; $.ajax(< type: "POST", url: "shout.php", data: data, success: function(html)< $("#shout").html(html); >>); > //заполнить страницу в первый раз refresh_shoutbox(); // обновить каждые 15 секунд setInterval("refresh_shoutbox()", 15000);

Скрипт для отзывов о сайте

кто нибудь делал или встречал нечто подобное как скрипт отзывов? нужно что бы не надо было регистрироваться и без базы данных. может это и на php лучше. помогите пожалуйста.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Подскажите простой скрипт отзывов (комментариев гостевой книги) без использования msql
подскажите простой скрипт отзывов без использования msql. все время имел дело с msql а в интернете.

Скрипт автоматической авторизации на сайте для браузера
Установил человеку программу мониторинг телефона. Просмотр в личном кабинете через веб-браузер.

Скрипт для авторизации на сайте администратора
Народ есть у кого рабочий скрипт для авторизации на сайте администратора. У меня скрипт написан но.

Скрипт для оценки статей на сайте
Хочу написать скрипт для оценки статей на сайте с помощью пхп. И так же хочу что бы он был.

Регистрация: 19.04.2011
Сообщений: 294
Можешь сделать через API Vkontakte. Самый легкий вариант, правда будет публично доступный.
Регистрация: 25.05.2011
Сообщений: 277
Встречал такой скрипт — достаточноп просто погуглить
317 / 317 / 42
Регистрация: 24.12.2010
Сообщений: 795

На PHP, а отзывы хранить в файлах .txt
или в .ini

Регистрация: 29.08.2010
Сообщений: 613

ЦитатаСообщение от YoungBoy Посмотреть сообщение

Можешь сделать через API Vkontakte. Самый легкий вариант, правда будет публично доступный.

для этого надо быть пользователем сайта вконтакте, мне это не подходит, мне просто нужно три поля:
имя,тема отзыва и сам отзыв, ну и что бы добавлялся в txt или ini, и выводить все отзывы, что бы они ещё были на нескольких страницах если их много. помогите пожалуйста

Регистрация: 21.11.2011
Сообщений: 42
Регистрация: 29.08.2010
Сообщений: 613

ЦитатаСообщение от Xamle Посмотреть сообщение

вот тут посмотри

то что адо, только одна большая проблема, как я писал уже выше

ЦитатаСообщение от aristov-96 Посмотреть сообщение

и без базы данных
может есть ещё варинаты? или поможете сделать сохранение в ini или txt а не в бд?
317 / 317 / 42
Регистрация: 24.12.2010
Сообщений: 795

Ну, по простому, можно сделать так, добавление и вывод из txt файла.
Единственное НО!, файлы выводятся по порядку, 1 2 3 4 и тд.

короче вот код страницы, сохрани как index.php и увидишь работу

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
 if($_GET['c'] == ''){ print "   Имя:  тема отзыва:  Отзыв:   "; $fp = fopen("comment.txt", "r"); // Открываем файл в режиме чтения if ($fp) { while (!feof($fp)) { $mytext = fgets($fp, 999); echo $mytext."
"
; } } else echo "Ошибка при открытии файла"; fclose($fp); }elseif($_GET['c'] == 'obr'){ // заносим в массив значение полей $znach = array( 1 => $_GET['name'], 2 => $_GET['tems'], 3 => $_GET['content'] ); if( !$znach[1] ){ print "Поле Имя, незаполненно
:history.go(-1);' > :history.go(-1);'> "
; }else if( !$znach[2] ){ print "Поле Тема отзыва, незаполненно
:history.go(-1);' > :history.go(-1);'> "
; }else if( !$znach[3] ){ print "Поле Отзыв, незаполненно
:history.go(-1);' > :history.go(-1);'> "
; }else{ $fp = fopen("comment.txt", "a+"); // Открываем файл в режиме записи $mytext = "\r\n" . "Имя: ". $znach[1] . "\r\n" . "Тема: ". $znach[2] . "\r\n" . "Отзыв: " . "\r\n" .$znach[3] . "\r\n"; // Исходная строка $test = fwrite($fp, $mytext); // Запись в файл if ($test) echo 'Данные в файл успешно занесены.'; else echo 'Ошибка при записи в файл.'; fclose($fp); //Закрытие файла print ""; } } ?>

Регистрация: 29.08.2010
Сообщений: 613

я закидываю пустой comment.txt заменяю, а отзывы не удаляются, и почему то постоянно какая то реклама на аглийском добавляется

Добавлено через 6 минут
с удалением разобрался, а реклама откуда? вирус? роботы? капчу надо? или ещё что?

317 / 317 / 42
Регистрация: 24.12.2010
Сообщений: 795

а реклама как выглядит, а то модно поставить проверку на ошибки, типа в поле имя только буквы,
тема тоже, текст темы, буквы и цифры.

Капча, вопрос конечно, я видел в одном видео, что там говорили типа что лучше капчу не ставить.
типа не надо нагружать пользователей, это работа программиста следить за спамом.

если хочешь, можно по простому, например задать пример какой нить, и у человека спросить, ответ,
ну если хочешь опять же простую капчу, а так не знаю.

покажи че за реклама, как отображается.

Регистрация: 29.08.2010
Сообщений: 613

Имя: Breast Enhancement
Тема: Breast enhancement surgery
Отзыв:
nqgzhtofhoptu, Breast enhancement lone tree, QFSbBFU, Breast Enhancement, vrDuzrF, http://bit.ly/tnKj69 Breast enhancement for black women, zveSWCM.

ну вот так. в минуту по 2 рекламы сходу
317 / 317 / 42
Регистрация: 24.12.2010
Сообщений: 795

ну можно попробовать простую капчу сделать, хотя бы пример 2+2= и ответ правильный передаешь, вместе с ответом введенным человеком, сверяем их, и если они равны, сохраняем данные в .txt файл.

по идее, если робот, больше не оставит, а вот если этот спаммер был человеком, тут уже ничего не сделаешь, только если удалить эту запись из файла.

Регистрация: 29.08.2010
Сообщений: 613

хочу попросить вас о помощи, как сделать что бы отображались только темы отзывов и имена авторов а по нажатию был переход где и тема и имя и текст, заранее большое спасибо

Регистрация: 31.05.2017
Сообщений: 6

ЦитатаСообщение от vasvas7775 Посмотреть сообщение

Ну, по простому, можно сделать так, добавление и вывод из txt файла.
Единственное НО!, файлы выводятся по порядку, 1 2 3 4 и тд.

короче вот код страницы, сохрани как index.php и увидишь работу

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
 if($_GET['c'] == ''){ print "   Имя:  тема отзыва:  Отзыв:   "; $fp = fopen("comment.txt", "r"); // Открываем файл в режиме чтения if ($fp) { while (!feof($fp)) { $mytext = fgets($fp, 999); echo $mytext."
"
; } } else echo "Ошибка при открытии файла"; fclose($fp); }elseif($_GET['c'] == 'obr'){ // заносим в массив значение полей $znach = array( 1 => $_GET['name'], 2 => $_GET['tems'], 3 => $_GET['content'] ); if( !$znach[1] ){ print "Поле Имя, незаполненно
:history.go(-1);' > :history.go(-1);'> "
; }else if( !$znach[2] ){ print "Поле Тема отзыва, незаполненно
:history.go(-1);' > :history.go(-1);'> "
; }else if( !$znach[3] ){ print "Поле Отзыв, незаполненно
:history.go(-1);' > :history.go(-1);'> "
; }else{ $fp = fopen("comment.txt", "a+"); // Открываем файл в режиме записи $mytext = "\r\n" . "Имя: ". $znach[1] . "\r\n" . "Тема: ". $znach[2] . "\r\n" . "Отзыв: " . "\r\n" .$znach[3] . "\r\n"; // Исходная строка $test = fwrite($fp, $mytext); // Запись в файл if ($test) echo 'Данные в файл успешно занесены.'; else echo 'Ошибка при записи в файл.'; fclose($fp); //Закрытие файла print ""; } } ?>

Спасибо, Очень Полезно, единственный код который мне понравился и очень подошел для текущего сайта. А как мне сделать чтобы печаталась внизу или вверху дата публикации отзыва? Я пыталась вставить разные коды, но к сожалению не получилось. Вот ссылка на мою страницу сайта с отзывами del

Как сделать отзывы на сайте с помощью PHP

Если у вас имеется простенький сайт или блог без базы данных, но вам нужно добавить форму комментариев или отзывов — можно решить этот вопрос. Мы сделаем так, чтобы все сообщения приходили на email, плюс будем отсеивать спам, и публиковать только те, которые не содержат http://.

Для начала в файле .htaccess закрываем служебную информацию comments.txt:

 Deny from all 

Создаем файл comments.html, в самый верх которого без пробелов и отступов вставить скрипт PHP:

 $_POST['name'], 2 => $_POST['email'], 3 => $_POST['content'] ); $dl = ''; if($z[1] && $z[2] && $z[3])< mail("[email protected]", "заполнена форма site.ru", $z[1] . "\n" . $z[2] . "\n" . $z[3]); // сообщение на ваш email о новом отзыве if(strpos($z[3], 'http://') === false)< // если в тексте отзыва нет http:// $fp = fopen("comments.txt", "a+"); // режим записи $mytext = "" . $z[1] . "" . $z[3] ; $save = fwrite($fp, $mytext); // запись в файл fclose($fp); // закрытие файла Header("Location: ".$_SERVER['PHP_SELF']); // обновить страницу; обновлённая версия содержит опубликованный комментарий exit; > else < // если в тексте есть http:// $dl = 'Ваш отзыв будет опубликован после проверки автором сайта'; // показан этот текст > > else < $fp = @fopen("comments.txt", "r"); // режим чтения if ($fp) < while (!feof($fp)) < $dl .= fgetss($fp, 8000, ",,"); // ,, - это список тегов, разрешённых для публикации > > fclose($fp); > ?> 

В удобном месте в comments.html добавляем HTML код формы:

 

При первом сообщении будет создан файл comments.txt, в который будут попадать все оставленные отзывы. Их можно будет удалять, редактировать либо добавлять свои.

5 лет назад maximus00

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *