Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查mysql中是否已经存储了IP?_Php_Mysql_Ip - Fatal编程技术网

Php 如何检查mysql中是否已经存储了IP?

Php 如何检查mysql中是否已经存储了IP?,php,mysql,ip,Php,Mysql,Ip,我有我制作的反馈表,但我需要一些帮助。我想阻止人们发布反馈,如果他们已经使用相同的ip(存储在数据库中)发布了反馈。代码如下: <?php if(isset($_POST['add'])){ $name = $_POST['name']; $email = $_POST['email']; $comment = $_POST['comment']; $ip = $_SERVER['REMOTE_ADDR']; $datetime = date('Y-

我有我制作的反馈表,但我需要一些帮助。我想阻止人们发布反馈,如果他们已经使用相同的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>";  
}

我自己也尝试过,但失败了。你可以看到,在顶部我尝试了一些函数,有人能告诉我怎么做吗?

你应该使用PDO或mysqli来准备语句,而不是mysql,因为它已被弃用并将被删除。此外,如果您确实希望IP地址在此表中是唯一的,则应在字段上设置唯一约束

但可能您可以通过简单地添加一个出口,使该代码在大约90-98%的情况下工作到目前为止;在检查行数的if语句中:

if (mysql_num_rows($checkIp) > 0) {
    echo "Only 1 feedback per IP allowed!";
    $IP = mysql_fetch_array($checkIp);
    print_r($IP);
    exit; //stop execution here so nothing else happens
}
但是,如果您继续使用mysql,代码将对SQL注入开放,而且不会那么简单,并且会留下一个技术可能性,以某种方式在数据库中使用多个相同的IP


例如,如果两个请求同时传入,并且都读取数据库作为还没有IP,那么都将被插入。如果表中有一个约束,则不会发生这种情况,因为数据库服务器将管理约束本身。

不要使用IP,它不是每个人都唯一的,也不要使用mysql函数,因为它们是官方不推荐使用的!,如果您只需要一个字段,那么只需在表中的该字段上设置一个唯一约束即可。警告:这是非常不安全的,因为这些参数不是。千万不要将$\u POST数据直接放入查询中:它会创建一个巨大的。mysql_查询是一个过时的接口,不应该使用,它正在从PHP中删除。一个现代的替代品。像这样的指南解释了最佳实践。