Не могу получить PHP, чтобы сказать MYSQL, чтобы заблокировать пользователя - PullRequest
0 голосов
/ 21 января 2012

У меня есть сценарий для моего магазина для игры, в которой после того, как они что-то покупают, они не могут ничего купить в течение 1 недели.но я не могу заставить этот скрипт работать.Может кто-нибудь объяснить мне, как настроить базу данных MySql для блокировки пользователя?

<?php
// Purge records
mysql_query("DELETE FROM ip_table WHERE access_date < DATE_SUB(CURDATE(), INTERVAL 168 HOUR)");

$ip = $_SERVER['REMOTE_ADDR'];
$result = mysql_query("SELECT ip FROM ip_table WHERE ip = '$ip'");
if($result){
  die("TOS: You cannot access this for 1 Week, Security Measure");
} 
else {
  $result = mysql_query("INSERT INTO ip_table (ip, access_date) VALUES ('$ip', NOW())");
  echo "Thank you For your Purchase. you Have been Blocked For 1 Week due to a Security Measure.";
}
?>

Вся помощь приветствуется.спасибо

Ответы [ 2 ]

6 голосов
/ 21 января 2012

Не проверяйте с 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()...
0 голосов
/ 21 января 2012

try mysql_num_rows

<?php
// Purge records
mysql_query("DELETE FROM ip_table WHERE access_date < DATE_SUB(CURDATE(), INTERVAL 168 HOUR)");

$ip = $_SERVER['REMOTE_ADDR'];
$result = mysql_query("SELECT ip FROM ip_table WHERE ip = '$ip'");
if(mysql_num_rows($result) >= 1){
  die("TOS: You cannot access this for 1 Week, Security Measure");
} 
else {
  $result = mysql_query("INSERT INTO ip_table (ip, access_date) VALUES ('$ip', NOW())");
  echo "Thank you For your Purchase. you Have been Blocked For 1 Week due to a Security Measure.";
}
?>
...