1

每次查看某些地图时,我都会使用以下内容在“mviews”中插入一个数字。

问题 1. 在下面的代码中,我在哪里添加 'ON DUPLICATE KEY UPDATE mviews = mviews+ 1' 以便它可以在重复时增加?

问题 2. 如何将计数限制为一个 IP?

问题 3. 我如何限制这个 IP 只在 24 小时内增加“mviews”;每 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语句DOCS一起使用

一个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 标记的链接请求(并且不会影响用户对传统点击行为的期望),但是这篇文章解决了 MULTIPLY 记录链接点击的能力。对超挑剔的注意 - 是的!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 中需要此工作版本的人所承诺的那样;(这改编自我在 SO 上找到的答案,但是,第二次记不起了,所以我会查找它以进行编辑以给予回答者信用。)

跟踪.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 回答