вопрос по 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);
Все. Даже зная все поля и полученый ранее хэш, пользователь не сможет сделать клик, т.к. в таблице будет хранится обновленный хэш.
Сорри, если что-то забыл.