Рейтинг на Javascript

  • Автор темы Автор темы Tapakan
  • Дата начала Дата начала

Tapakan

Новичок
Доброго времени суток. Прошу помощи, но хочу предупредить, javascript еще не знаю вообще. Вот мой сайт. На этой странице два тестовых рейтинга. . Хочу спросить, как сделать ограничение по ип? Чтобы человек мог 1 раз проголосовать с 1 адреса и результат естественно сохранялся в виде звездочек закрашенных. Там я так понял система замороченная, надо заходить в базу, смотреть результаты и самому проставлять. Регистрации на сайте нет. Заранее спасибо.
Для вставки рейтинга у меня получается следующий код:

<link href="/templates/test/css/styles9.css" rel="stylesheet" type="text/css" />
<link href="/templates/test/css/jquery.rating.css" rel="stylesheet" type="text/css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js" type="text/javascript"></script>
<script src="/templates/test/js/jquery.rating-2.0.min.js" type="text/javascript"></script>
<script type="text/javascript">// <![CDATA[
window.jQuery || document.write('
<script data-mce-type="text/javascript" src="/templates/test/js/jquery-1.6.2.min.js" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript"><\/script>');
// ]]></script>
<div style="text-align: center;"><span style="font-size: 18pt;">В разработке</span>
<script type="text/javascript">// <![CDATA[
$(function(){
$('#rating').rating({
fx: 'float',
stars: 5,
image: 'images/stars.png',
loader: 'images/ajax-loader.gif',
url: 'vote.php'
});
})
// ]]></script>
<div class="rating">
<script type="text/javascript">// <![CDATA[
$('div.rating').rating();
// ]]></script>
</div>
</div>
 
http://phpfaq.ru/na_tanke - тут ответ на твой вопрос - инфа 100%
Спасибо, у меня перед лицом лежит книга php5 в подлиннике, Дмитрия Котерова на 1000 страниц. Только учу, уровня пока что не хватит для решения этой задачи. Рассчитываю на помощь добрых людей.
 
хорошая книга, только вот страниц там вроде под 700, если память не изменяет.

и у котерова ты не найдешь ответ на свой вопрос, а по ссылке найдешь.
так что будь добр, не ленись, прочитай
 
Прочитал сразу же, но я не знаю в каком форме это все записывать. $_SERVER[REMOTE_ADDR'], ['REQUEST_URI'], ['HTTP_HOST'] более менее уже могу употребить, если надо вывести просто ип и браузер на экран.
А у меня с рейтингом взаимодействует скрипт пхп:
<?php
/* Конфигурация базы данных. Добавьте свои данные */
$dbOptions = array(
'db_host' => 'localhost',
'db_user' =>
'db_pass' => '',
'db_name' => '
);

//Имя таблицы, в которой хранятся заметки
$table_name = 'articles';

//Подключаем класс для работы с базой данных
require "db.class.php";

// Соединение с базой данных
DB::init($dbOptions);

$use_cookie = true; //защита от накруток
$expires = 3600*24*31; //время жизни кук в секундах (сейчас установлено 31 день)

if(isset($_POST['score']) && isset($_POST['vote-id'])){
$page_id = intval($_POST['vote-id']);
$cookie_name = 'page_'.$page_id;

if($use_cookie && isset($_COOKIE[$cookie_name])){

$data['status'] = 'ERR';
$data['msg'] = 'Вы уже голосовали за эту заметку';
}
else{

DB::query('UPDATE '.$table_name.' SET vote = (vote*voters + '.floatval($_POST['score']).')/(voters + 1), voters = voters + 1 WHERE id = '.$page_id);
if(DB::affected_rows() == 1){

$data['status'] = 'OK';
$data['msg'] = 'Спасибо. Ваш голос учтен.';
if($use_cookie) setcookie($cookie_name,$page_id,time() + $expires);
}
else{
$data['status'] = 'ERR';
$data['msg'] = 'Произошла ошибка';
}
}
}
else{
$data['status'] = 'ERR';
$data['msg'] = 'Вы не передали нужные данные!';
}

echo json_encode($data);
?>
Понимаю, что он вытягивает ид рейтинга и куки, но данные в базу не передаются. Создал как было написано - articles, в нем 4 пункта:
1 id int(11) Нет Нет AUTO_INCREMENT Изменить Удалить Ещё
2 name varchar(255) utf8_general_ci Нет Нет Изменить Удалить
3 vote float Нет Нет Изменить Удалить Ещё
4 voters
 
1) другим тегом вставляй код - PHP
2) не парься за IP - это дело обойти очень легко - http://www.phpfaq.ru/ip
3) если без регистрации нужно и только один раз - ставь куку. (cookie)
 
1) другим тегом вставляй код - PHP
2) не парься за IP - это дело обойти очень легко - http://www.phpfaq.ru/ip
3) если без регистрации нужно и только один раз - ставь куку. (cookie)
Каким еще тегом? <? ?>
Куки это же и есть файл выше? Vote.php
И проблема в том, что звезды автоматически на закрашиваются, необходимо добавлять html код
<input type="hidden" name="val" value="2.75"/>
<input type="hidden" name="votes" value="2"/>
Как сделать, чтобы закрашивание происходило автоматически. Вот все файлы, которые есть для рейтинга:
articles.php
<?php

/* Конфигурация базы данных. Добавьте свои данные */
$dbOptions = array(
'db_host' =>
'db_user' =>
'db_pass' =>
'db_name' =>
);

//Имя таблицы, в которой хранятся заметки
$table_name = 'articles';


//Подключаем класс для работы с базой данных
require "db.class.php";

// Соединение с базой данных
DB::init($dbOptions);

$page_id = (!empty($_GET['id']))? intval($_GET['id']): false;


if(!$page_id){

//Выбираем 3 заметки из базы данных
$result = DB::query('SELECT * FROM '.$table_name.' LIMIT 3');

//Здесь будет храниться список заметок
$articles = array();

while($row = $result->fetch_assoc()){
$articles[] = $row;
}
}
else{
//Выбираем заметку из базы данных по переданному id
$result = DB::query('SELECT * FROM '.$table_name.' WHERE id='.$page_id.' LIMIT 1');

//Если такой заметки нет в базе данных
//выводим 404 ошибку
if(!$post = $result->fetch_assoc()){

header("HTTP/1.0 404 Not Found");
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
die('Нет такой заметки');

}
}
?>
db.class.php
class DB {

private static $instance;
private $MySQL;

private function __construct(array $dbOptions){
$this->MySQL = @ new mysql($dbOptions['db_host'],$dbOptions['db_user'], $dbOptions['db_pass'],$dbOptions['db_name'] );
if (mysql_connect_errno()) {
throw new Exception('Ошибка базы данных.');
}

$this->MySQL->set_charset("utf8");
}

public static function init(array $dbOptions){
if(self::$instance instanceof self){
return false;
}
self::$instance = new self($dbOptions);
}

public static function getMySQLObject(){
return self::$instance->MySQL;
}

public static function query($q){
return self::$instance->MySQL->query($q);
}

public static function esc($str){
return self::$instance->MySQL->real_escape_string(htmlspecialchars($str));
}

public static function insert_id($str){
return self::$instance->MySQL->insert_id;
}

public static function affected_rows(){
return self::$instance->MySQL->affected_rows;
}
}
В db.class.php везде вид стоял MySQLi я изменил на Mysql. И vote.php который выше. Вот html страница:
<p>&nbsp;</p>
<title>Последние новости в мире азартных игр. Самые большие выигрыши, крупнейшие проигрышы. Онлайн казино мира и отдельно по регионам</title>
<link href="/templates/test/css/styles9.css" rel="stylesheet" type="text/css" />
<link href="/templates/test/css/jquery.rating.css" rel="stylesheet" type="text/css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js" type="text/javascript"></script>
<script src="/templates/test/js/jquery.rating-2.0.min.js" type="text/javascript"></script>
<script type="text/javascript">// <![CDATA[
window.jQuery || document.write('
<script data-mce-type="text/javascript" src="/templates/test/js/jquery-1.6.2.min.js" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript" data-mce-type="text/javascript"><\/script>');
// ]]></script>
<div style="text-align: center;"><span style="font-size: 18pt;">В разработке</span>
<script type="text/javascript">// <![CDATA[
$(function(){
$('#rating').rating({
fx: 'float',
stars: 5,
image: 'images/stars.png',
loader: 'images/ajax-loader.gif',
url: 'vote.php'
}
});
// ]]></script>
<div class="rating"><input type="hidden" name="val" value="" /> <input type="hidden" name="votes" value="" /> <input type="hidden" name="vote-id" value="1" />
<script type="text/javascript">// <![CDATA[
$('div.rating').rating();
// ]]></script>
</div>
</div>
 
Сверху