首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:如何在表行中增加值以计数视图,并将计数限制在一个IP地址

问PHP:如何在表行中增加值以计数视图,并将计数限制在一个IP地址
EN

Stack Overflow用户
提问于 2013-11-07 08:15:35
回答 3查看 2.3K关注 0票数 1

每次查看地图时,我都会使用以下方法将一个数字嵌入到“mview”中。

问题1.在下面的代码中,我应该在什么地方添加‘= mviews+ 1’,这样它就可以在重复的情况下增加?

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

问题3.如何将这个IP限制为只在24小时内增加“mview”;只有第一个视图每24小时计算一次,第一个视图后24小时内的其他视图不被计算在内。

代码语言:javascript
复制
<?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);
?> 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-07 08:20:05

代码语言:javascript
复制
DUPLICATE KEY UPDATE

用于INSERT,而不是与UPDATE语句文档一起使用。

数到一个IP就会这样

代码语言:javascript
复制
SELECT COUNT(*) FROM profiles WHERE IP = "127.1.0.0";

如果你不是在找我上面写的东西

如果IP地址是您的主密钥,那么

代码语言:javascript
复制
INSERT INTO 
profiles (ip,views) 
VALUES ("127.1.0.0",1)
ON DUPLICATE KEY 
UPDATE views=views+1;

如果您希望代码正常工作,不要使用mysql_*也可以转义用户输入

代码语言:javascript
复制
<?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);
?> 
票数 1
EN

Stack Overflow用户

发布于 2013-11-20 22:47:26

敬尤斯特斯塔和阿伦·基鲁-谢谢!由于你发布的/编辑的解决方案,我被帮助摆脱了令人难以置信的困境。我必须创建一个增编(因为我目前解决的情况可能对阅读这篇文章的人有所帮助)。

我的情况是如何建立一个基于变量的超链接(即)的点击跟踪过程;

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

我一直在获取链接以回显有代表性的信息,打开正确的、带有id标记的链接请求(而不是阻碍用户对常规点击行为的期望),但是通过这篇文章解决了增加日志链接点击的能力。注意上面的-挑剔-是的!PDO是事实上的标准。

我为散布等级污点深表歉意,但是如果我明白我现在在做什么,我应该能够在3-6周的时间内吸收基本的PDO掌握。

代码语言:javascript
复制
<?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>"; ?>

非常感谢你张贴尤斯特斯塔和阿伦基鲁,我真的很感谢你的提示。如果在这里发生的其他人看到任何异常不可原谅的事情(即使是在这种破旧的状态下,lol) --请不要犹豫--不要犹豫--对此大声喊叫。我需要所有能得到的帮助。

票数 1
EN

Stack Overflow用户

发布于 2015-05-13 20:24:17

对于任何需要在PDO中使用WORKING版本的人来说,这都是承诺的;(这是根据我在这里找到的一个答案改编的,但是在第二个版本时就不记得了,所以我会查找它以获得答案的信任。)

track.php

代码语言:javascript
复制
<?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列,所以如果您需要将其限制在一定数量的点击或其他类型的功能上,我祝您在您的工作中一切顺利(lol!)。我只是想把它作为PDO的一个当前的工作模型来发布。事实上,我可能最终不得不使用这个解决方案作为我现在所处的另一个令人难以置信的问题的基础。事实上,我几乎愿意把美元押在甜甜圈上--我会完全正确的。

HTHSO

P.S. ...PDO是令人讨厌的, difficult...but值得这么做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19830873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档