2014-03-24 37 views
0

我收到一個未定義的變量和未定義的索引,我認爲isset()應該廢除。在這個例子中,我通過一個由個人名字和他們公司組成的數據庫進行閱讀。我想分開獨特的公司,所以我知道他們代表了多少次。以下是我期待它做的事情:未定義的變量和PHP中的索引

  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; 
     } 
+0

「那行代碼」是......什麼?對於這個問題,錯誤信息的內容是什麼? – Sammitch

+0

我沒有看到你創建$ comp數組的地方。上面有更多的代碼嗎? – larsAnders

+0

對不起,「那行代碼」是帶有「if(isset())」的行。如果您在下面的其他帖子上看到我的評論,我現在已經定義了數組,但我仍然收到有關未定義變量的通知。如果我只是簡單地關閉通知('error_reporting(E_ALL^E_NOTICE);'),則頁面打印正常。 – milnuts

回答

2

你應該初始化數組或者:

循環之前補充一點:

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

好的改進,但不是問題。 –

+0

增補本,但並沒有解決問題 – milnuts

-1

您需要指定該變量確實是在PHP中的數組。

使用這個例子的文檔鏈接如下:

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

PHP array docs

0

我相信這個問題是不是你的isset()函數的功能,但行之前,你參考文獻[4]的$r1

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

我認爲這個指數可能不存在,因爲ISET應該在下面的語句中工作得很好。

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

沒有看到所有的代碼和錯誤發生在哪條線上,這是很難縮小範圍。用戶經常忘記查看或發佈到網站上會發生許多錯誤。

+0

這裏是第一兩個錯誤的示例: '說明:未定義變量:見於C:\ XAMPP \ htdocs中\ XAMPP \上線companySearch.php 781 通知:未定義的索引:位於781行的C:\ xampp \ htdocs \ xampp \ companySearch.php中的IBM 781行代表上面的if(isset())行代碼。我已經驗證$ company = $ r1 [4]不是確實是NULL,它有一個值。 – milnuts

+0

我按照以前建議的代碼更新。我已經將變量定義爲數組,並且我添加了&& $ comp [$ company]!= false'。我仍然收到Undefined變量消息。 值得注意的是,只要我設置了'error_reporting(E_ALL^E_NOTICE)',該頁面就完美地打印出生成的公司表格。 – milnuts

0

簡單的編輯你的if語句:

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

由於密鑰可能存在,但它可能沒有價值,所以會是什麼,從增加?它不會僅僅假設爲0,因爲它也可能是另一種類型。除0之外的任何數字在PHP中都將等於false,因此您可以添加上面的其他比較來解決您的問題。