2014-01-17 62 views
0

我已經設法編碼這個CSV文件,它運行良好..我得到的唯一問題是形式上的變量錯誤..我得到這個錯誤...注意:Undefined variable:data在C:\ XAMPP \ htdocs中\ helper.php(527):運行時創建的在線功能22將csv填充到數據庫中

  1. 如何解決這個錯誤嗎?這

    這是我的示例代碼...

    <form enctype="multipart/form-data" method="POST" action="" > 
    CSV<input type="file" name="file" /> 
    <input type="submit" value="submit" name="submit"/> 
    </form> 
    
    //connect to the database 
    $connect = mysql_connect("localhost","root",""); 
    mysql_select_db("test",$connect); //select the table 
    if(isset($_POST['submit'])) 
    { 
    
    //get the csv file 
    $file = $_FILES['file']['tmp_name']; 
    $handle = fopen($file,"r"); 
    
    //loop through the csv file and insert into database 
    do { 
    if ($data[0]) { 
        mysql_query("INSERT INTO f38uj_zhgooglemaps_markers (title, addresstext, published, baloon, icontype, mapid) VALUES 
         (
          '".addslashes($data[0])."', 
          '".addslashes($data[1])."', 
          '".addslashes($data[2])."', 
          '".addslashes($data[3])."', 
          '".addslashes($data[4])."', 
          '".addslashes($data[5])."' 
         ) 
         "); 
        } 
        } while ($data = fgetcsv($handle,1000,",","'")); 
    
        } 
    
        ?> 
    
+0

我注意到了,但我仍然剛開錯誤 – Mary

+0

有可能直接使用數據庫服務器導入數據。 – Fanda

+0

我的問題是我的公司需要從遠程位置導入,所以我需要創建標記...我在地圖上工作 – Mary

回答

0

有三個問題在這裏:

1)您使用雙引號,它告訴PHP替代變量發現的價值在於你將其設置爲早,見下面的例子。

2)$的數據沒有定義,直到循環結束,所以使用常規while循環與不做,而

3)您的SQL查詢是錯誤的反正。你要有事的

$data='value',$data='value',$data='value2',$data='value3',$data='value4', 



mysql_query("INSERT INTO f38uj_zhgooglemaps_markers (title, addresstext, published, baloon, icontype, mapid) VALUES 
     (
      $data= '".addslashes($data[0])."', 
      $data= '".addslashes($data[1])."', 
      $data= '".addslashes($data[2])."', 
      $data='".addslashes($data[3])."', 
      $data= '".addslashes($data[4])."', 
      $data= '".addslashes($data[5])."' 
     ) 
     "); 
    } 

效果由於您使用的做,同時,在循環的第一次迭代,$數據將沒有任何價值,因此PHP拋出一個運行時警告,因爲因爲所有的解釋者都知道它會在稍後設置(這是你的情況)。基本上在do-while中,直到body運行之後才檢查條件,所以$ data = fgetcsv()在第一次通過之後才被調用。

您可以輕鬆地開關使用的這一點,並讓你的警告消失,只是改變這個結構:

do{ 
//... 
} 
while($data=fgetcsv()) 

這樣:

while($data=fgetcsv()){ 
//... 
} 
+0

感謝您的支持,我試着在我以前的帖子上的東西,但它重複表3倍的數據..我修改了這個現在的數據不重複,但在我得到的形式..通知:未定義的變量:數據 – Mary

+0

當你說「這是我的$數據」,PHP會找到名爲$ data的變量並將其值放入字符串中。但是,在循環的第一次迭代中,$ data沒有設置。您正在使用do-while循環,因此直到第一次迭代後纔會檢查條件,這也意味着$數據在第一次迭代後沒有被設置。您正試圖替換尚不存在的值。 – Zarathuztra

+0

現在在哪裏,我該如何設置? – Mary

0
$data=$data[0] 

應該

$data==$data[0] 

你是比較,不是分配。尤其不要在一個if語句

+0

我已經移除.. $ data = – Mary

0

如果這是所有的代碼,我沒有看到你在哪裏的任何地方設置變量$data,然後繼續前進,做一個測試就可以了:

if ($data[0]) { ... } 

你應該使這些類型的測試之前使用isset功能,除非你是100%肯定該變量不爲空:

if (isset($var)){ ... } 

然後

if ($var) { ... } 
+0

無論如何他應該使用常規while循環,然後使用如果變量爲null,fgetcsv將保證代碼不會運行。 – Zarathuztra

+0

他在do while循環中設置$ data – Farkie

+0

喲是什麼意思? – Mary