试图使一个基本的IP识别脚本在PHP


Trying to make a basic IP recognition script in PHP

我想记录用户第一次访问页面的IP和时间。如果用户再次访问,我不希望它被记录下来。我想到了以下几点:

// DB SETTINGS
$servername = "localhost";
$username = "xxxx";
$password = "xxxx";
$dbname = "xxxx";
// GET INFO
$time = date('Y-m-d G:i:s');
$ip = $_SERVER['REMOTE_ADDR'];
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 
// CHECK TABLE FOR IP
(NOT SURE HOW TO CHECK TABLE TO SEE IF IP HAS ALREADY BEEN LOGGED
If log is found I would name it $loggedip)
// IF IP EXISTS
if ($loggedip == $ip) {echo logged;} 

// WRITE NEW IP
else {
$sql = "INSERT INTO catcher (ip, id, time)
VALUES ('$ip', 'id', '$time')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

}
$conn->close();
?>

我不知道如何检查我的数据库,看看地址是否已经被记录。其他一切都很好。如有任何帮助,我将不胜感激。

谢谢。

将IP地址作为日志表的主键,或者为IP列添加唯一索引。如果IP已经存在,这将导致插入语句失败。

然后,修改insert语句如下:

INSERT IGNORE INTO catcher (ip, id, time)
VALUES ('$ip', 'id', '$time')"

如果出现错误,IGNORE子句将导致插入语句什么也不做。这样,语句本身将看起来是成功的,因此您不会得到错误。您可以检查受影响的行数,以确定是否插入了一行。