さまざまなジャンルの映画を含むドロップダウンメニューのあるフォームがあります。これはそのコードです:
<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 を再度保存します。そのアップデートにはビューのカウントが含まれているため、特定のジャンルのクリック数を知ることができますが、ユーザーが 1 つのジャンルで 5000 万回クリックできるため、コードの動作方法が役に立たなくなります。私がやろうとしているのは、最初の ip を 2 番目の 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 を引くので、数値は同じままです。