Не проверяйте с if ($result)
, так как это вернет действительный результат, даже если у него нет строк. Поэтому он всегда будет входить в блок die()
.
Вместо этого проверьте mysql_num_rows()
, чтобы увидеть, была ли возвращена строка из этого запроса, в дополнение к проверке на FALSE
в $result
, которая указывает на ошибку в запросе.
$result = mysql_query("SELECT ip FROM ip_table WHERE ip = '$ip'");
if($result && mysql_num_rows($result) > 0){
die("TOS: You cannot access this for 1 Week, Security Measure");
}
Примечание:
Несмотря на то, что не может быть возможности запустить атаку SQL-инъекцией с $_SERVER['REMOTE_ADDRESS']
, все равно следует избегать значений в $_SERVER
:
$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
Обновить
Если вы еще не выяснили, как создать эту таблицу, вот оператор, который сделает это:
CREATE TABLE ip_table (
ip VARCHAR(15) NOT NULL,
access_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
Одна проблема, которую следует учитывать: на вашем веб-сервере может появиться несколько пользователей с одним и тем же исходным IP-адресом, если они находятся за NAT, корпоративной или школьной сетью. Рекомендуется добавить какой-либо другой идентификатор для пользователя, если вы можете.
Базовый шаблон подключения MySQL:
$conn = mysql_connect("localhost", "someusername", "thepassword");
if (!$conn) {
// Error connecting.
}
else {
mysql_select_db("yourDatabaseName");
}
// Now you can call mysql_query()...