2009-09-27 55 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