怎么了?我收到错误消息:eval()中传递的参数无效

时间:2012-04-24 09:12:20

标签: php join eval

我写下我的PHP代码:

<?php
        // 已有指定 material, 顯示 material 資訊
        if (strlen($m_id) > 0) {
            // 此 material 屬於哪些 mgroup
            $group_info = $mUtil->groupInfo($m_id);
            $group_names = array();
            foreach ($group_info as $mg_id => $row) {
                if (!$row["not_in_group"]) {
                    $group_names[] = $row["mg_name"];
                }
            }
        }
    ?>

  <table width="100%">
    <tr>
      <th colspan="2"><?php echo $m_name; ?></th>
    </tr>
    <tr class="odd">
      <th>Formula</th>
      <td width="80%"><?php echo $formula; ?></td>
    </tr>
    <tr class="odd">
      <th>Alias</th>
      <td><?php echo $alias; ?></td>
    </tr>
    <tr class="odd">
      <th>In groups</th>
      <!-- join() == implode() -->
      <td><?php echo join($group_names, ",&nbsp; "); ?></td>
    </tr>
  </table><br /><br />

但是我收到以下错误消息:

Notice: Undefined variable: group_names in eval() (line 97 of D:\xampp\htdocs\drupal\modules\php\php.module(80) : eval()'d code).
Warning: join() [function.join]: Invalid arguments passed in eval() (line 97 of D:\xampp\htdocs\drupal\modules\php\php.module(80) : eval()'d code).
Notice: Undefined variable: group_names in eval() (line 97 of D:\xampp\htdocs\drupal\modules\php\php.module(80) : eval()'d code).
Warning: join() [function.join]: Invalid arguments passed in eval() (line 97 of D:\xampp\htdocs\drupal\modules\php\php.module(80) : eval()'d code).

任何人都可以帮助我吗?非常感谢....

3 个答案:

答案 0 :(得分:2)

未定义的错误是由于$group_names之类的变量只被定义一次

if (strlen($m_id) > 0) { ... } //condition is true.

确保在使用之前实例化您使用的变量。

使用isset($instancename)可能是解决此问题的方法之一。

示例:

if(!isset($group_names)) $group_names = array();
// ^ if $group_names is not found then at least initialize it as an empty array
//   so that the rest of the script can go easy

另外,join()需要一个粘合剂来加入数组,这个数组的顺序不正确。

<?php echo join(", ", $group_names); ?>

注意:不得使用eval()

答案 1 :(得分:1)

您对join函数的参数不正确,请在此处阅读http://php.net/manual/en/function.join.php

答案 2 :(得分:1)

如果条件strlen($m_id) > 0false,则$group_names将不会被初始化。但是,以后您无条件地使用它:

<td><?php echo join($group_names, ",&nbsp; "); ?></td>

解决方案:将初始化$group_names = array()移出条件。

除此之外,join的参数的顺序错误(您应该切换它们)。