[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Кнопки LIKE и UNLIKE для поста
m4a1fox
Доброе утро уважаемые эксперты. Сегодня, с самого утра, решил заняться вопросом вплотную. Но по ходу созданию нравится и не нравится, могут, и будут появляться вопросы. Поэтому если не сложно, буду просить помощи или подсказки. Если кто ответит, буду благодарен. Inpost не ругайтесь. Знаю, вы уже отвечали мне. Но так как вы предлагаете - слишком сложно для меня.
По этому...

И так к сути поближе. Есть две кнопочки (картинки). Вот их форма

<form method="post" action="" id="like_unlike">
<
input type="submit" class="like" name="like" value="1" title="поставить автору +">
<
input type="submit" class="unlike" name="unlike" value=" " title="поставить автору -">
</
form>


В таблице с заметками, добавил еще 2 поля - like и unlike. При нажатии на одну из кнопок, в табл. записывается +1. Вот собственно, так...
Сама проблема - в обработчике. Сам обработчик заносит данные после нажатия на одну из кнопок, но после этого, если нажать F5, то это же значение, опять заносится... В этом и есть проблема.
Почитал про cookie поподробнее... Вроде на нем можно как-то реализовать... Но как еще опыта не хватает... Поэтому, если кто может, прошу ответить, буду благодарен... Спасибо.



Спустя 7 минут, 15 секунд (2.03.2011 - 12:04) Adil написал(а):
При обработке формы
или посылай ее на другой скрипт, делай Like или unlike, а потом возвращай на ту страницу
или же как только обработал форму в скрипте делай редирект на ту же страницу.

При таком варианте при нажатии F5 ничего не будет.

На счет того, чтобы много раз не могли нажать like, то здесь cookie+ip

Спустя 4 минуты, 45 секунд (2.03.2011 - 12:09) m4a1fox написал(а):
Adil
Цитата
На счет того, чтобы много раз не могли нажать like, то здесь cookie+ip

А это уже БД надо использовать?

Спустя 1 минута, 57 секунд (2.03.2011 - 12:11) m4a1fox написал(а):
Adil
Наверно лучше еще один файл использовать?

Спустя 2 минуты, 6 секунд (2.03.2011 - 12:13) Adil написал(а):
в базу данных записываете ip, а в куки какой-нибудь флаг типо проголосовал

Спустя 3 минуты, 4 секунды (2.03.2011 - 12:16) Adil написал(а):
Цитата (m4a1fox @ 2.03.2011 - 12:11)
Наверно лучше еще один файл использовать?


Нет в принципе. В том же файле можно сделать так:

<?
if($_POST['like'] == 1){
$count++; // ну тут делаете операции с бд

header('Location: эта же страница');
}
?>


хотя может быть тогда ошибка, если что-то уже выведена в браузер.

Тогда легче сделайте отдельный скрипт.

Спустя 53 минуты, 33 секунды (2.03.2011 - 13:09) m4a1fox написал(а):
Adil
Знаете, не хотелось бы БД использовать... Эта штука не такая строгая... Так что думаю куков должно мне хватить.

Спустя 37 минут, 4 секунды (2.03.2011 - 13:46) m4a1fox написал(а):
А если вот такой запрос
if(isset($_POST['like'])){
// ну тут делаете операции с бд
mysql_query ("UPDATE `you_mail` SET `like` = `like` + 1 WHERE `id` = {$view}");
}

Спустя 5 минут, 18 секунд (2.03.2011 - 13:52) m4a1fox написал(а):
Люди добрые, отзовитесь.....

Спустя 29 минут, 11 секунд (2.03.2011 - 14:21) m4a1fox написал(а):
Я уже реально близко... Прошу подсказки в этом коде не работает $_SESSION
if(isset($_POST['like']))
{
$i = '1';
if(!isset($_SESSION['like'])){
mysql_query( "UPDATE `you_mail` SET `like` = `like` + '".$i."' WHERE `id` =".$id_like_unlike);
$_SESSION['like'] = $like;
echo "
<html><head>
<meta http-equiv='Refresh' content='0; URL=page_view_you_mail.php?view=
$id_like_unlike'>
</head></html>
"
;
.
Помогите исправить!

Спустя 37 минут, 16 секунд (2.03.2011 - 14:58) m4a1fox написал(а):
Все таки cookie нужны... Без них - никак!

Спустя 1 минута, 55 секунд (2.03.2011 - 15:00) fallow написал(а):
m4a1fox
Запусти сессию
session_start(); В самом начале скрипта.
А с куками то что не получается?

Спустя 2 минуты, 4 секунды (2.03.2011 - 15:02) m4a1fox написал(а):
fallow
Сделал.... Я думаю тут не дело в SESSION. Потому что это другой файл на который ссылается форма... Вот....

Спустя 5 минут, 31 секунда (2.03.2011 - 15:08) m4a1fox написал(а):
fallow
Смотрите, это типа "нравится" не "не нравится". то есть пользователь нажимает кнопку, нравится, идет переход на другую страницу, где заносится его голос в виде +1 в строку с заметкой. И обратно скрипт переводит юзера на страницу с постом. Но как сделать, что бы он не смог еще раз нажать кнопки "нравится" или "не нравится" ?

Спустя 5 минут, 10 секунд (2.03.2011 - 15:13) fallow написал(а):
поставить куки на день
setcookie('name', 'vasya' , time()+ 3600*24);


Потом проверку :
if(empty($_COOKIE['reputation']))
{
if(!empty($_POST['plus']))
{
$_COOKIE['reputation'] = $_SERVER['REMOTE_ADDR'];
//тут с базу заносишь +1
}
elseif(!empty($_POST['minus']))
{
$_COOKIE['reputation'] = $_SERVER['REMOTE_ADDR'];
//тут в бд заносишь -1
}
}

else
{
echo 'Э? Куда, ты уже голосовал xD';
}

И смогут они проголосовать только через день.
Т.к куки удаляться через 24 часа)

Спустя 6 минут, 39 секунд (2.03.2011 - 15:20) m4a1fox написал(а):
fallow
Не получается.... все равно заносится....(

Спустя 54 секунды (2.03.2011 - 15:20) m4a1fox написал(а):
setcookie('name', 'vasya' , time()+ 3600*24);
это вверх страницы.
Это запрос -
<?php
if(empty($_COOKIE['reputation']))
{
if(!empty($_POST['like']))
{
$_COOKIE['reputation'] = $_SERVER['HTTP_X_REAL_IP'];
mysql_query("UPDATE `you_mail` SET `like` = `like` + 1 WHERE `id` =".$id_like_unlike);
echo $back;
}
elseif(!empty($_POST['unlike']))
{
$_COOKIE['reputation'] = $_SERVER['HTTP_X_REAL_IP'];
mysql_query("UPDATE `you_mail` SET `unlike` = `unlike` + 1 WHERE `id` =".$id_like_unlike);
}
}

?>

Спустя 1 минута, 57 секунд (2.03.2011 - 15:22) fallow написал(а):
Там $_SERVER['HTTP_X_REAL_IP']; поправь на $_SERVER['REMOTE_ADDR']
Извини, не досмотрел)

Спустя 1 минута, 18 секунд (2.03.2011 - 15:24) m4a1fox написал(а):
fallow
) поправил, увидел просто.... но не помогло sad.gif

Спустя 1 минута, 31 секунда (2.03.2011 - 15:25) fallow написал(а):
Страницу обновляй-ка) Заносится?

Спустя 2 минуты, 34 секунды (2.03.2011 - 15:28) m4a1fox написал(а):
fallow
Так.... Что бы вы понимали. Форма ссылается на страницу куда я поставил ваш код. И да, если нажимать f5 то значения заносятся sad.gif

Спустя 30 минут, 29 секунд (2.03.2011 - 15:58) DedMorozzz написал(а):
Зачем куки для защиты от Ф5. Делаешь или редирект, иль как подсказали уже на другой скрипт аяксом отсылаешь.

Спустя 19 минут, 35 секунд (2.03.2011 - 16:18) m4a1fox написал(а):
DedMorozzz
Тут защита в принципе не от F5, а о том, что когда получился редирект, юзер который уже нажимал на кнопку, не смог заново это сделать.

Спустя 5 минут, 59 секунд (2.03.2011 - 16:24) m4a1fox написал(а):
нет идей ни у кого?

Спустя 29 минут, 52 секунды (2.03.2011 - 16:54) m4a1fox написал(а):
Видимо.... нет.....

Спустя 1 час, 20 минут, 54 секунды (2.03.2011 - 18:15) fallow написал(а):
one.php

<?php
$minus = !empty($_POST['minus'])? $_POST['minus'] : null;
$plus = !empty($_POST['plus'])? $_POST['plus'] : null;

if(empty($_COOKIE['reputation']))
{

if(!empty($plus))
{
//ставим куки на 10 секунд. Чтобы проверить эффект.
//после 10 секунд скрипт разрешит добавлять сообщения
//p.s на час time()+3600 , на день time()+3600*24


setcookie('reputation' ,'plus', time()+10);
$minus = null;
header("location: two.php");
}

if(!empty($minus))
{
//по аналоу плюса.
setcookie('reputation' , 'minus', time()+10);
$plus = null;
header("location: two.php");
}

echo 'Голосовать можно..';
}
else
{
echo 'Вы уже сегодня голосовали...';
}

?>
<form action="" method="POST">
<
input type="submit" name="plus" value=" +1" />
<
input type="submit" name="minus" value=" -1" />
</
form>


two.php

<?php
//добавление в базу БД
if($_COOKIE['reputation'] == 'plus')
{
//добавляешь плюс в БД
//...


header("location: one.php");
}

if($_COOKIE['reputation'] == 'minus')
{
//добавляешь минус в БД
//....


header("location: one.php");
}

?>

Спустя 1 час, 20 минут, 44 секунды (2.03.2011 - 19:35) m4a1fox написал(а):
fallow
Проверил скрипт... работает... большое вам спасибо.... но (смешно наверно) не могу понять как передать в переменной номер поста в кот. надо заносить +

Спустя 32 минуты, 29 секунд (2.03.2011 - 20:08) fallow написал(а):
Эм, всмысле номер поста?)
Некую переменную в БД засунуть что-ли?
Ну запросом mysql_query

Спустя 6 минут, 2 секунды (2.03.2011 - 20:14) m4a1fox написал(а):
fallow
Понимаете, вот мой запрос в БД, только вместо 114 необходимо переправить $ страницы.
Вот здесь она появляется

<input type="submit" name="plus" value=" +1" />
[
size=6]<input type="text" name="id_like_unlike" value="<?php echo $view?>">[/size]
<
input type="submit" name="minus" value=" -1" />
</
form>


И вот как ее сюда поставить, ума не преложу -
$minus = !empty($_POST['minus'])? $_POST['minus'] : null;
$plus = !empty($_POST['plus'])? $_POST['plus'] : null;
$id_like_unlike = !empty($_POST['id_like_unlike'])? $_POST['id_like_unlike'] : null;


if(empty($_COOKIE['reputation']))
{

if(!empty($plus))
{
//ставим куки на 10 секунд. Чтобы проверить эффект.
//после 10 секунд скрипт разрешит добавлять сообщения
//p.s на час time()+3600 , на день time()+3600*24

setcookie('reputation' ,'plus', time()+10);
$minus = null;
header("location: two.php");
}

if(!empty($minus))
{
//по аналоу плюса.
setcookie('reputation' , 'minus', time()+10);
$plus = null;
header("location: two.php");
}
echo 'Голосовать можно..';
}
else
{
echo 'Вы уже сегодня голосовали...';
}


<?php
include './admin/blocks/db.php';
if($_COOKIE['reputation'] == 'plus')
{
mysql_query("UPDATE `you_mail` SET `like` = `like` + 1 WHERE `id` =114");
header("location: page_view_you_mail.php?view=114");
}
if($_COOKIE['reputation'] == 'minus')
{
mysql_query("UPDATE `you_mail` SET `unlike` = `unlike` + 1 WHERE `id` =".$id_like_unlike);
header("location: page_view_you_mail.php?view=114");
}
?>

Спустя 25 минут, 15 секунд (2.03.2011 - 20:39) fallow написал(а):
Можно в сессию сохранить переменную, потом она будет доступна на всех страницах деррикторий в которой вы её сохранили.
Потом в запросе передавать.Когда работаем с сессией обязательно нужно запускать сессию
session_start();
p.s учитите, сессия уничтожится после перезагрузки браузера.

Спустя 1 минута, 40 секунд (2.03.2011 - 20:41) m4a1fox написал(а):
fallow
Спасибо. Буду учить.

А даже если грубо пример набросать?

Спустя 3 минуты, 33 секунды (2.03.2011 - 20:44) m4a1fox написал(а):
$_SESSION['view'] = $view;

На первой странице $view выводит номер id поста.

Спустя 14 минут, 44 секунды (2.03.2011 - 20:59) fallow написал(а):
wink.gif

Спустя 3 минуты, 44 секунды (2.03.2011 - 21:03) m4a1fox написал(а):
тогда куда вставлять эту строчку?

Спустя 15 минут, 49 секунд (2.03.2011 - 21:19) m4a1fox написал(а):
Вот такая ошибка вылазит
Warning: Cannot use a scalar value as an array in Y:\home\crimealeaks.com\www\page_view_you_mail.php on line 23

Не знаете в чем дело? Это может быть из-за того что у меня еще до этого session определяется?

Спустя 5 минут, 16 секунд (2.03.2011 - 21:24) fallow написал(а):
Ну вот те к примеру нужна переменная $view из страницы 1.php , в странице 2.php
в 1.php пишешь
session_start();
$_SESSION['view'] = $view;
А в 2.php принимаешь :
session_start();
$view = $_SESSION['view'];

Спустя 1 минута, 14 секунд (2.03.2011 - 21:25) m4a1fox написал(а):
И все же не понятно, куда вставлять сессию, что бы она передавала параметр. Вот сюда

if(!empty($plus))
{
//ставим куки на 10 секунд. Чтобы проверить эффект.
//после 10 секунд скрипт разрешит добавлять сообщения
//p.s на час time()+3600 , на день time()+3600*24

setcookie('reputation' ,'plus', time()+10);
$minus = null;
header("location: two.php");
}

Это можно поставить?!

Спустя 4 минуты, 17 секунд (2.03.2011 - 21:29) m4a1fox написал(а):
как у вас это получается.... спасибо. я, стоя на остановке, темно.. ))) печатая одной рукой.... еще раз спасибо вам огромнное
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.