1

birthday の URL にパラメーターが?user_birth_day=05あり、次のコードがあります。

<?php echo $_REQUEST['user_birth_day']; ?> // this outputs 5

<?php for ($i = 1; $i <= 31; $i++) : ?>                     
    <?php if($_REQUEST['user_birth_day'] === $i){ echo 'BINGO'; } ?>
<?php endfor; ?>

if ステートメントは単に何も出力しません。助けてください!

4

4 に答える 4

5

これは、===型もチェックする厳密な等値比較 ( ) を行い、値が数値で$_REQUESTはなく文字列であるためです。を使用して、チェックの厳密性を下げる必要がある場合があります==

HTTP には型をアタッチする手段がないため、取得する値GETまたは要求は常に文字列であることに注意してください。POST私が時々見たのは、入力チェックの一環として、入力データを適切な型に変換することです。たとえば、フィールドに数値が含まれていると予想される場合は、それが数値であるかどうかを確認して数値に変換し、そうでない場合は中止します。しかし、おそらくそれを解決する方法はたくさんあります。

大まかなデバッグ手法として (実際のデバッガーにアクセスできない場合、または私のように愚かで Eclipse で xdebug を適切に動作させることができない場合) print_r、調べたい値に対して使用して、それらの型を学習することもできます。 (ここで、なぜ機能し===なかったかを説明できたはずです)。

于 2012-10-09T05:07:19.103 に答える
1

PHPブラケットを再び開いたり閉じたりするのはなぜですか?

このようにして、動作するかどうかを確認してください

<?php 
 for ($i = 1; $i <= 31; $i++) {                     
   if($_REQUEST['user_birth_day'] == $i) { 
     echo 'BINGO'; 
   }
 }
?>
于 2012-10-09T05:07:42.757 に答える
0
<?php echo $_REQUEST['user_birth_day']; ?> // this outputs 5

<?php for ($i = 1; $i <= 31; $i++) : ?>                     
    <?php if($_REQUEST['user_birth_day'] == $i){ echo 'BINGO'; } ?>
<?php endfor; ?>

一度試してみてください

于 2012-10-09T05:07:27.607 に答える
0

最初に $_REQUEST['user_birth_day'] をいくつかの変数に格納し、それらを比較してみてください。

$day = $_REQUEST['user_birth_day']

if($day === $i)
{ 
echo 'BINGO'; 
}
于 2012-10-09T05:10:07.390 に答える