Создание простого рейтинга

Среда, 18 августа 2010 г.
Рубрика: PHP программирование -> Готовые решения
Просмотров: 1079
Подписаться на комментарии по RSS

Посмотреть демо

В этом уроке нам понадобится База Данных, в которой нужно будет создать таблицу articles, где должны быть какие-то статьи, в таблице создать поля для названия и описания статьи и два поля: RATING и Q_VOTE: RATING: Общий рейтинг, Q_VOTE: кол-во проголосовавших. Тип полей должен быть INTEGER(INT).

Также нам понадобится 6 рисунков(желательно звёздочки): их названия:

0.jpg 1.jpg 2.jpg 3.jpg 4.jpg 5.jpg

Соответственно 0 - нулевой рейтинг, и т.д.

Теперь перейдём к созданию рейтинга:

Представим что у нас есть статьи, которые выводятся на странице, и мы хотим чтобы к ним выводился рейтинг, а точнее рисунок их рейтинга. У  нас будет 5 бальный рейтинг, который можно сделать больше.

Сначала подключимся к базе и выведем какие-то статьи:

<?php
/*
* Подключаемся к базе mybase
*/
$db=mysql_connect("localhost", "root", "");
mysql_select_db("mybase", $db);
/*
* Достаём из таблицы articles все статьи
*/
$result=mysql_query("SELECT * FROM articles", $db);
$myrow=mysql_fetch_array($result);
/*
* Выводим в цикле все статьи
*/
do{
echo $myrow["title"]."<br />".$myrow["description"]."<br /><br />";
}while($myrow=mysql_fetch_array($result));

Теперь добавим вывод рейтинга:

<?php
/*
* Подключаемся к базе mybase
*/
$db=mysql_connect("localhost", "root", "");
mysql_select_db("mybase", $db);
/*
* Достаём из таблицы articles все статьи
*/
$result=mysql_query("SELECT * FROM articles", $db);
$myrow=mysql_fetch_array($result);
/*
* Если общий рейтинг равен 0, то выводим ноль, если нет, то делим его на кол-во проголосовавших, и округляем
*/
if($myrow["rating"]==0){
$rating=0;
}else{
$rating=intval($myrow["rating"]/$myrow["q_vote"]);
}
/*
* Выводим в цикле все статьи и рейтинг, где номер картинки равен $rating(от 0 до 5)
*/
do{
echo $myrow["title"]."<br />".$myrow["description"]."<br /><img src=$rating.jpg/><br /><br />";
}while($myrow=mysql_fetch_array($result));

Если рейтинг не равен 0, то делим общий рейтинг(общий рейтинг - это все баллы вместе) на кол-во проголосовавших и округляем до целых.

Потом выводим картинку с номером содержащимся в переменной $rating.

Но пака что у всех статей рейтинг будет нулевой. Для оценивания создадим ещё одну страницу view_rating.php

И в ней будем делать вывод информации по определённой статьи, тогда для начала в файле articles.php название статьи сделаем ссылкой на страницу view_articles.php с параметром id нашей статьи:

<?php
/*
* Подключаемся к базе mybase
*/
$db=mysql_connect("localhost", "root", "");
mysql_select_db("mybase", $db);
/*
* Достаём из таблицы articles все статьи
*/
$result=mysql_query("SELECT * FROM articles", $db);
$myrow=mysql_fetch_array($result);
/*
* Если общий рейтинг равен 0, то выводим ноль, если нет, то делим его на кол-во проголосовавших, и округляем
*/
if($myrow["rating"]==0){
$rating=0;
}else{
$rating=intval($myrow["rating"]/$myrow["q_vote"]);
}
/*
* Выводим в цикле все статьи и рейтинг, где номер картинки равен $rating(от 0 до 5)
*/
do{
echo "<a href=view_articles.php?id=".$myrow["id"].">".$myrow["title"]."</a><br />".$myrow["description"]."<br /><img src=$rating.jpg/><br /><br />";
}while($myrow=mysql_fetch_array($result));

Теперь создадим страницу view_articles.php, сначала подключимся к базе и получим id:

<?
/*
* Подключаемся к базе mybase
*/
$db=mysql_connect("localhost", "root", "");
mysql_select_db("mybase", $db);
/*
* Получаем id статьи
*/
if(isset($_GET["id"]) and ($_GET["id"]!=='')){
$id=$_GET["id"];
}else{
echo "Вы не выбрали статью";
}

Теперь вытащим всё по статье с нашим id из базы и выведем всё, кроме рейтинга:

<?
/*
* Подключаемся к базе mybase
*/
$db=mysql_connect("localhost", "root", "");
mysql_select_db("mybase", $db);
/*
* Получаем id статьи
*/
if(isset($_GET["id"]) and ($_GET["id"]!=='')){
$id=$_GET["id"];
}else{
echo "Вы не выбрали статью";
}
/*
* Вытаскиваем всё по статье с переданным id
*/
$result=mysql_query("SELECT * FROM articles WHERE id=$id", $db);
$myrow=mysql_fetch_array($result);
/*
* Выводим статью
*/
echo $myrow["title"]."<br /><br />".$myrow["description"]."<br /><br />

Теперь выведем форму оценивания статьи:

<?
/*
* Подключаемся к базе mybase
*/
$db=mysql_connect("localhost", "root", "");
mysql_select_db("mybase", $db);
/*
* Получаем id статьи
*/
if(isset($_GET["id"]) and ($_GET["id"]!=='')){
$id=$_GET["id"];
}else{
echo "Вы не выбрали статью";
}
/*
* Вытаскиваем всё по статье с переданным id
*/
$result=mysql_query("SELECT * FROM articles WHERE id=$id", $db);
$myrow=mysql_fetch_array($result);
/*
* Выводим статью
*/
echo $myrow["title"]."<br /><br />".$myrow["description"]."<br /><br />;
?>
<!-- Выводим форму оценивания статьи -->
<form action="vote_art.php" method="post">
Оценить: 
1&nbsp;<input type="radio" name="rating" value="1"/>&nbsp;
2&nbsp;<input type="radio" name="rating" value="2"/>&nbsp;
3&nbsp;<input type="radio" name="rating" value="3"/>&nbsp;
4&nbsp;<input type="radio" name="rating" value="4"/>&nbsp;
5&nbsp;<input type="radio" name="rating" value="5"/>&nbsp;
<input type="hidden" name="id" value="<?=$id?>"/>
<input type="submit" name="submit" value="оценить"/>
</form>

Вот у нас есть форма, в которой обработчик vote_art.php, и в которой мы передаём скрытый параметр id статьи.

Теперь создадим обработчик для оценивания vote_art.php:

<?php
/*
* Подключаемся к базе mybase
*/
$db=mysql_connect("localhost", "root", "");
mysql_select_db("mybase", $db);
/*
* Получаем id
*/
if(isset($_POST["id"] and ($_POST["id"]!=='')){
$id=$_POST["id"];
}else{
die("Вы не выбрали статью");
}
/*
* Получаем оценку
*/
if(isset($_POST["rating"])and($_POST["rating"]!=='')){
$rating=$_POST["rating"];
}else{
die("Вы не выбрали оценку");
}
/*
* Получаем все данные статьи
*/
$result=mysql_query("SELECT * FROM articles WHERE id='$id'", $db);
$myrow=mysql_fetch_array($result);
/*
* Заносим в переменные новые рейтинг и кол-во оценивших
*/
$new_rating=$myrow["rating"]+$rating;
$new_vote=$myrow["q_vote"]+1;
/*
* Обновляем данные в таблице
*/
$update=mysql_query("UPDATE articles SET rating='$new_rating', q_vote='$new_vote' WHERE id='$id'", $db);
/*
* Если обновление успешно, то выводим сообщение
*/
if($update='true'){
echo "Ваша оценка принята";
}else{
echo "Ваша оценка не принята";
}

Теперь если оценить статью, и на странице с выводом всех статей посмотреть рейтинг той статьи, то Вы увидите что он изменился.

Поделиться...
twitter.com facebook.com vkontakte.ru mail.ru google.com bobrdobr.ru
Комментариев: 1
  1. Очень интересно попробую, спасибо за статью

Оставьте свой комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор, укажите пароль и свой действующий email.

(обязательно)