2012-10-09 121 views
1

我在URL生日?user_birth_day=05一個參數,我有以下代碼:爲什麼這個PHP if語句不起作用?

<?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語句簡單地打印什麼。請幫忙!

+0

'如果((int)的$ _REQUEST [ 'user_birth_day'] === $ I)'或'如果($ _ REQUEST [ 'user_birth_day'] == $ I)' – air4x

+0

你應該閱讀這個頁面關於運營商'=='和'==='之間的區別http://www.php.net/manual/en/language.operators.comparison.php – Neverever

+0

備註:你不必附上每行''。這適用於連續的PHP代碼塊,而不僅限於單行。 – Joey

回答

5

這是因爲您進行了嚴格的相等比較(===),它將檢查類型,$_REQUEST中的值是一個字符串,而不是數字。您可能需要使用==來降低檢查的嚴格性。

請記住,從GETPOST請求獲得的值總是字符串,因爲HTTP沒有任何附加類型的方法。我有時看到的是將輸入數據轉換爲適當的類型,作爲輸入檢查的一部分,例如,如果你希望一個字段包含一個數字,那麼檢查它是否是,並將其轉換爲數字,否則中止。但是可能有很多方法可以解決這個問題。

作一個粗略的調試技術(如果您沒有訪問一個實際的調試器或者是和我一樣愚蠢而無法獲得的XDebug在Eclipse中正常工作),你可以在你要檢查值使用print_r和因此也學習他們的類型(可能在這裏告訴你爲什麼===無法工作)。

+0

感謝您的解釋 - 它現在使用'==',我會在時間到了的時候打勾。 – muudless

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; ?> 

,並嘗試一次可能是它的工作原理

1

爲什麼你再次打開/關閉你的php括號?

只是不喜歡這樣,看看它是否工作

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

這只是爲了測試。謝謝你的幫助。 – muudless

+0

@ muudless你歡迎:) –

0

第一店$ _REQUEST [「user_birth_day」]在一些變量,並嘗試對它們進行比較。

$day = $_REQUEST['user_birth_day']

if($day === $i) 
{ 
echo 'BINGO'; 
}