Помогите реализовать...

Статус
В этой теме нельзя размещать новые ответы.
Да, таблицу(ы) надо делать в базе. Для начала поставь себе phpMyAdmin например, там это можно сделать даже не зная ни одного sql запроса. И еще продумай после какого момента эта группа (id, sid, hash) перестает быть актуальной, т.е. когда ее стоит удалять. Если после клика, то удалять можно так
DELETE FROM hashCheck WHERE id = '$id' AND sid = '$sid' AND hash = '$hash'
если по истечении какого-то времени, то тебе потребуется ввести еще одно поле, в котором будешь хранить дату/время создания группы.
 
Как видно из страничек где код..... таблица с данными id, ids уже есть я просто хотел добавить туда еще и hash так думаю понятнее будет и удобнее?
 
Данная вещь в моем коде что-то не работает((( в общем надо как я понимаю место где генерируется hash кстати вот оно и линк тоже

PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body bgcolor="#ffffe1" leftmargin="25" topmargin="3">
<?php
include "../cfg.php";
$id = intval($_GET['id']);
$get_user_info = mysql_query("SELECT no_adult, adult FROM webmasters WHERE id = ".$id." LIMIT 1");
$row = mysql_fetch_array($get_user_info);
	



$keys=generatehash();
$hash=md5($keys.$_SERVER['REMOTE_ADDR']); 

	if ($_GET['hash']!=$hash)
	{
		$f=fopen("click/log_strike.txt","a");
		fputs($f,$wm_id."\t".$id."\t".$_SERVER['REMOTE_ADDR']."\t".date("Y-m-d H:i:s")."\t".$_SERVER['HTTP_REFERER']."\t".$_SERVER['HTTP_USER_AGENT']."\n");
		fclose($f);
	}





        $no_adult	= $row['no_adult'];
	$adult		= $row['adult'];

	$sql = "";

	if($no_adult) {
		$sql .= " AND adult = 0";
	}
	if($adult) {
		$sql .= " AND no_adult = 0";
	}

	$count	= mysql_num_rows(mysql_query("SELECT id FROM strike WHERE clx > 0 AND status = 0".$sql));
if($count == 0) {
	print "<a style=\"text-decoration: none; font-size: 12px; font-family: Tahoma, Verdana;\" href=\"http://сайт/\" target=\"_blank\"><b><font color=\"#333333\">сайт - Любой тип рекламы здесь!</font></b></a>";
} else {
	$nums	= rand(0, $count - 1);

	$get_strike = mysql_query("SELECT id, name FROM strike WHERE clx > 0 AND status = 0".$sql." LIMIT ".$nums.",1");
	$row = mysql_fetch_array($get_strike);
	$sid	= $row['id'];
	$name	= $row['name'];

         

	print "<a style=\"text-decoration: none; font-size: 12px; font-family: Tahoma, Verdana;\" href=\"http://сайт/click/strike.php?id=".$id."&sid=".$sid."&hash=".$hash."\" target=\"_blank\"><b><font color=\"#333333\">".$name."</font></b></a>";
}
?>
</body>
</html>

тут надо сделать чтобы этот самый hash записывался в базу данных и сравнивался с ids(наверное так)

единственная база где хранится ids

HTML:
--
-- Структура таблицы `log_strike`
--

CREATE TABLE IF NOT EXISTS `log_strike` (
  `id` bigint(250) NOT NULL auto_increment,
  `date` int(10) NOT NULL default '0',
  `idw` int(5) NOT NULL default '0',
  `ids` int(5) NOT NULL default '0',
  `price` decimal(5,4) NOT NULL default '0.0000',
  `url` varchar(150) NOT NULL default '',
  `ip` varchar(15) NOT NULL default '',
  `brouser` varchar(50) NOT NULL default '',
  `fromurl` varchar(150) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=120 ;

а вот основной файл где что делается

PHP:
<?php
function getip() {
	if(getenv("HTTP_CLIENT_IP")) {
		$ip = getenv("HTTP_CLIENT_IP");
	} elseif(getenv("HTTP_X_FORWARDED_FOR")) {
		$ip = getenv("HTTP_X_FORWARDED_FOR");
	} else {
		$ip = getenv("REMOTE_ADDR");
	}
return $ip;
}

include "../cfg.php";
$id		= intval($_GET['id']);
$sid	= intval($_GET['sid']);




$get_user_info = mysql_query("SELECT id, url, user_id FROM webmasters WHERE id = ".$id." LIMIT 1");
$row = mysql_fetch_array($get_user_info);
$urlwm	= $row['url'];
$wm_id	= $row['user_id'];

if($row) {
	$ip			= getip();									// Переменная с IP
	$brauzer	= substr($_SERVER["HTTP_USER_AGENT"],0,50);	// Браузер

		$get_popup = mysql_query("SELECT id, url, clx FROM strike WHERE id = ".$sid." LIMIT 1");
		$row = mysql_fetch_array($get_popup);
		$sid	= $row['id'];
		$url	= $row['url'];
		$clx	= $row['clx'];
		$time	= time() - $cfgTime;

		$cfgPouseClick = time() - 300;

		$count_click	= mysql_num_rows(mysql_query("SELECT id FROM log_strike WHERE (ip = '".$ip."' AND date > ".$time.") OR (brouser = '".$brauzer."' AND date > ".$cfgPouseClick.")"));

		if($count_click || $clx <= 0) {
			print "<html><head><script language=\"javascript\">top.location.href=\"".$url."\";</script></head></html>";
		} else {
			$one_porcent	= $cfgStrike / 100;
			$admin_percent	= sprintf("%01.4f", $one_porcent * $cfgHeaderPerc);
			$wm_percent		= $cfgStrike - $admin_percent;

			mysql_query("UPDATE users SET balance=balance+".$wm_percent." WHERE id=".$wm_id." LIMIT 1");
			mysql_query("UPDATE strike SET clx=clx-1, count=count+1 WHERE id=".$sid." LIMIT 1");

			mysql_query("UPDATE webmasters SET clx_today=clx_today+1, m_today=m_today+".$wm_percent." WHERE id=".$id." LIMIT 1");
			mysql_query("INSERT INTO log_strike (date, ip, idw, ids, price, url, brouser, fromurl) VALUES (".time().", '".$ip."', ".$id.", ".$sid.", ".$cfgStrike.", '".$urlwm."', '".$brauzer."', '".$_SERVER['HTTP_REFERER']."')");

			// МЕСТО ГДЕ МОЖНО ПИСАТЬ СТАТИСТИКУ АДМИНУ
$date	= date("d.m.Y");
mysql_query("UPDATE logs SET strike = strike + ".$admin_percent." WHERE date = '".$date."' LIMIT 1");
			print "<html><head><script language=\"javascript\">top.location.href=\"".$url."\";</script></head></html>";
		}

} else {
	print "<html><head><script language=\"javascript\">top.location.href=\"".$cfgSiteUrl."\";</script></head></html>";
}
?>

если я мыслю правильно - записывать hash в таблицу и сравнивать с ids (кстати в таблице тоже надо сделать hash) то поправьте в коде как это должно выглядеть пажалуйста:bc::bc::bc::thenks::thenks::thenks:
 
Если я правильно понял, то у тебя есть огромный просчет в логике.
PHP:
$hash=md5($keys.$_SERVER['REMOTE_ADDR']);
т.е. хэш формируется с учетом адреса удаленного хоста. Далее в таблице видим следующее PRIMARY KEY (`id`), то есть поле id в этой таблице больше повторяться не может.
Вывод очевиден, если ты будешь в эту таблицу дописывать хэш, то ты одновременно не сможешь хранить хэш, верный для более чем одного пользователя.
Я по-моему уже упоминал, что стоит завести еще одну таблицу где уникальным вхождением будут считаться все три параметра id, sid, hash.
 
Если я правильно понял, то у тебя есть огромный просчет в логике.
PHP:
$hash=md5($keys.$_SERVER['REMOTE_ADDR']);
т.е. хэш формируется с учетом адреса удаленного хоста. Далее в таблице видим следующее PRIMARY KEY (`id`), то есть поле id в этой таблице больше повторяться не может.
Вывод очевиден, если ты будешь в эту таблицу дописывать хэш, то ты одновременно не сможешь хранить хэш, верный для более чем одного пользователя.
Я по-моему уже упоминал, что стоит завести еще одну таблицу где уникальным вхождением будут считаться все три параметра id, sid, hash.
hash можно генерить и по другому без учета просто..... так вот у меня 6 видов рекламы и на каждую надо будет вписывать это...так не удобно будет а вот поля добавить в уже существующие былобы удобнее.....
 
БД
Код:
ALTER TABLE `log_strike` ADD `hash` VARCHAR( 50 ) NULL;
UPDATE TABLE `log_strike` SET `hash` = 'somevalue' WHERE `hash` IS NULL;
ALTER TABLE `log_strike` CHANGE `hash` `hash` VARCHAR( 50 ) NOT NULL;
Первая строка добавляем поле хэш, потом во все существующие заносим какое-то значение, третье запрещаем пустые значения хэша.
в начале кода
PHP:
$hash = $_GET['hash'];
и обновить запрос записи в log_strike
Код:
mysql_query("INSERT INTO log_strike (date, ip, idw, ids, price, url, brouser, fromurl, hash) VALUES (".time().", '".$ip."', ".$id.", ".$sid.", ".$cfgStrike.", '".$urlwm."', '".$brauzer."', '".$_SERVER['HTTP_REFERER']."', '".$hash."')");
наверное все. если нигде не проглядел
 
БД
Код:
ALTER TABLE `log_strike` ADD `hash` VARCHAR( 50 ) NULL;
UPDATE TABLE `log_strike` SET `hash` = 'somevalue' WHERE `hash` IS NULL;
ALTER TABLE `log_strike` CHANGE `hash` `hash` VARCHAR( 50 ) NOT NULL;
Первая строка добавляем поле хэш, потом во все существующие заносим какое-то значение, третье запрещаем пустые значения хэша.
в начале кода
PHP:
$hash = $_GET['hash'];
и обновить запрос записи в log_strike
Код:
mysql_query("INSERT INTO log_strike (date, ip, idw, ids, price, url, brouser, fromurl, hash) VALUES (".time().", '".$ip."', ".$id.", ".$sid.", ".$cfgStrike.", '".$urlwm."', '".$brauzer."', '".$_SERVER['HTTP_REFERER']."', '".$hash."')");
наверное все. если нигде не проглядел
вопрос по 1му написанному...это с чем связано и куда его после генерации hash? Да и еще когда запишется hash и если совпал то надо чтобы он удалялся сразу ну это как Вы в 1м сообщении тут написали.Только вот куда?
 
вопрос по 1му написанному...это с чем связано и куда его после генерации hash? Да и еще когда запишется hash и если совпал то надо чтобы он удалялся сразу ну это как Вы в 1м сообщении тут написали.Только вот куда?
Оно добавляет в БД поле hash, которое не принимает пустые значения.

Итак, делаем по шагам. Файл который начанается с <html

сгенерировали хэш
$keys=generatehash();
$hash=md5($keys.$_SERVER['REMOTE_ADDR']);
теперь его надо сохранить в БД. Т.к. поле id у нас первичный ключ, то оно должно обязательно заполниться, но на этом этапе мы о пользователе кроме этих двух полей ничего не знаем. Все остальные поля кроме этого заполнятся своими значениями по умолчанию.
PHP:
mysql_query("INSERT INTO log_strike (idw, hash) VALUES (".$id.",".$hash."')");
Теперь во втором файле (начинается с <?php) мы можем проверить ползователя по id и hash. Теоретически этого достаточно для идентификации польователя (считаем что текущий хэш угадать невозможно).
PHP:
include "../cfg.php";
$id        = intval($_GET['id']);
$sid    = intval($_GET['sid']);
$hash = $_GET['hash'];

$numRows = mysql_fetch_array(mysql_query("SELECT COUNT(id) FROM `log_strike` WHERE id = ".$id." AND hash = '".$hash."' "));
Таким образом получили количество совпавших пар id, hash в таблице.
Если количество полей меньше 1, то клик фейковый
PHP:
if($numRows < 1)
{
 header("Location: http://www.fallingrain.com/world/PE/8/Nahui.html");
}
Если же все совпало, то выполняем дальше твой код. С одним изменением запроса, вместо
Код:
mysql_query("INSERT INTO log_strike (date, ip, idw, ids, price, url, brouser, fromurl
) VALUES (".time().", '".$ip."', ".$id.", ".$sid.", ".$cfgStrike.", '".$urlwm."', '".$brauzer."', '".$_SERVER['HTTP_REFERER']."')");
пишем
Код:
mysql_query("
UPDATE log_strike SET 
date = ".time().",
ip = '".$ip."',
ids = ".$sid.",
price =  ".$cfgStrike.",
url = '".$urlwm."',
brouser = '".$brauzer."',
fromurl = '".$_SERVER['HTTP_REFERER']."'
WHERE id = ".$id." AND hash = '".$hash."'");
Т.е. заполняем все поля которые были заполнены дефолтными значениями.
Вроде как все, но становится вопрос о том, как не дать повторно пройти по паре id+hash. Т.к. мы сказали что хэш не может быть пустым полем, то удалять его нельзя, да и глупо, это вернет нас к предыдущей ошибке где можно было вместо хэша написать NULL значение. Потому я предлагаю просто перезаписать туда новый хэш не показывая его юзеру. Обновлять можно зная лишь id, т.к. он уникальный, но тут возникает возможность нагадить другим юзерам :-] Не хочу описывать данный момент, уже лень.
PHP:
$keys=generatehash();
$hash=md5($keys.'veryComlexSalt4Password'); 
mysql_query("
UPDATE log_strike SET 
hash = ".$hash."
WHERE id = ".$id);
Все. Даже зная все поля и полученый ранее хэш, пользователь не сможет сделать клик, т.к. в таблице будет хранится обновленный хэш.
Сорри, если что-то забыл.
 
Проверил данную реализацию....что-то у меня не работает вообще..... hash в таблицу не записывается.... далее лучше делать не по id а по ids т.к ids - это и есть сама реклама а id - это тот перец который зареген у меня. В общем что был hash что нет его все равно обрезать можно((((( и не записывает в б.д:(
 
Упрощу задачу....... нужно чтобы вот на этой странице

PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body bgcolor="#ffffe1" leftmargin="25" topmargin="3">
<?php
include "../cfg.php";
$id = intval($_GET['id']);
$get_user_info = mysql_query("SELECT no_adult, adult FROM webmasters WHERE id = ".$id." LIMIT 1");
$row = mysql_fetch_array($get_user_info);
	



$hash=generatehash();

mysql_query("INSERT INTO log_strike (ids, hash) VALUES (".$sid.",".$hash.")"); 




        $no_adult	= $row['no_adult'];
	$adult		= $row['adult'];

	$sql = "";

	if($no_adult) {
		$sql .= " AND adult = 0";
	}
	if($adult) {
		$sql .= " AND no_adult = 0";
	}

	$count	= mysql_num_rows(mysql_query("SELECT id FROM strike WHERE clx > 0 AND status = 0".$sql));
if($count == 0) {
	print "<a style=\"text-decoration: none; font-size: 12px; font-family: Tahoma, Verdana;\" href=\"http://сайт/\" target=\"_blank\"><b><font color=\"#333333\">сайт - Любой тип рекламы здесь!</font></b></a>";
} else {
	$nums	= rand(0, $count - 1);

	$get_strike = mysql_query("SELECT id, name FROM strike WHERE clx > 0 AND status = 0".$sql." LIMIT ".$nums.",1");
	$row = mysql_fetch_array($get_strike);
        $sid	= $row['id'];
	$name	= $row['name'];
     
         

	print "<a style=\"text-decoration: none; font-size: 12px; font-family: Tahoma, Verdana;\" href=\"http://сайт/click/strike.php?id=".$id."&sid=".$sid."&hash=".$hash."\" target=\"_blank\"><b><font color=\"#333333\">".$name."</font></b></a>";
}
?>
</body>
</html>

вот такая кссылка вида
HTML:
http://сайт/click/strike.php?id=21&sid=4&hash=d4pPUuiZxrvWdsWrQq36anSrZgj357zI

не выводилась так например
HTML:
http://сайт/click/strike.php?id=21&sid=4

Одним словом не употреблялась без hash
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху