【问题标题】:undefined variable and index in PHPPHP中未定义的变量和索引
【发布时间】:2014-03-25 05:37:14
【问题描述】:

我收到了一个未定义的变量和未定义的索引通知,我认为 isset() 应该取消这些通知。在这个例子中,我正在阅读一个由个人姓名和他们的公司组成的数据库。我想分离出独特的公司,所以我知道他们代表了多少次。这是我期望它做的事情:

  1. 打开数据库,统计条目,加载表中的第一行。
  2. 'for' 循环内的第一个'if' 查看是否存在具有公司名称哈希值的$comp 变量。如果是,请增加计数
  3. 如果没有设置 $comp 变量,这是我第一次看到这家公司,所以转到“其他”。

但是,isset() 似乎不起作用,因为 PHP 仍在向我发送有关该行代码的通知,并且我的变量和索引未定义。

   $r1Q   = mysql_query("SELECT * FROM totals", $db);
   $r1C   = mysql_num_rows($r1Q);
   $r1    = mysql_fetch_array($r1Q);

    $title = "Companies Most Represented in DB";

    printf("
    <div class=\"content\">
    <h2>%s</h2>
    <center>
    <table border=1 bgcolor=#ffffff>
    <tr bgcolor=#cc9933>
        <th width=150>Company</th>
        <th width=50>Times</th>
    </tr>
    ", $title);

   // loop through 1 time for each entry in the db
   for($j=0;$j<$r1C;$j++) {
        $company = $r1[4];

        // have i seen this company before?
        if(isset($comp[$company])) {
            $cnt[$company]++;
            $cnt1[$company]++;
        }
        else {
            $comp[$company] = $r1[4];
            $cnt[$company]  = 1;
            $cnt1[$company] = 1;
        }

【问题讨论】:

  • “那行代码”是……什么?就此而言,错误消息的文本是什么?
  • 我看不到您创建 $comp 数组的位置。上面还有代码吗?
  • 抱歉,“那行代码”是if(isset()) 所在的行。如果您在下面的其他帖子中看到我的 cmets,我现在已经定义了数组,但我仍然收到有关未定义变量的通知。如果我只是简单地关闭通知 (error_reporting(E_ALL ^ E_NOTICE);),则页面打印正常。

标签: php mysql


【解决方案1】:

你应该初始化数组:

在循环之前添加:

 $comp = array();
 $cnt = array();
 $cnt1 = array();

【讨论】:

  • 很好的改进,但不是问题。
【解决方案2】:

我认为问题不是您的 isset() 函数,而是您引用 $r1 的 [4] 之前的那一行。

for($j=0;$j<$r1C;$j++) {
   $company = $r1[4];

我认为这个索引可能不存在,因为 isset 在下面的语句中应该可以正常工作。

for($j=0;$j<$r1C;$j++) {
   if(isset($r1[4])) {
     $company = $r1[4];
   }else{
     // Handle Error
   }
   // Rest of your for statement
}

如果不查看所有代码以及错误发生在哪一行,则很难缩小范围。许多错误发生在用户经常忘记查看或在网站上发帖的地方。

【讨论】:

  • 这里是前两个错误的示例:Notice: Undefined variable: seen in C:\xampp\htdocs\xampp\companySearch.php on line 781 Notice: Undefined index: IBM in C:\xampp\htdocs\xampp\companySearch.php on line 781 第 781 行指的是我上面的 if(isset()) 代码行。我已经验证 $company =$r1[4] 确实不是 NULL,它有一个值。
  • 我遵循了之前建议的代码更新。我已将变量定义为数组,并添加了&amp;&amp; $comp[$company] != false。我仍然收到未定义的变量消息。还值得注意的是,一旦我设置了error_reporting(E_ALL ^ E_NOTICE);,页面就会完美地打印出生成的公司表。
【解决方案3】:

对 if 语句的简单编辑:

if(isset($comp[$company]) && $comp[$company] != false) { // edit was made here
            $cnt[$company]++;
            $cnt1[$company]++;
}

因为键可能存在但它可能没有值,那么它会从什么递增呢?它不会只是假设 0,因为它也可能是另一种类型。 PHP 中除 0 以外的任何数字都将等于 false,因此您可以添加上面的附加比较来解决您的问题。

【讨论】:

    【解决方案4】:

    你需要在PHP中指定该变量确实是一个数组。

    将此示例用于以下链接的文档:

    $firstquarter = array('January', 'February', 'March');
    

    PHP array docs

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 2021-01-04
      • 1970-01-01
      相关资源
      最近更新 更多