2012-03-14 103 views
1

我有這段代碼。這只是爲了測試目的,所以你不需要告訴我使用參數綁定和準備好的語句和PDO來避免SQL注入。爲什麼PHP會爲此代碼發出未定義的變量消息?

foreach($dd->getElementsByTagName("ReportItem") as $elmt){ 
    foreach ($elmt->childNodes as $node){ 
     if($node->nodeName==="ModuleName") 
      $name = $node->nodeValue; 

      if($result=mysqli_query($conn,"select * from technology_info where name = $name")){ 
       if(mysqli_num_rows($result)==0){ 

        mysqli_query($conn,"insert into technology_info(id,name,tool_id) values(null,$name,'2')"); 
        //ERROR: Undefined variable: name 

       } 

      } 
     } 
} 

這是什麼代碼是爲了完成:如果變量$name是已經在數據庫中的值,什麼也不做。否則,將其添加到數據庫。

不過,我收到一條錯誤消息:注意:未定義的變量:在/var/www/teste/index5.php

名字我的意思是,變量那裏。任何想法可能發生什麼?

+0

呼應$名稱= $節點 - >的nodeValue後的變量;看看輸出是什麼 – 2012-03-14 19:30:15

+0

以及如果說$名不總是設置。 – 2012-03-14 19:31:12

回答

3

因爲$name只被設定if($node->nodeName==="ModuleName")。 if語句只適用於那一行,但它下面的代碼(mysql語句)將繼續運行。

1

$node->nodeValue可能是null,其設置$namenull。 PHP會呈現爲未定義的。

+0

賦值上方的'if'語句會阻止此操作。 – thetaiko 2012-03-14 19:31:45

+0

另外'null'肯定是不一樣的「不確定」 – thetaiko 2012-03-14 19:33:12

+0

@thetaiko,檢查'nodeName',不'nodeValue',和PHP的鬆動,有時呈現空爲未定義。 – Jon 2012-03-14 19:34:33

0

好並不總是如$節點 - >節點名稱不等於「模塊名」,那麼$ name變量永遠不會被創建。嘗試在你的循環之外定義你的$ name變量,甚至在你的if語句之外。

0

$名字超出範圍。

嘗試

foreach($dd->getElementsByTagName("ReportItem") as $elmt){ 
    foreach ($elmt->childNodes as $node){ 
     if($node->nodeName==="ModuleName"){ 
      $name = $node->nodeValue; 
      if($result=mysqli_query($conn,"select * from technology_info where name = $name")){ 
       if(mysqli_num_rows($result)==0){ 
        mysqli_query($conn,"insert into technology_info(id,name,tool_id) values(null,$name,'2')"); 
        //ERROR: Undefined variable: name 
       } 
      } 
     } 
    } 
} 
1

你忽略了一組花括號

foreach($dd->getElementsByTagName("ReportItem") as $elmt){ 
foreach ($elmt->childNodes as $node){ 
    if($node->nodeName==="ModuleName") 

    { // *** You left this out 

     $name = $node->nodeValue; 

     if($result=mysqli_query($conn,"select * from technology_info where name = $name")){ 
      if(mysqli_num_rows($result)==0){ 

       mysqli_query($conn,"insert into technology_info(id,name,tool_id) values(null,$name,'2')"); 
       //ERROR: Undefined variable: name 

      } 

     } 
    } 
} 
} 

也將需要大約$名稱一些報價在您的查詢。

相關問題