gpt4 book ai didi

php - 每次插入MySQL数据库的IP都会改变

转载 作者:行者123 更新时间:2023-11-29 14:12:55 26 4
gpt4 key购买 nike

我有一个记录用户 IP 的评级脚本,这样他们就无法多次对文件进行评级。但是,每次我对文件进行评级以对其进行测试时,我的 $ip 都会随着 ip2long() 函数而更改。这是怎么回事?这是我的代码:

<?php

require('connect.php');

$sheetID = $_GET["id"];
$rating = $_GET["rating"];
$ip= $_SERVER['REMOTE_ADDR'];
$ip = ip2long($ip);

$checkIPQuery = mysql_query("SELECT * FROM ratings WHERE sheetID = '$sheetID' and INET_NTOA(ip) = '$ip'");
$doesIPExist = mysql_num_rows($checkIPQuery);
if ($doesIPExist == 0) {
mysql_query("INSERT INTO ratings (sheetID, rating, ip) VALUES ($sheetID, $rating, $ip)");

echo " $ip
<script>setTimeout(function(){location.href = '../sheets.php?id=$sheetID'},1);</script>";
}
else
echo 'You have already rated this image!';

?>

然后检查用户是否对脚本进行了评分:

$id = $_GET['id'];
$ip=$_SERVER['REMOTE_ADDR'];
$ip = ip2long($ip);

$checkIPQuery = mysql_query("SELECT * FROM ratings WHERE sheetID = '$id' and INET_NTOA(ip) = '$ip'");

$doesIPExist = mysql_num_rows($checkIPQuery);
<小时/>

这是我所做的:

  • 当 $ip 无法进入 varchar(15) 时,将该字段更改为未分配的 INT
  • 我添加了 ip2long() 函数,因为我将 ip 字段更改为 INT
  • 然后我添加了 INET_NTOA(ip) 来读取 ip2long() INT

如有任何帮助,我们将不胜感激。谢谢!

编辑:如果我将 $ip 设置为 3,这些脚本可以正常工作。

最佳答案

阅读评论和一些研究后,我找到了答案,而且很简单。

在 32 位系统上,ip2long() 返回负整数和正整数,但 INET_NTOA() 仅适用于正整数。所以你有两个选择来解决这个问题:

  1. 更改您的 PHP 代码:$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
  2. 更改 SQL 查询:... AND ip = ". ip2long($_SERVER['REMOTE_ADDR']) . "...

您可以通过以下方式验证这一事实:

$ip  = $_SERVER['REMOTE_ADDR'];
$int = ip2long($ip);
var_dump($ip, $int, sprintf('%u', $int));

这会产生以下输出:

string '192.168.1.120' (length=13)
int -1062731400
string '3232235896' (length=10)

然后进入MySQL:

mysql> SELECT '192.168.1.120', INET_NTOA(-1062731400), INET_NTOA(3232235896)
+---------------+------------------------+-----------------------+
| 192.168.1.120 | INET_NTOA(-1062731400) | INET_NTOA(3232235896) |
+---------------+------------------------+-----------------------+
| 192.168.1.120 | NULL | 192.168.1.120 |
+---------------+------------------------+-----------------------+
1 row in set (0.00 sec)

关于php - 每次插入MySQL数据库的IP都会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13162078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com