我是PHP的新手,但我一直在尽我所能去了解这里出了什么问题:
$sid = $db->EscapeString($_GET['data']);
$site = $db->FetchArray($db->Query("SELECT id,cpc FROM `surf` WHERE `id`='".$sid."'"));
$check = $db->GetNumRows($db->Query("SELECT * FROM `surfed` WHERE `user`='".$data['id']."' AND `site`='".$sid."'"));
$pr = mysql_query("SELECT premium FROM users");
if($site['id'] != "" && $check == 0 && $pr['premium'] = "0"){
$db->Query("UPDATE `users` SET `coins`=`coins`+'".$site['cpc']."' WHERE `id`='".$data['id']."'");
$db->Query("UPDATE `surf` SET `visits`=`visits`+'1', `points`=`points`-'".$site['cpc']."' WHERE `id`='".$site['id']."'");
$db->Query("INSERT INTO `surfed` (user, site) VALUES('".$data['id']."', '".$site['id']."')");
}
elseif($site['id'] != "" && $check == 0 && $pr['premium'] != "0"){
$db->Query("UPDATE `users` SET `coins`=`coins`+ 20 WHERE `id`='".$data['id']."'");
$db->Query("UPDATE `surf` SET `visits`=`visits`+'1', `points`=`points`-'".$site['cpc']."' WHERE `id`='".$site['id']."'");
$db->Query("INSERT INTO `surfed` (user, site) VALUES('".$data['id']."', '".$site['id']."')");
}
}
所以,基本上我一直试图做的是奖励没有Premium的用户使用正常数量的硬币和使用Premium的用户在我的Traffic Exchange网站上获得20个硬币。我不知道为什么,但上面的代码奖励每个人20个硬币。
另一个问题是上面的Premium代表一个人帐户中剩余的Premium天数,但这似乎并不是每天都在减少。有什么办法解决吗?
说明:
surf
包含id
,user
,title
,cpc
等。这是我的流量交换中的浏览页面提取数据的表格要显示。 id
是siteID,cpc
=每次点击费用等。surfed
包含siteid
和userid
,以防止用户在24小时之前再次浏览同一网站。 Cron每天都会删除此表中的数据。users
包含id
,username
,coins
,premium
等用户信息表。答案 0 :(得分:0)
我发现的第一个问题是你是在试图确定特定用户是否是“高级”用户。为此,您有以下代码:
$pr = mysql_query("SELECT premium FROM users");
但是,这将为所有用户提供“高级”列,这不是很有用。请尝试将其更改为:
$pr = mysql_query("SELECT premium FROM users WHERE id={$data['id']}");
这假设您的用户ID在$data['id']
(我认为是现有代码的情况),并且可以认为此数组条目已被转义。
其次,您尝试使用$pr
的值作为结果数组,而实际上这是一个结果句柄。要使用它,您需要执行以下操作:
$pr = mysql_query("SELECT premium FROM users WHERE id={$data['id']}");
$prData = mysql_fetch_assoc($pr);
$premium = $prData['premium'];
第三,您似乎有一个名为$db
的数据库类,但您正在将mysql_
函数混合到代码中。使用$db
类提供的方法可能更好,但由于我不知道你在这里使用的是什么类,所以很难建议。
除此之外:如果您提供尽可能多的信息,它将帮助您作为初学者。你需要假设人们对你的用例一无所知 - 所以解释一切,包括尽可能多的信息,同时保持合理简洁。什么是“冲浪页面”?你的“交通交流”是什么?什么课程是$db
?对于数据库问题,通常会提供完整的表定义。
此外,如果您获得问题的答案,请尝试将其应用于您的案例,并根据需要要求澄清。在大多数情况下,这里的人会愿意教你,但不愿意为你工作。在任何情况下,向Internet上的人员提供服务器凭据都是不好的安全做法,除非您确信他们不会损坏您的文件或窃取您的用户数据库:)
。对此非常小心!
正如我在评论中指出的那样,这类问题已经适合调试。您知道代码没有按照您的意愿执行,但您不确定 它是否失败。因此,技巧是缩小范围,直到找到具有意外或错误值的变量。
例如,请看这段代码(为了清楚起见,我已将其包装起来 - 您可以在PHP中执行此操作):
$sid = $db->EscapeString($_GET['data']);
$site = $db->FetchArray(
$db->Query("SELECT id,cpc FROM `surf` WHERE `id`='".$sid."'")
);
尝试添加一个调试语句:
$sid = $db->EscapeString($_GET['data']);
echo "Site ID: $sid";
exit();
$site = $db->FetchArray(
$db->Query("SELECT id,cpc FROM `surf` WHERE `id`='".$sid."'")
);
然后,检查$sid
是您期望的值。如果它很好,那么继续下一段代码。如果没有,请参阅为什么不正确。接下来我会尝试这样的事情:
$sid = $db->EscapeString($_GET['data']);
$sql = "SELECT id,cpc FROM `surf` WHERE `id`='" . $sid . "'";
echo "Surf query: $sql";
exit();
$site = $db->FetchArray($db->Query($sql));
在这里,您可以按预期检查SQL查询。