【问题标题】:IF within a WHILE (USE OF UNDEFINED CONSTANT)IF 在 WHILE 内(使用未定义的常量)
【发布时间】:2013-03-14 10:36:30
【问题描述】:

我对每个员工都有一个暂停的布尔值。在表格中显示工作人员时,我想显示文本“暂停”或“未暂停”而不是 1 或 0。

我不断收到错误, 注意:使用未定义的常量 Staff_Suspension - 假定为“Staff_Suspension” 我确定这很简单,我对 php 来说还很陌生,只是卡住了,不想再浪费时间试图解决这个问题,却一无所获。帮助表示赞赏

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    echo "\t<tr>\n";
        echo "\t\t<td> $row[Staff_ID] </td>\n";
        echo "\t\t<td> $row[Staff_Forename] </td>\n";
        echo "\t\t<td> $row[Staff_Surname] </td>\n";
        echo "\t\t<td> $row[Staff_Email] </td>\n";
        echo "\t\t<td>";

        if ($row[Staff_Suspension] == 1){
            echo 'Suspended';
        } else if ($row[Staff_Suspension] == 0){
            echo 'Not Suspended';
        }

        echo "</td>\n";
        echo "\t\t<td> $row[Staff_Delete_Permissions] </td>\n";
    echo "\t</tr>\n";

}

【问题讨论】:

标签: php if-statement while-loop undefined


【解决方案1】:

您必须引用索引。否则,PHP 假定您已将 defined a constant 命名为 Staff_Suspension。如果不存在这样的常量,则假定您要指定字符串文字。引用消除了任何猜测工作(因此,任何通知):

if ($row['Staff_Suspension'] == 1) {
    echo 'Suspended';
} elseif ($row['Staff_Suspension'] == 0) {
    echo 'Not Suspended';
}

或者,简化:

echo $row['Staff_Suspension'] ? 'Suspended' : 'Not Suspended';

【讨论】:

  • 为什么要用引号括起来?这应该是评论
  • @Daryl,错误消息已经描述了为什么它必须用引号引起来(PHP 首先检查您是否引用了常量)。
  • 操作员已经说明他是 PHP 新手,所以我粗略地说明了为什么需要这样做,因为使用 PHP 一段时间的人都知道这个问题,新手可能不会了解原因
  • 我已经为答案添加了额外的解释。
【解决方案2】:

答案:

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    echo "\t<tr>\n";
        echo "\t\t<td>". $row['Staff_ID'] ".</td>\n";
        echo "\t\t<td>". $row['Staff_Forename'] ."</td>\n";
        echo "\t\t<td>". $row['Staff_Surname']". </td>\n";
        echo "\t\t<td>". $row['Staff_Email'] ".</td>\n";
        echo "\t\t<td>";

        if ($row['Staff_Suspension'] == 1){
            echo 'Suspended';
        } else if ($row['Staff_Suspension'] == 0){
            echo 'Not Suspended';
        }

        echo "</td>\n";
        echo "\t\t<td>". $row['Staff_Delete_Permissions'] ".</td>\n";
    echo "\t</tr>\n";

}

大致解释

常量的使用主要来自define();常量值

不需要变量

出现此错误的原因来自以下几行:

    if ($row[Staff_Suspension] == 1){
        echo 'Suspended';
    } else if ($row[Staff_Suspension] == 0){
        echo 'Not Suspended';
    }

因为您通过名称指定数组的键。你应该用引号括起来,双引号或单引号由你决定。

常量示例:

define ('Name', 'ConstantValue');
echo Name;

这将输出:ConstantValue

现在,通过阅读以上内容:

http://php.net/manual/en/function.define.php

该链接是对常量值的粗略解释。

现在回答您的具体问题。

$row[Staff_Suspension]你定义了一个常量值,因为这是一个列名,所以应该用引号括起来。

如果您从密钥编号中指定:$row[0]; 这是一个不同的故事,与您的问题无关。

【讨论】:

  • 你说的主要是什么意思?
  • 编辑 sn-p 后,可能有其他原因导致此错误。我忘了添加该注释,将我的编辑与 OPs 原版进行比较
  • 我确实比较过。他的代码中还有什么地方可以触发错误?
  • 这是我的编辑显示,现在意识到这是一个不必要的行。
  • 只是添加一些东西:你可以使用像这样的东西echo "\t\t&lt;td&gt;{$row['Staff_ID']}&lt;/td&gt;\n";
猜你喜欢
  • 2011-07-02
  • 2011-05-20
  • 2014-08-27
  • 2018-12-28
  • 2016-08-19
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多