データバスがvisitorsCounterで、誰かがそのページにアクセスするたびに新しい行を追加したいと思います。私は彼らのIPを取得している、そして、私は彼らのIPでdatabasteの行がないかどうかをチェックする。存在しない場合は、新しい行を追加します。データベースに行を追加していない場合
$visitor_ip = getUserIP();
if(!isset($db)) $db = connect_db(); // connecting to the databaste with PDO
$userName = $_SESSION['username'];
$query = "SELECT entries from visitorsCounter WHERE ip=:ip";
$stmt = $db->prepare ($query);
$stmt->bindParam (":ip", $visitor_ip);
$stmt->execute();
$result = $stmt->fetch (PDO::FETCH_ASSOC);
if($result != null){ // **** if there isn't a row with that IP ****
$addEntryQuery = "UPDATE visitorsCounter SET entries = entries + 1 WHERE ip=:ip";
$stmt = $db->prepare ($addEntryQuery);
$stmt->bindParam (":ip", $visitor_ip);
$stmt->execute();
}
EDIT:ユーザーコードに行を追加する:
$userName = $_SESSION['username'];
$query = "INSERT INTO visitorsCounter(ip, entries, user)
VALUES (:ip, 1,:user)
ON DUPLICATE KEY UPDATE entries = entries + 1;
";
$stmt = $db->prepare ($query);
$stmt->bindParam (":ip", $visitor_ip);
$stmt->bindParam (":user", $userName);
$stmt->execute();
if(isset($_SESSION['username'])){
$addEntryQuery = "UPDATE visitorsCounter SET user = :user WHERE ip=:ip";
$stmt = $db->prepare ($addEntryQuery);
$stmt->bindParam (":ip", $visitor_ip);
$stmt->bindParam (":user", $userName);
$stmt->execute();
}
訪問者がウェブサイトに来て、ユーザは、データベース内のNULLです。しかし、彼がログインすると、nullのままです。どんな考え?
私は最初のsql文(select)は多少冗長であると思います。特に、ipを一意のキーとして設定した後は、「into into visitorsCounter .... duplicate key update ...」を使用すると冗長です。つまり、複数のユーザーが同じIPアドレスを持つことができ、ユーザーは複数のIPアドレスを持つことができます。 – RamRaider
行が存在するかどうかを確認するロジックが機能しません。あなたのカラムのデフォルト値がNULLでNULL値を受け入れるなら、 'null'!=" empty "または" non-existant "。追加のwhere句を追加することもできます。 –
@RamRaider正しいです。どうすればそれを処理できますか? – Dave