2009-09-27 64 views
0

我收到此錯誤:「致命錯誤:無法使用函數返回值在第18行D:\ Programas \ wamp \ www \ away \ index.php中的寫入上下文中。第18行是if語句。調試簡單的PHP,而代碼

任何人都可以幫我解決這個問題嗎?謝謝。

$vars = array("first_date_month", "first_date_day", "last_date_month", "last_date_day", "resume_date_month", "resume_date_day", "pay_date_month", "pay_date_day", "pay_time_hour", "pay_time_minutes"); 

$err_flag = false; 
$i = 0; 
while ($i < count($vars) and $err_flag == false) 
{ 
    if ((!isset($_GET($vars[$i])) or ($_GET[$vars[$i] == "0")) 
     $err_flag = true; 
    $i++; 
} 
+2

使用編輯器,突出做循環PHP的語法和支架對。這將幫助你避免這樣的錯誤。 – Gumbo 2009-09-27 21:34:14

+1

你也不應該在while循環中使用count()。它必須在每次迭代中重新計算元素。將它保存到一個var並使用它。 – mpen 2009-09-27 21:38:27

+0

也請使用&&和||而不是「和」以及「或」,他們更常用,並使您的代碼更易讀。 – 2009-09-27 21:47:48

回答

8

也許我沒有看到很好,但:

IF((isset($ _ GET($瓦爾[$ i]))或($ _GET [$瓦爾[$ i] = =「0」))

你有括號和方括號的真正可怕的mixup。有作爲

$_GET() 

大錯字沒有這樣的事情,你必須糾正。

4

你的代碼亂七八糟。

$ _GET是一個關聯數組而不是函數(您正在使用傳遞$ vars [$ i]作爲參數的函數調用語法)。在第二個$ _GET中有一個]丟失。

18行應該是:

if ((!isset($_GET[$vars[$i]]) or ($_GET[$vars[$i]] == "0")) 
0

$_GET是一個變量,數組 - 而非函數。

這意味着你必須使用數組訪問,與[],以獲取它包含的數據。

所以:的

$_GET($vars[$i]) 

$_GET[$vars[$i]] 

,而不是您正在使用$ _GET的第一次。


而且,第二次,你忘記關閉一個];你需要使用,這意味着:中

$_GET[$vars[$i]] 

代替

$_GET[$vars[$i] 


最後,您while循環應該是這樣的:

while ($i < count($vars) and $err_flag == false) 
{ 
    if (!isset($_GET[$vars[$i]]) or $_GET[$vars[$i]] == "0") { 
     $err_flag = true; 
    } 
    $i++; 
} 

注意我還添加了{}圍繞if條件的主體;這樣一來,如果你有添加的東西,你不會冒險您的線路18 if...忘記那些;-)

0

更改爲:

if ((!isset($vars[$i])) or ($vars[$i] == "0")) 
    $err_flag = true; 
$i++; 

這主要是因爲我 - 和這純粹是個人的,我懷疑 - 不喜歡在劇本中使用$_GET[...];分配:

$variable_from_GET[] = $_GET['variable_name']; 

,然後用你的條件$variable_from_GET數組變量,你-I推定─你因爲你有一個$vars陣列。

2

我拿吧:

$vars = array("first_date_month", "first_date_day", "last_date_month", "last_date_day", "resume_date_month", "resume_date_day", "pay_date_month", "pay_date_day", "pay_time_hour", "pay_time_minutes"); 

foreach ($vars as $var) { 
    if ($err_flag = empty($_GET[$var])) 
    break; 
} 

8)

我承擔了顯着的答案有...好..回答的問題,在你的代碼,所以只是拋出一些優化:

  • 使用foreach()而不是/ while對於 很簡單,我們在 只是遍歷一個數組 - 我們可以得到值和密鑰,如果需要的話。
  • 使用空()函數(對於任何空,假,0返回true,「」,「0」)
  • 退出,當你使用破
+0

+1顯然更加緊湊。爲什麼我沒有想到'foreach'? – Gumbo 2009-09-27 22:14:31