【发布时间】:2015-03-10 16:24:44
【问题描述】:
我制作了这张反馈表,但我需要一些帮助。如果他们已经使用存储在数据库中的相同 ip,我想阻止人们发布反馈。这是代码:
<?php
if(isset($_POST['add'])){
$name = $_POST['name'];
$email = $_POST['email'];
$comment = $_POST['comment'];
$ip = $_SERVER['REMOTE_ADDR'];
$datetime = date('Y-m-d H:i');
$checkIp = mysql_query("SELECT ip from comments WHERE ip = '$ip'");
if (mysql_num_rows($checkIp) > 0) {
echo "Only 1 feedback per IP allowed!";
$IP = mysql_fetch_array($checkIp);
print_r($IP);
}
if($name){
if($email){
if($comment){
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
mysql_query("INSERT INTO comments (id, name, email, comment, ip, datetime) VALUES ('','$name','$email','$comment','$ip','$datetime')");
}
else
echo "The email address is invalid!<br><br>";
}
else
echo "You haven't entered any comment!<br><br>";
}
else
echo "You haven't entered an email address!<br><br>";
}
else
echo "You haven't entered your name!<br><br>";
}
我自己尝试过,但失败了(你可以在顶部看到我尝试了一些功能),有人可以告诉我怎么做吗?
【问题讨论】:
-
不要使用IP,它不是每个人唯一的
-
另外,不要使用 mysql_* 函数,因为它们已被官方弃用!请查看prepared statements
-
如果您只需要一个,只需在表中的该字段上设置
unique约束即可。 -
警告:这是非常不安全的,因为这些参数不是properly escaped。您应该绝不将
$_POST数据直接放入查询中:它会创建一个巨大的SQL injection bug。mysql_query是一个过时的接口,不应使用,它已从 PHP 中删除。像PDO is not hard to learn 这样的现代替代品。像 PHP The Right Way 这样的指南解释了最佳实践。