вопрос по 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, т.к. он уникальный, но тут возникает возможность нагадить другим юзерам
![Ухмылка :-] :-]](/styles/default/nulled/smilies/1.gif)
Не хочу описывать данный момент, уже лень.
PHP:
$keys=generatehash();
$hash=md5($keys.'veryComlexSalt4Password');
mysql_query("
UPDATE log_strike SET
hash = ".$hash."
WHERE id = ".$id);
Все. Даже зная все поля и полученый ранее хэш, пользователь не сможет сделать клик, т.к. в таблице будет хранится обновленный хэш.
Сорри, если что-то забыл.