Создание простого рейтинга
Среда, 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 <input type="radio" name="rating" value="1"/>
2 <input type="radio" name="rating" value="2"/>
3 <input type="radio" name="rating" value="3"/>
4 <input type="radio" name="rating" value="4"/>
5 <input type="radio" name="rating" value="5"/>
<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 "Ваша оценка не принята";
}
Теперь если оценить статью, и на странице с выводом всех статей посмотреть рейтинг той статьи, то Вы увидите что он изменился.


Очень интересно попробую, спасибо за статью