PHP / MYSQL IP Check / Logger - PullRequest
       10

PHP / MYSQL IP Check / Logger

1 голос
/ 30 января 2012

Хорошо, у меня есть сервер Minecraft, и я делаю сценарий голосования для него.

Мне нужен способ проверить ip пользователей в mySQL. Если он не существует, он помещает ip в базу данных и удаляет его через 24 часа в базе данных.

Если бы кто-нибудь мог помочь мне сделать это, было бы здорово, спасибо

Ответы [ 2 ]

1 голос
/ 30 января 2012

В Интернете есть множество учебных пособий о том, как этого добиться, поэтому я не дам вам код.Несколько советов для начала работы.

В PHP вы можете получить IP-адрес пользователя из $_SERVER superglobal

$ip = $_SERVER['REMOTE_ADDR'];

Чтобы проверить, существует ли он в вашей таблице

$query = sprintf("SELECT COUNT(*) FROM yourtable WHERE `ip` = '%s'", mysql_real_escape_string($ip));

Если его не существует, сохраните его с помощью команды INSERT вместе с отметкой времени.

Что касается удаления через 24 часа, вы можете настроить задание cron, которое выполняется черезтаблица каждый час или около того и удаляет все записи, которые истекли.Однако было бы проще не удалять записи.Вместо этого, когда пользователь голосует, просто проверьте отметку времени его последнего голосования.Если с момента последнего голосования прошло 24 часа, просто обновите отметку времени.

По сути, рабочий процесс будет выглядеть следующим образом:

1. Get users's IP address.
2. Does this IP exist in table? 
  2a. If no, let user vote, and enter his ip in the table along with the current time in the timestamp column
  2b. If yes, get the timestamp of his last vote. Has it been 24 hours since his last vote?
    2b.a. If yes, let user vote and update timestamp column with current time.
    2b.b. If no, do not let user vote / reject his vote. Leave timestamp column unchanged.
0 голосов
/ 30 января 2012

Самый простой способ - выполнить следующие действия:

$ip = $_SERVER['REMOTE_ADDR'];
// Run cleanup for given IP
$result = mysql_query("SELECT * FROM table 
             WHERE `ip`='$ip' AND `timestamp` > NOW() - 24*3600");  
if (mysql_num_rows($result)==0) 
// there is no record within the last 24h, let insert a new one
{  
 mysql_query("INSERT INTO table SET `ip`='$ip', `timestamp` = NOW()");  
 echo "Thank you for your vote!";
}
else echo "You may vote only once in 24 hours";
// run total cleanup query from time to time
if (rand(1,5)<2) mysql_query("DELETE FROM table 
                             WHERE `timestamp` < NOW() - 24*3600");  

ps: если у вас разные голосования, у каждого из них должен быть свой уникальный идентификатор.а в таблице MySQL, которая имела до двух столбцов ip и timestamp, должен быть, например, еще один столбец voteid.В этом случае код выше изменится на

// voteid should be somehow set to the id of the voting. 
// for example by GET request
$voteid = intval($_GET['voteid']);
$ip = $_SERVER['REMOTE_ADDR'];
// Run cleanup for given IP
$result = mysql_query("SELECT * FROM table 
   WHERE `ip`='$ip' AND `voteid`='$voteid` AND `timestamp` > NOW() - 24*3600");  
if (mysql_num_rows($result)==0) 
// there is no record within the last 24h, let insert a new one
{  
   mysql_query("INSERT INTO table SET `ip`='$ip', 
                `voteid`='$voteid', `timestamp` = NOW()");  
   echo "Thank you for your vote!";
}
  else echo "You may vote only once in 24 hours";
  // run total cleanup query from time to time
 if (rand(1,5)<2) mysql_query("DELETE FROM table 
                                 WHERE `timestamp` < NOW() - 24*3600");  
...