Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рейтинг новости (+1 или -1), php, mysql, ajax 
:(
    Опции темы
JEEN
Дата 1.7.2008, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



На сайте есть новости. Хочу чтобы любой пользователь мог изменять их рейтинг, ставив + или - 

подскажите пожалуста как мне это можно осуществить?

все новости находятся в БД MySQL. 

а для того чтобы каждый раз не перезагружать страницу, нужно использовать AJAX.. но 3х часовой поиск в google практически ничего не дал :(
PM MAIL   Вверх
Feldmarschall
Дата 1.7.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: нет
Всего: 32



Ну, искать-то в гугле надо, наверное, не по запросу "рейтинг новости", а по запросу "обучение AJAX".
Хотя я бы на твоем месте сначала сделал без аякса, а потом уже занимался украшениями.
PM   Вверх
JEEN
Дата 1.7.2008, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



я так и искал)))) 

вот лучшее что нашел http://netfaq.ru/ajax/ajax_get_req
))
 но тут немного другая ситуация :(


Цитата(Feldmarschall @  1.7.2008,  23:20 Найти цитируемый пост)
Хотя я бы на твоем месте сначала сделал без аякса, а потом уже занимался украшениями.


%) тоже вариант... но у меня итак все медленно грузится, а если еще и это будет всю страницу перезагружать то это будет жесть..)))
PM MAIL   Вверх
Feldmarschall
Дата 2.7.2008, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: нет
Всего: 32



Если у тебя все медленно грузится, то надо сделать, чтобы грузилось быстрее. А не изобретать костыли, которыми ты и пользоваться не умеешь.
Делать все равно придется. Серверная часть что с аяксом, что без аякса - одинаковая. С базой у тебя не аякс будет работать. 
поэтому надо не рассуждать о том, как хорошо бы было бы сделать с красивыми фенечками, и не беседовать на форуме о том, как у тебя все медленно грузится, а взять, и сделать. Без аякса. Чтобы было хоть что-то. к чему потом можно будет прицепить аякс.


PM   Вверх
krundetz
Дата 2.7.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



JEEN сделайте действительно сначала как сказал Feldmarschall, тоесть без ajax. так сказать разбейте задачу на два этапа сначала внутренний функционал потом внешний.

Всего то будет два запроса типа таких http://host.ru/?news=id&action=up и http://host.ru/?news=id&action=down.

В теле скрипта проверяе пришедшие значения и права.

Выполняете один из запросов к БД.

Код

UPDATE `news` SET `rating` = `rating` + 1 WHERE `id` = $id


Код

UPDATE `news` SET `rating` = `rating` - 1 WHERE `id` = $id


Далее перересовываете страницу.

Следующий шаг добавление ajax.

Создаете ajax запросы вточности повторяющие предыдущие создаете реакцию а эти запросы, тоесть javascript который будет работать на клиенте.

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


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Feldmarschall
Дата 2.7.2008, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: нет
Всего: 32



Да сообщать, в принципе, не нужно. Можно сразу яваскриптом единичку рисовать.

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

$id=intval($_GET['id']);

Особенно при том, что большинство приходит на форум чтобы скопировать приведенный код, ни разу над ним не задумавшись.
PM   Вверх
krundetz
Дата 2.7.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Feldmarschall я не зря упомянул права собственна ответ возвращается когда у пользователя нет прав делать операцию как вариант он уже один раз голосовал за эту новость или поднимал репутацию человеку который ему помог на форуме за последние 24 часа.

По поводу идиотизма. Извините при всем желание вас так назвать не получается. smile 

Это сообщение отредактировал(а) krundetz - 2.7.2008, 14:30


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
IZ@TOP
Дата 2.7.2008, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 2
Всего: 73



А при чем тут X-технологии??!
Цитата(JEEN @  2.7.2008,  00:41 Найти цитируемый пост)
но у меня итак все медленно грузится, а если еще и это будет всю страницу перезагружать то это будет жесть..))) 

Тогда с AJAX вам точно не по пути. Ждать когда хоть что-то произойдет, после нажатия на кнопочку при тормозном сайте - кому захочется?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
JEEN
Дата 4.7.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



krundetz, большое спасибо smile


Feldmarschall, krundetz, частично убрал тормознутость сайта, но меня удивляет то что он медленно работает на локалхосте Oo... а что будет если я его в инет кину???  %) сделал все как Вы говорили, сделал без AJAX... стоит ли мне парица с аяксом для ускорения работы или это просто понт и быстрее работать от этого не станет?
PM MAIL   Вверх
krundetz
Дата 4.7.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Цитата(JEEN @ 4.7.2008,  13:32)
меня удивляет то что он медленно работает на локалхосте Oo... а что будет если я его в инет кину???  %) 

Скорее всего работать он будет быстрее на сервере у провайдера чем на вашей домашней машине

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


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Feldmarschall
Дата 4.7.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: нет
Всего: 32



Аякс работу не ускорит.
Надо снова переделывать, чтобы летал.
Честно говоря, я вообще не представляю, как можно сделать сайт, который будет тормозить с единственным посетителем.

какие конкретные показатели этого "медленно работает"?

PM   Вверх
krundetz
Дата 4.7.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



JEEN существует такая вещь как профайлер советую воспользоваться


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
JEEN
Дата 4.7.2008, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



krundetz, вы апсолютно правы)) на сервере у провайдера сайт летает  smile 


Feldmarschall, если я нажимаю на ссылку от которой меняется запрос к БД и жду 2 секунды пока что то поменяется, я считаю это тормоза) но теперь их нет smile)


krundetz, поискал что такое профайлер... почитал немного..  мне так показалось что мне рано еще это изучать %)


---------------------------

ну вот я все сделал, но.. если допустим новость содержиться внизу, я жму на [+] или [-] у меня страница поднимается вверх :( как сделать так чтобы пользователь не заметил что страница обновилась? и изменение рейтинга ему не мешало просмотру страниц?

Добавлено через 5 минут и 52 секунды
вот код на всякий случай...))


Код

<a href="./rating.php?page=<?=$_GET['page']?>&pic=<?=$_GET['pic']?>&sort=<?=$_GET['sort']?>&action=up&id=<?=$status['id']?>">[+]</a> <?=$status['rating']?> 

<a href="./rating.php?page=<?=$_GET['page']?>&pic=<?=$_GET['pic']?>&sort=<?=$_GET['sort']?>&action=down&id=<?=$status['id']?>">[-]</a>



rating.php

Код

<?php
    include "./tmp/config.php";

    $id = $_GET['id'];
    $pic = $_GET['pic'];
    $sort = $_GET['sort'];
    $page = $_GET['page'];
    $action = $_GET['action'];
    
    if (!$id || !$sort || !$page)
    {
        echo 'Вы ввели не все необходимые сведения.<br>'.'Пожалуйста, вернитесь к предыдущей странице и повторите попытку.';
        echo "<a href='./index.php'>Вернуться на главную страницу</a>";
        exit;
    }
    else {
        
        
        if ($action == 'up') {
            $query = "UPDATE `status` SET `rating` = `rating` + 1 WHERE `id` = $id";
        }
        elseif ($action == 'down') {
            $query = "UPDATE `status` SET `rating` = `rating` - 1 WHERE `id` = $id";
        }  
            
        $result = mysql_query($query);
        if ($result)
        {            
            header("Location: index.php?page=$page&pic=$pic&sort=$sort");        
        }
    }
?>

PM MAIL   Вверх
krundetz
Дата 4.7.2008, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



К сожалению если страница перезагружается то браузер всегда её отображает с начала. Сдесь действительно тогда надо использовать ajax.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
JEEN
Дата 7.7.2008, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



а как сделать чтобы пользователь не мог одной новости приплюсовывать несколько раз?
PM MAIL   Вверх
Feldmarschall
Дата 7.7.2008, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: нет
Всего: 32



Это отдельная сложная тема, хе-хе.
Для начала надо ответить себе на вопрос, а кому может взбрести в голову накручивать рейтинг твоим новостям.
PM   Вверх
krundetz
Дата 7.7.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Цитата(JEEN @ 7.7.2008,  00:00)
а как сделать чтобы пользователь не мог одной новости приплюсовывать несколько раз?

Я же сказал что делаешь проверку на прова пользователя в часности и на права повторно проплюсовать новость. Вся проверка сводиться к тому что в БД заводиться отдельная таблица в которую будет отмечать кто за какую новость уже проголосовал а дальше просто проверяешь естьли там этот юзер либо его нет


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
JEEN
Дата 11.7.2008, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



Цитата(Feldmarschall @  7.7.2008,  08:36 Найти цитируемый пост)
Это отдельная сложная тема, хе-хе.Для начала надо ответить себе на вопрос, а кому может взбрести в голову накручивать рейтинг твоим новостям.


"новости" это я образно сказал.. ;)

 
Цитата(krundetz @  7.7.2008,  14:35 Найти цитируемый пост)
Я же сказал что делаешь проверку на прова пользователя в часности и на права повторно проплюсовать новость. Вся проверка сводиться к тому что в БД заводиться отдельная таблица в которую будет отмечать кто за какую новость уже проголосовал а дальше просто проверяешь естьли там этот юзер либо его нет


ну у меня не все так серьезно чтобы такую проверку делать... я порылся немного на форуме и нашел как сделать через куки.
кому-нибудь может пригодится, вот в этой теме http://forum.vingrad.ru/forum/topic-83976/unread-1.html


Feldmarschall, krundetz, огромное спасибо за помощь ;)

Добавлено через 7 минут и 50 секунд
эээм.... щас вот еще подумал... у меня вообще цель пока научиться кодить на php с использованием mysql... учусь помаленьку... УЧУЧЬ.. а не copy/paste... но хотелось бы чтобы все таки страница не перезагружалась при изменении рейтинга... тут как уже было сказано без AJAX'а не обойтись.. но изучать все его тонкости мне пока не надо и времени нет :( может есть какая-нибудь статья или пример как сделать то что я хочу?
PM MAIL   Вверх
JEEN
Дата 17.7.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



 smile  столько тем уже про ajax прочитал.. ниче понять не могу =(

http://forum.vingrad.ru/index.php?showtopi...st&p=445827

вот этот пример то что мне надо или нет?%)
PM MAIL   Вверх
JEEN
Дата 14.8.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



ну что, никто не поможет? :(
PM MAIL   Вверх
Feldmarschall
Дата 15.8.2008, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: нет
Всего: 32



С перезагрузкой уже сделал?
PM   Вверх
JEEN
Дата 15.8.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



Feldmarschall, ага, я же писал уже, еще на первой странице код лежит smile

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

создаестся файл ajax.js

Код

function createHttpRequest() {
var httpRequest;
var browser = navigator.appName;

if (browser == "Microsoft Internet Explorer") {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else {
httpRequest = new XMLHttpRequest();
}

return httpRequest;
}

function sendRequest(file, _resultId, getRequestProc) {
resultId = _resultId;
document.getElementById(resultId).innerHTML = 'Загрузка...';
httpRequest.open('get', file);
httpRequest.onreadystatechange = getRequestProc;
httpRequest.send(null);
}

function getRequest() {
if (httpRequest.readyState == 4) {
document.getElementById(resultId).innerHTML = httpRequest.responseText;
}
}

var httpRequest = createHttpRequest();
var resultId = '';


а вот это уже html документ

Код

<html>
<head>
<title>Привет, мир AJAX'a</title>
<script language="JavaScript" src="ajax.js" type="text/javascript"></script>
</head>

<body>

<a href="#" onclick="javascript:sendRequest('hello.txt', 'result', getRequest);">Кликни по мне, чтобы отправить запрос</a>.
<p id="result">Здесь будет результат запроса</p>

</body>
</html>


P.S. взял с http://www.xakep.ru/post/35903/default.asp

все работает отлично. Пытаюсь это вставить в свой код. Вставлял всяко... постоянно лаги были, либо:
1) рейтинг не прибавлялся
2) прибавлялся, но только после того как сам обновлю страницу
3) когда жму на + или - браузер думает... и ниче не делает, секунды через 3 обновляет страницу :(

Изменения в коде:
было:
Код

<a href="/rating.php?page=<?=$_GET['page']?>&pic=<?=$_GET['pic']?>&sort=<?=$_GET['sort']?>&action=up&id=<?=$status['id']?>" title="Нравится">+</a>
<b><?=$status['rating']?></b> // вывод рейтинга

стало:
Код

<a href="" onClick="javascript:sendRequest('/rating.php?action=up&id=<?=$status['id']?>', 'result<?=$status['id']?>', getRequest);" title="Нравится">+</a>
<b id="result<?=$status['id']?>"><? include "./rating.php";?></b> // вывод рейтинга

Вопросы:
1) раньше я передавал много переменных для того, чтобы потом после изменения рейтинга вернуться на ту же страницу smile а если не будет перезагрузки страницы, то и мне не надо передавать эти переменные?
2) я правильно переделал вывод рейтинга? О.о 

изменения в rating.php
было:
Код

if (!$id || !$sort || !$page || !$action)
    {
        echo 'Вы ввели не все необходимые сведения.<br>'.'Пожалуйста, вернитесь к предыдущей странице и повторите попытку.';
        echo "<a href='./index.php'>Вернуться на главную страницу</a>";
        exit;
    }
    else {
        setcookie ("limit".$id,"yes",time()+43200, "/");
        
        if ($action == 'up') {
            $query = "UPDATE `status` SET `rating` = `rating` + 1 WHERE `id` = $id";
        }
        elseif ($action == 'down') {
            $query = "UPDATE `status` SET `rating` = `rating` - 1 WHERE `id` = $id";
        }  
            
        $result = mysql_query($query);
        if ($result)
        {            
            header("Location: index.php?page=$page&pic=$pic&sort=$sort");   
        }
        
    }

стало:
Код

if (!$id || !$action)
    {
        echo $status['rating'];
    }
    else {
        setcookie ("limit".$id,"yes",time()+43200, "/");
        
        if ($action == 'up') {
            $query = "UPDATE `status` SET `rating` = `rating` + 1 WHERE `id` = $id";
        }
        elseif ($action == 'down') {
            $query = "UPDATE `status` SET `rating` = `rating` - 1 WHERE `id` = $id";
        }  
            
        $result = mysql_query($query);
        if ($result)
        { 
            echo $status['rating'];        
        }
        
    }


при таких изменениях когда я нажимаю на рейтинг, браузер думает секунд 3-5, потом перезагружает страницу и только потом меняет рейтинг. И еще.. думаю потом будут еще проблемы с куками)... но сейчас не об этом.

Это сообщение отредактировал(а) JEEN - 15.8.2008, 11:37
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: X технологии | Следующая тема »


 




[ Время генерации скрипта: 0.1145 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.