PHP и mySQL: таблица запросов, чтобы увидеть, существует ли комбинация дата + IP - PullRequest
0 голосов
/ 26 октября 2011

У меня есть эта контактная форма PHP, которая запрещает отправку с существующего IP.Я пытаюсь добавить функцию отправки по одной записи на IP-адрес в день.

В моей таблице БД есть столбец «Дата», в котором отмечается дата каждой строки.Я знаю, что мне нужно создать оператор if с двумя условиями ... Я просто не уверен, как проверить БД перед отправкой новой записи.Любая помощь приветствуется.Спасибо.

КОД SNIPPET:

$ip = gethostbyname($_SERVER['REMOTE_ADDR']);

mysql_select_db($database, $connection);
$QUERY = "SELECT COUNT(IP) AS `count` FROM `contest` WHERE IP = '$ip'";
$RESULT = mysql_query($QUERY) or die(mysql_error());

// Read the firs row
$row = mysql_fetch_assoc($RESULT);

// Check how many rows MySQL counted
if($row['count'] > 0) {
header ('Location: valueexists.html');
}
else {

//save the data on the DB

mysql_select_db($database, $connection);

$insert_query = sprintf("INSERT INTO contest (Name, Email_Address, Phone, Company_Name, Company_Address, Date, ip) VALUES (%s, %s, %s, %s, %s, NOW(), %s)",

Ответы [ 3 ]

1 голос
/ 26 октября 2011

Ваша структура верна, чтобы сделать запрос с двумя условиями, просто добавьте к нему AND :

$query = "SELECT COUNT(ip) AS count FROM contest WHERE ip = '$ip' AND DATE(date) = CURDATE()";

Это будет подсчитывать все строки в конкурсе таблица с этим IP и которые были представлены на эту конкретную дату.Обратите внимание, что я взял "date" в качестве имени вашего поля, так как я не знаю о вашей структуре таблицы, поэтому адаптируйте ее к той, которую вы создали.

Edit Я только что заметил, что вы используете NOW() чтобы сохранить дату и время в вашей базе данных, поэтому я изменил свой запрос, чтобы использовать функцию DATE().Это извлекает часть даты из выражения date или datetime значения, которое можно увидеть здесь .

Надеюсь, это поможет!

0 голосов
/ 26 октября 2011

вы можете использовать strtotime ('полночь'), чтобы получить метку времени начала сегодняшнего дня. Включив это в запрос, вы убедитесь, что mysql возвращает только записи с сегодняшнего дня:

$query = "SELECT COUNT(ip) AS count FROM contest WHERE ip = '$ip' AND DATE > " . strtotime('midnight');
0 голосов
/ 26 октября 2011

Вы захотите сделать что-то похожее на:

$count = mysql_num_rows(mysql_query("SELECT * FROM contest WHERE IP ='".$IP."'"));

if($count > 0) {
$error = '<div class="error_message">Sorry, username already taken.</div>';
}

Проще говоря, вы просто запрашиваете базу данных, чтобы узнать, существует ли IP-адрес.* чтобы определить, действительно ли форма была отправлена ​​только по этому идентификатору формы.

...