我有一个带有下拉菜单的表单,其中包含不同类型的电影,这是它的代码:
<select name="genero"><?php
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
if (!empty($_POST['genero']) && $row['nombre'] == $_POST['genero']) {
$selected = 'selected="selected"';
} else {
$selected = '';
}
echo '<option '.$selected.' value="'.$row["nombre"].'">'.$row["nombre"].'</option>';}
} else {
echo "0 results";
}
?>
然后我有一个 isset 控制已选择特定类型
if (isset($_POST['genero'])) {
$genero=$_POST['genero'];
$sql = "UPDATE generos SET visitas=visitas+1 where nombre='$genero'";
if ($conn->query($sql) === TRUE) {
$ip2 = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']);
} else {
echo "Error sumando visita: " . $conn->error;}
现在事情就是这样,当用户第一次输入所述表单时,我会存储他们的 ip(它的存储方式不需要非常安全,所以这就是我这样做的原因)
$ip = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']);
这就是为什么当成功执行 UPDATE 查询时我再次存储该 ip。更新的内容是服务有我的观看次数,所以我可以知道特定类型的点击次数,但是现在代码的工作方式使它变得毫无用处,因为用户可以在一个类型上点击 5000 万次,它会计算它们。我想要做的是将第一个 ip 与第二个 ip 进行比较,如果 ip 相同,则执行一个查询,对该类型减去 1,因此只添加 1 这就是我尝试过的
$contador=$contador+1;
if (isset($_POST['genero'])) {
$genero=$_POST['genero'];
$sql = "UPDATE generos SET visitas=visitas+1 where nombre='$genero'";
if ($conn->query($sql) === TRUE) {
$ip2 = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']);
} else {echo "Error sumando visita: " . $conn->error;}
if ($contador>1) {
if ($ip2==$ip){
$sql = "UPDATE generos SET visitas=visitas-1 where nombre='$genero'";
if ($conn->query($sql) === TRUE) {}
}
}
然后我用 isset 尝试了这样的事情,检查第一次更新是否已经完成
if (isset($ip2) and ($ip==$ip2)) {
$sql = "UPDATE generos SET visitas=visitas-1 where nombre='$genero'";
if ($conn->query($sql) === TRUE) {}}
但发生的事情是数字保持不变,因为它加 1 减 1