CODE:<?php
require_once './admin/class.db.php';
if (isset($_GET['id']) AND !empty($_GET['id']))
{
$view = "SELECT * FROM `info` WHERE id='".mysql_real_escape_string($_GET['id'])."'";
$result = mysql_query($view);
$info = mysql_fetch_array($result);
//Голосование!
$count = "UPDATE info SET vote=vote+1 WHERE id=$id";
mysql_query ($count);
echo "Голосов: ".$info['vote'];
}
?>
При обращении к этому файлу - файл.php?id=номер - количество голосов (vote) увеличивается на 1. Если вновь обратиться - ещё на 1. И т.д.
Как можно защитить от повторных обращений, по ip и cookie?
Можно, к примеру, создать таблицу базы данных, при обращении к этой странице, если текущего айпишника нет в ней, проводить голосование и добавлять айпишник в базу. По кукам ещё проще: если есть кук с определённым именем - не голосуем. Если нету - голосуем и устанавливаем такой кук.
А если ли скрипт, который может проверить, поддерживает браузер cookie или нет?
Если не поддерживает, то произвести редирект на другую страницу.
Пожалуйста! На первой странице, куда попал пользователь, устанавливаешь cookie и делаешь редирект на вторую. Если на второй этот cookie не задан - редирект на третью. Проверить без перенаправления (или хотя бы AJAX) не получится: сначала браузер посылает запрос со старыми куками, и только потом сервер может установить новые.
Но не забывай, что в любом случае защиту по кукам очень легко обойти...
А ещё можно сделать, чтобы к странице можно было только с браузера обращаться?
Ещё для защиты можно это использовать:
CODE:<?
if (strpos($_SERVER['HTTP_REFERER'], 'http://сайт.ру/промежуточная_страница.php?id=')===FALSE) { header('location: редирект.htm'); exit (0); }
?>
чтобы невозможно было обойти промежуточную страницу.
Видишь ли, заголовки-то можно какие угодно послать... Если надо гарантировать прохождение через заданную страницу - лучше с неё делать редирект не просто на текущую, а с передачей GET-параметра, генерируемого, допустим, случайно и заносимого в базу. Если этого GETа нет или он не был только что занесён в базу - посылаем.
Мне особенной защиты и не нужно.
Как сделать, чтобы при обращении к странице .php?id=номер создавался cookie, в имени которого был и этот номер?
CODE:if (isSet($_GET['id'])) setCookie('id', $_GET['id']);
На вкладке "Конфиденциальность" у меня установлен средний уровень, но cookie не устанавливаются. Пробовал разные способы php.
Если требуется установка куков на более длительный срок, чем до закрытия браузера, нужно указать ещё и время устаревания оных.