2017-06-10 3 views
2

現在、ネットワーキングWebサイトのコードを作成しようとしていますが、スピルオーバー機能の段階に固執しています。どのように動作するのですか、サイトの登録ユーザーはそれぞれ2人の人をネットワークに招待することができますこのための参照リンク)。しかし、メンバーが2人以上の人を参照するリンクを与えていて、登録ユーザーがリンクで登録したい場合は、次のイベントが発生するはずです:MYSQLスピルオーバー機能

1. PHPはMYSQLデータベースに問い合わせて、スポンサーは2人までの人を紹介しています。そうであれば、MYSQLは最初のスポンサーを置き換えるスポンサーのユーザー名を検索します。 2.それとは逆に、MYSQLがスポンサーがまだ2人を紹介していないことを確認した場合、MYSQLは新しい登録メンバーのスポンサーユーザー名を使用するように進みます。以下は

がデータベーステーブルには次のようになります。スポンサーは、各メンバーのために示されているところ

My MYSQL database snapshot

テーブル名がaffiliateuserあるが、referedby列があり、私は唯一のことができるようにメンバーを必要としますrefereby列の下にスポンサーとして2回(最大)表示されます。 上記の表を見ると、ユーザーyelefash2は2人のユーザーを参照していますが、ユーザーmipe305はリンクまたはユーザー名を誰にも言及していません。バランスをとる必要があります。 PHP/MYSQLを使用して2人の人を参照していないユーザ(これはランダムな選択などでもよい)に置き換えてください。しかし、それは動作しません:

$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のちょっと新しいです、任意のヘルプはかなり高く評価されるだろう

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

がやっていないanything.butそれは何かがページ内に、そのないこの記事のどこかに行くことができます:

+0

なぜを比較に関する一つのことそれは動作しませんか?何が間違っているのですか? – Machavity

+0

$ refpick変数は、登録メンバーの選択されたスポンサーとしてデータベースに送信されるプロセス全体の最終結果であると考えられます。この結果はユーザーのreferedby列に追加されますが、私は新しいユーザーを登録しようとしています。私はスポンサーをyelefash2と述べています。私はyelefash2が使い果たされていることを期待しています(既に2人を参照しています)。単に何もしないで、とにかくスポンサーとしてyelefash2を送ります(既に2の制限があります)。 – Powhattan

+0

あなたのコードはSQLインジェクション攻撃を受けやすいです準備された文を使って試してください –

答えて

0

は私awnserを変更しました。

あなたの結果配列変数が間違っています。

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

の$ rowpがどこにも定義されていないので....また、その行の結果:

$row = mysqli_fetch_row($reeeb);); 

が間違っています。それは次のようになります。最後に

$row = mysqli_fetch_row($reeeb); 

、それ以外の条件:

{$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)) { 
+0

最初の変数に問題はないと思います。ウェブサイト内でそのようなクエリを複数回使用し、結果はOKです。$ ref = mysqli_real_escape_string($ con 、$ _ POST ['紹介']);また、WebFormからSQLスクリプトをバイパスしてスクリプトにデータを渡すときに機能します。このスピルオーバプログラミングの問題に悩まされていて、別のコードセットが必要になっても助けが必要です – Powhattan