2011-01-29 15 views
1

私は、データベース内のこの単純な問題Whileループ

mysqli_select_db($connect,"users"); 

$response = "Select * from revbut where onuser='$u'"; 
$rquery = mysqli_query($connect,$response); 
$norows = mysqli_num_rows($rquery); 






while($responseanswer=mysqli_fetch_array($rquery)){ 


if(json_encode($responseanswer['response']=='approve')) 
{ 
include('response-2.php'); 
} 

else if(json_encode($responseanswer['response']=='reject')) 
{ 
    include('response-3.php'); 
} 
else 
{ 
echo "Nothing in here. "; 
} 
} 

を持って、2つのフィールドがあります。したがって、一方は承認され、他方は拒否されます。しかし、phpにはresponse-2.phpファイルが2回含まれています。なぜそうなのか?

+0

json_encodeに何をしているのか教えてください。私はいつも値 – AmirModiri

答えて

3

$ responseanswer ['response']を 'approve'と 'reject'と比較し、json_encoding()をtrueまたはfalseと比較しているためです。 jsonのエンコーディングは、 "true"や "false"などの文字列になります。また、PHPでtrue(true)とif(false)が両方ともtrueの場合実際、if()をfalseにする唯一の文字列は文字列 "0"と ""です。 http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

サンプルデータを与えていないので、json_encoding()がなぜ必要なのかは分かりませんが、バグだとはっきりしています。

+0

oh..joutをjson_encodeなしで返すのであれば、内部では意味がありません。$ reposneanswer ['serial']とそれ以外のものは表示されますが、['response']は表示されません; – sarthak

+0

まあ、json_encode()の結果を変数に取り込む必要があります。提示したコードでは、エンコーディングの結果が破棄されています。 –

1

結果セットのすべてのレコードに対してループが実行されているためです。あなたのループは、基本的に 'response'フィールドが「approve」に等しくなるたびにresponse-2.phpを含みます。テーブルに「応答」フィールドが「承認」するレコードが5つある場合、ループにはresponse-2.phpが5回含まれます。あなたのwhileループの前に

、あなたが反復変数を確立することができる:

$ I = 1;

あなたのループの終わりに、1で値を繰り返す:

$ I ++;

次に、$ iの値を確認します。 1より大きい値の場合は、インクルードをやり直してください。たとえば:

$i = 1; 
while($responseanswer=mysqli_fetch_array($rquery)){ 


if(json_encode($responseanswer['response']=='approve')) 
{ 
($i == 1 ? include('response-2.php') : ""); 
} 

else if(json_encode($responseanswer['response']=='reject')) 
{ 
($i == 1 ? include('response-3.php') : ""); 
} 
else 
{ 
echo "Nothing in here. "; 
} 
$i++; 
} 
+0

どうすれば解決できますか? – sarthak

+0

遅れて申し訳ありません。私は電子メール通知をオンにしていません。私はサンプルを提供しました。私はあなたが達成しようとしていることを正確にはわかりません。反復値が1より大きい場合に追加の手順を実行する必要がある場合は、これをより伝統的なif/else構文に変換する必要があります。 – technoTarek

0

私はあなたのデータベースでこれを行う必要がありますし、あなたがこれを行うべきだと思う:

は、キー名は、例えば

rejectOrAproveでキー列と値をHASE一つのレコードを持っていますと値がaproveの値が1で、rejectが0の場合の値。