我有一个带有下拉菜单的表单,它有不同类型的电影,这是代码:
<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
答案 0 :(得分:1)
尝试通过查看他们的IP来跟踪访问者数量并不是一个好主意:
我建议你做以下事情: 不是计算IP,而是使用PHP会话将每个vistor标记为特定类型的访问者更好。会话将是客户特定的,而不是IP特定的,这使它们更可靠。
只是一个代码片段来说明这个想法:
session_start();
...
// form has been submitted && session value has not been set
if (isset($_POST['genero']) && !isset($_SESSION[$_POST['genero']]) ) {
// We have a new visitor
// 1. update DB
// 2. Set cookie value
$_SEESION[$_POST['genero']] = true;
}
我希望这会为你提供一个关于这个问题的新视角。