2011-11-18 50 views
1

現在,$ num這裏只是數據庫搜索中的數據行數。有時候,它會是0. $ procrastinate是一個函數參數。PHP數組返回錯誤值

if ($num==0) { 
    return "Do not appear to be registered. Please check your email input again."; 
    break 1; 
} else { // there is an entry. check for consistency 
    $procrastinateDB = mysql_result($result,0,'procrastinate'); 
    if ($procrastinate != $procrastinateDB) { 
     return "Answer to your procrastination question is incorrect. Please try again!"; 
     break 2; 
    } 
    else { 
     $username = mysql_result($result,0,'usrname'); 
     $passwd = mysql_result($result,0,'passwd'); 
     return array($username, $passwd, $num); 
     break 2; 
    } 
} 

什麼我不理解的是,即使在$ NUM = 0,數組仍與$ usersname = 'd',$ passwd文件=回到 'O',和$ NUM = ''。很明顯,它將採用第一個返回的語句,並將這些變量按順序分配給第一個返回語句中的每個字符。

我該如何解決這個問題?如果沒有數據庫條目,我不希望$ username,$ passwd,$ num包含任何值。

+2

只是說明:'break'語句在這裏沒用。 'return'已經退出函數,所以不需要'bre​​ak'。 –

+0

@hakre:你在說什麼? –

+0

@火箭:我在開玩笑;) – hakre

回答

3

你的代碼一些評論:

  • 你不需要breakreturn後。
  • break在PHP中不適用於if
  • 如果您已經使用return,則不需要執行else

我對代碼做了一些更改以使其更易於理解,同時也降低了圈複雜度。也許這有助於你發現你的錯誤更容易:

function unnamed(/* ... unknown parameters ... */) 
{ 
    /* ... some code ... */ 
    if ($num==0) 
    { 
     return "Do not appear to be registered. Please check your email input again."; 
    } 

    // there is an entry. check for consistency 
    $procrastinateDB = mysql_result($result,0,'procrastinate'); 
    if ($procrastinate != $procrastinateDB) 
    { 
     return "Answer to your procrastination question is incorrect. Please try again!"; 
    } 

    $username = mysql_result($result,0,'usrname'); 
    $passwd = mysql_result($result,0,'passwd'); 
    return array($username, $passwd, $num); 
} 

你的函數返回一個字符串或數組btw。如果不檢查返回類型,並假設它是一個數組,你會觸發串訪問(見它documented on the string manual page):

$string = 'ABC'; 
echo $string[0]; // A 
echo $string[2]; // C 

通常最好有一個函數返回一個類型,而不是多個。然而,這取決於您的設計和編碼風格,所以我只能提出建議,例如返回包含狀態消息,狀態代碼(成功/失敗)的對象以及 - 如果可用 - 返回的數據數組。但是,這取決於你想要什麼。您也可以使用is_array來檢查退貨類型。

+0

謝謝!乾淨的代碼是好的。你會建議作爲返回不同類型的替代方案嗎? – shenge86

1

數組仍然返回$ usersname ='D',$ passwd ='o'和$ num =''。

$num爲0,則返回字符串:

不要顯得註冊。請再次檢查您的電子郵件輸入。

在PHP中,您可以像數組一樣訪問字符串。所以,我的猜測是,你沒有檢查,看看你是返回的字符串或數組,並做了這樣的事情:

list($username, $passwd, $num) = yourFunction(); 

由於字符串可以accesed像陣列,$usernameD$password會是o,$num將是一個空格,因爲這些是前三個字符。

我建議在訪問該值之前使用is_array以確保知道自己得到了什麼。

$ret = yourFunction(); 
if(is_array($ret)){ 
    list($username, $passwd, $num) = $ret; 
} 
else{ 
    // Something else 
} 
+0

雙向回答發生了什麼事大聲笑 –

+0

感謝您使用is_array檢查的提示。現在它完美地工作。 – shenge86

+0

@ shenge86:沒問題。要小心使用PHP,變量可以是任何類型的,所以你需要確保你知道每一個是什麼。 –