PHP中未定义的变量和索引

时间:2014-03-24 21:05:21

标签: php mysql

我得到一个未定义的变量和未定义的索引通知我认为 isset()应该已经废除。在这个例子中,我通过一个由个人姓名及其公司组成的数据库进行阅读。我想把独特的公司分开,所以我知道他们有多少次代表。这就是我期待它做的事情:

  1. 打开数据库,计算条目,从表中加载第一行。
  2. 第一个' if'在'内为'循环查看是否存在具有公司名称哈希值的$ comp变量。如果是,请递增计数
  3. 如果没有设置$ comp变量,这是我第一次见到这家公司,所以去其他地方#。
  4. 然而, 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;
            }
    

4 个答案:

答案 0 :(得分:2)

您应该初始化数组:

在循环之前添加:

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

答案 1 :(得分:0)

我认为问题不是你的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
}

如果没有看到所有代码以及错误发生在哪一行,那么缩小范围要困难得多。许多错误发生在用户经常忘记查看或发布到网站上的情况。

答案 2 :(得分:0)

简单编辑if语句:

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

因为密钥可能存在但它可能没有值,所以它会从哪个增加?它不会假设0,因为它也可能是另一种类型。在PHP中,除0以外的任何数字都将等于false,因此您可以添加上面的其他比较来解决您的问题。

答案 3 :(得分:-1)

您需要指定该变量确实是PHP中的数组。

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

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

PHP array docs