Рейтинг на Javascript

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>
 

Tapakan

Новичок
http://phpfaq.ru/na_tanke - тут ответ на твой вопрос - инфа 100%
Спасибо, у меня перед лицом лежит книга php5 в подлиннике, Дмитрия Котерова на 1000 страниц. Только учу, уровня пока что не хватит для решения этой задачи. Рассчитываю на помощь добрых людей.
 

Redjik

Джедай-мастер
хорошая книга, только вот страниц там вроде под 700, если память не изменяет.

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

Tapakan

Новичок
Прочитал сразу же, но я не знаю в каком форме это все записывать. $_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
 

Redjik

Джедай-мастер
1) другим тегом вставляй код - PHP
2) не парься за IP - это дело обойти очень легко - http://www.phpfaq.ru/ip
3) если без регистрации нужно и только один раз - ставь куку. (cookie)
 

Tapakan

Новичок
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>
 
Сверху