1

さまざまなジャンルの映画を含むドロップダウンメニューのあるフォームがあります。これはそのコードです:

 <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 を引くので、数値は同じままです。

4

1 に答える 1