我目前正在制作一个简单的IP禁止脚本,我正处于将IP地址插入数据库的阶段。我为此创建的HTML表单包含两个字段; IP地址和原因:
<td width="70%"><h4>Ban New IP:</h4>(Enter IP to be banned)</td>
<td width="30%">
<form method="post" action="">
IP Address: <input type="text" id="ip" name="ip" autocomplete="off" maxlength="15" /><br /><br />
Enter Reason: <input type="text" id="reason" name="reason" autocomplete="off" maxlength="255" /><br /><br />
<input type="submit" id="submit" name="submit" value="Ban IP" /><br /><br />
我的数据库包含一个标题为banned_ips
和三列id, ip and reason
的表格。我创建的插入语句完美无缺,但是我想查看IP是否已经存在。目前它只会插入IP,即使有一个匹配它。这是我目前的查询:
<?php
if ($_POST) {
if ($_POST['ip'] != '') {
if (strlen($_POST['ip']) <= 15) {
$ip = $_POST['ip'];
$ip_clean = htmlentities($ip);
if (isset($ip_clean)) {
// SQL insert
$insert_ip = $db->prepare("INSERT INTO `banned_ips` (ip) VALUES (?)");
$insert_ip->bind_param('s', $ip_clean);
if ($insert_ip->execute()) {
// Successful insert
$_SESSION['successful_insert'] = 'Success';
}
}
}
}
}
?>
我想要做的是在插入新IP时检查IP地址是否已经存在。我已经查看了有关stackoverflow的其他问题以及我看到WHERE NOT EXISTS
的很多时间,但是我找到的没有显示任何带有预处理语句的示例。
答案 0 :(得分:5)
只需将ip
字段设为唯一字段。
mysql
将阻止重复
答案 1 :(得分:2)
您可以创建ip列UNIQUE
并通过这样做,如果存在相同的IP,则不会插入它或执行如下查询:
$check_ip = $db->prepare("SELECT `ip` FROM `banned_ips` WHERE `ip` = ?");
$check_ip->bind_param('s', $ip_clean);
$res = $check_ip->execute();
if($res) {
echo "IP Already exists";
} else {
//insert it to db
}
如果您先放入代码,它将检查IP是否存在,如果存在则不会插入其他内容,如果它不存在则会将其插入数据库。
答案 2 :(得分:0)
你有两种方式:
1)使ip成为一个唯一的密钥,比你尝试编写相同的ip语句时,给你一个错误。
2)进行先前的查询,检查ip是否已存储在您的表格中。
无论如何,第一个解决方案是最好的!
再见