1

以下を使用して、マップが表示されるたびに「mviews」に数値を挿入しています。

質問 1. 次のコードのどこに「ON DUPLICATE KEY UPDATE mviews = mviews+ 1」を追加して、重複時にインクリメントできるようにしますか?

質問 2. カウントを 1 つの IP に制限するにはどうすればよいですか?

質問 3. この IP を制限して、「mviews」を 24 時間以内にのみ増加させるにはどうすればよいですか。最初のビューのみが 24 時間ごとにカウントされ、最初のビューから 24 時間以内の残りのビューはカウントされません。

<?php
require_once 'db_conx.php';
$result = mysql_query( "UPDATE profiles SET mviews = '1' WHERE pid = '2' ")  or die (mysql_error());
  /*ON DUPLICATE KEY UPDATE mviews = mviews+ 1 */               
if($result){
                echo "Views + 1";
                }
                else {
                     echo "Views inser error";
                }
mysql_close($con);
?> 
4

3 に答える 3

1
DUPLICATE KEY UPDATE

ステートメントDOCSと一緒に使用される場合と一緒に使用されINSERTない場合UPDATE

1つのIPのカウントは次のようになります

SELECT COUNT(*) FROM profiles WHERE IP = "127.1.0.0";

[上に書いたものを探していない場合]

IP アドレスが主キーの場合

INSERT INTO 
profiles (ip,views) 
VALUES ("127.1.0.0",1)
ON DUPLICATE KEY 
UPDATE views=views+1;

コードを適切に機能させたい場合[mysql_*を使用しないで、ユーザー入力をエスケープする]

<?php
require_once 'db_conx.php';
$result = mysql_query( "SELECT * FROM profiles WHERE pid =2")  or die (mysql_error());
  /*ON DUPLICATE KEY UPDATE mviews = mviews+ 1 */               
if(mysql_num_rows($result) == 0){
     mysql_query( "INSERT INTO profiles (views) value(1) ")  or die (mysql_error());
    }else {
             mysql_query( "UPDATE profiles SET mviews = mviews +1 WHERE pid = '2' ")  or die (mysql_error());
      }
mysql_close($con);
?> 
于 2013-11-07T08:20:05.983 に答える
1

Eustatia と Arun Killu の両方に - ありがとう!!! あなたの投稿/編集された解決策のおかげで、私は気が遠くなるような渋滞から抜け出すことができました. 補遺を作成する必要があります (現在解決されている状況が、これを読んでいる人の助けになる可能性があるため)。

私の状況は、変数ベースのハイパーリンク (つまり) のクリック追跡プロセスを確立する方法でした。

<a target="_blank" href="<?php echo $link;?>"><b><?php echo $title;?></b></a>

代表的な情報をエコーアウトし、IDタグ付きの正しいリンクリクエストを開くリンクを取得し続けましたが(従来のクリック動作に対するユーザーの期待を混乱させません)、リンクのクリックを複数ログに記録する機能はこの投稿で解決されました. SUPRA-FINICKY への注意 - はい!PDO はデファクトスタンダードです。

非推奨のランク汚染を広めたことを深くお詫び申し上げますが、私が今何をしているのかを理解していれば、3 - 6 週間で初歩的な PDO の習熟を吸収できるはずです。

<?php 
/** Connect to DB */
mysql_connect("localhost","database_user","pwd") or die(mysql_error());
mysql_select_db("database_name") or die(mysql_error()); 

$id = mysql_real_escape_string($_GET['id']);

/** retrieve URL */
$result = mysql_query("SELECT * FROM `articles` WHERE ID = '$id'") or die(mysql_error());

/*ON DUPLICATE KEY UPDATE clicks = clicks+ 1 */               
if(mysql_num_rows($result) == 0){
 mysql_query("INSERT INTO `articles`(`clicks`) value(1)")  or die (mysql_error());
}else {
         mysql_query("UPDATE `articles` SET clicks=clicks+1 WHERE `id` = '$id'")  or die (mysql_error());
  }
$row = mysql_fetch_array($result); 
mysql_close();

header("Location: " . $row['link']);
?>

リンクの構成を変更して、IDがターゲットページへの正しいリンクを渡すようになりました。

<?php echo "<a href='pagetracking.php?id=" . $id . $link . "' target='_blank'> <font color='#0000CC' size='5'><b>" . $row['title']. "</b></font></a>"; ?>

Eustatia と Arun Killu を投稿していただき、本当にありがとうございます。ここで起こっている他の誰かが、非常に許されないことを見たら (この老朽化した状態であっても、笑) - 躊躇しないで - 断固として叫んでください. できる限りの助けが必要です。

于 2013-11-20T22:47:26.490 に答える
0

PDO でこれのWORKINGバージョンが必要な人に約束したとおりです。(これは、SOで見つけた回答から改作されていますが、2番目に思い出せないので、回答者にクレジットを与えるために編集を調べます。)

track.php

<?php
    //Your database information
   include '../includes/db.php';

// Fetch id (article_id) from $_GET parameter
$article_id = '';
if (isset($_GET['id'])) $article_id = intval($_GET['id']);

if (!$article_id) {
  print "No article ID found!\n";
} else {

   //
   // Fetch Article ID
   //
  $sql = "SELECT * FROM `articles` WHERE article_id = :article_id";
  $sth = $pdo->prepare($sql);
  $sth->bindParam(":article_id", $article_id);
  $sth->execute();
}

if (!$sth) {
// No article!
  echo 'Invalid Article ID!\n';
 } else {
// Article found!
   //
   // Update Clicks Column
   //
   $sql = "UPDATE articles SET clicks=clicks+1 WHERE article_id = :article_id";
   $sth = $pdo->prepare($sql);
   $sth->bindParam(':article_id', $article_id);
   $sth->execute();
}
header('Location: view_article.php?id='.intval($_GET['id']));
?>  

このコードは完璧に機能しているため、私の目的のために、やみくもにカットアンドペーストしたい人には少し注意が必要です...クリックclicksするたびに列が更新されます。クリックやその他のタイプの機能、私はあなたの努力がうまくいくことを願っています (笑!)。これを、PDO の種類の現在の実用的なモデルとして公開したかっただけです。実際、私はこの解決策を、私が現在抱えている別の頭を悩ませるジャムの基礎として使用しなければならないかもしれません. 実際、私はドーナツにドルを賭けても構わないと思っています。この動きについては完全に正しいでしょう。

HTHSO

PS ...PDO はすっごく面倒くさいです...しかし、それだけの価値はあります。

于 2015-05-13T20:24:17.803 に答える