【问题标题】:MYSQL spillover functionMYSQL溢出函数
【发布时间】:2017-06-10 15:31:06
【问题描述】:

我目前正在尝试编写一个 Networking 网站并且卡在溢出功能阶段。这是它的工作原理,该网站的每个注册用户只允许将两个人推荐到网络中(他们有一个推荐链接这)。但是,如果一个会员提供了他/她的链接来推荐两个以上的人,并且注册的人想要使用该链接进行注册,则应该发生以下事件:

1. PHP 应查询 MYSQL 数据库以确定赞助商是否推荐了最多两 (2) 人,如果是,则 MYSQL 将搜索随机的赞助商用户名来替换初始赞助商。 2.如果相反,MYSQL检查发现赞助商还没有推荐两个人,那么MYSQL将继续使用赞助商用户名作为新的注册会员。

下面是数据库表的样子:

My MYSQL database snapshot

表名是affiliateuser,referedby 列是为每个成员显示赞助商的位置,我需要会员在referedby 列下只能作为赞助商出现两次(最多)。 看上表,用户 yelefash2 用他的链接推荐了两个人,而用户 mipe305 没有用他的链接或用户名推荐任何人,我需要设置一个平衡,如果第三人试图用 yelefash2 的用户名/推荐链接注册,让PHP/MYSQL 将他替换为尚未推荐两个人的用户(可能是随机选择或其他方式),这将自动将成员作为推荐溢出到可用空间,例如 mipe305

我尝试了以下 PHP 代码,但它不起作用:

 $ref=mysqli_real_escape_string($con,$_POST['referral']);//data from the referrer webform field//

$result = mysqli_query($con,"SELECT count(*) FROM  affiliateuser where username = '$ref'");

$row = mysqli_fetch_row($result);
$numrows = $row[0];
if ($numrows==0)
{
$msg=$msg."Sponsor/Referral Username Not Found..<BR>";//for checking if provided sponsor exits
$status= "NOTOK";
}

$reea = mysqli_query($con,"SELECT username,referedby, COUNT(username) FROM affiliateuser GROUP BY referedby ASC");
$reeeb = mysqli_query($con,"SELECT count(*) FROM affiliateuser where referedby='$ref' ");
$row = mysqli_fetch_row($reeeb););
$refcount = $rowp[0];



if ($refcount ==2 OR $refcount >2)
{$reee = mysqli_query($con,"SELECT username,referedby, COUNT(username) FROM affiliateuser GROUP BY referedby ASC");
$reeel = mysqli_query($con,"SELECT referedby FROM affiliateuser where COUNT(username)<2 ");
$row = mysqli_fetch_row($reeel);
$refpick = $row[0];
}
else
{$refpick=mysqli_real_escape_string($con,$_POST['referral']);}

我知道我一定是做错了什么,我对 MYSQL 和 PHP 有点陌生,非常感谢任何帮助

【问题讨论】:

  • 为什么不起作用?它做错了什么?
  • $refpick 变量假设是作为注册会员选择的赞助商发送到数据库的整个过程的最终结果,但是这个结果最终添加到用户的referedby 列中,此代码不起作用,如果我尝试注册一个新用户并且我将赞助商声明为 yelefash2,我希望它检测到 yelefash2 已用完(已经推荐了两个人)并且我希望代码将另一个随机可用用户插入为他的赞助商......它根本什么都不做,并且无论如何都将 yelefash2 作为赞助商发送(谁已经有 2 个限制)。
  • 您的代码容易受到 SQL 注入攻击尝试使用准备好的语句
  • Ishan,请阐明我如何进一步防止 sql 注入,谢谢
  • 实际上,尽管代码中存在大量语义和句法错误,但此处没有 SQL INJECTION VULNERABILITY

标签: php mysql mlm


【解决方案1】:

更换了我的遮阳篷:

  $reea = mysqli_query($con,"SELECT username,referedby, COUNT(username) 
   FROM affiliateuser GROUP BY referedby ASC");

没有做任何事情。但它可能是页面中其他地方的东西,而不是在这篇文章中。

但是你的结果数组变量是错误的。

  $refcount = $rowp[0];
 should be 
  $refcount = $row[0];

因为 $rowp 没有在任何地方定义......也是它的行结果:

   $row = mysqli_fetch_row($reeeb););

错了。应该是:

   $row = mysqli_fetch_row($reeeb);

最后,else条件:

  {$refpick=mysqli_real_escape_string($con,$_POST['referral']);}

可以简化为:

  {$refpick=$ref;}

关于比较的一件事,

  the if ($refcount ==2 OR $refcount >2) should work,
   but if (($refcount ==2) OR ($refcount >2)) will guarantee the correct operation. 
   I personally use || (double pipe) instead of "or" personally. 
   so I would have wrote it as:  if (($refcount ==2) || ($refcount >2)) { 

【讨论】:

  • 我不认为第一个变量有任何问题,我在网站内多次使用这种查询,结果没问题.. $ref=mysqli_real_escape_string($con,$_POST['推荐']);当它绕过 sql 注入将数据从 webform 传递到我的脚本时也可以工作,我只是坚持这个溢出编程的东西并且需要帮助,即使我需要完全不同的代码集才能使其工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多