Почему PHP выделяет неопределенное переменное сообщение для этого кода? - PullRequest
1 голос
/ 14 марта 2012

У меня есть этот код. Это просто для целей тестирования, поэтому вам не нужно указывать мне использовать привязку параметров и подготовленные операторы и PDO, чтобы избежать SQL-инъекций.

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

Я имею в виду, переменная там . Есть идеи, что может произойти?

Ответы [ 5 ]

3 голосов
/ 14 марта 2012

Поскольку $name устанавливается только if($node->nodeName==="ModuleName").Это, если оператор относится только к этой одной строке, но код под ним (операторы mysql) продолжит выполняться независимо.

1 голос
/ 14 марта 2012

Вы пропустили набор волнистых скобок

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 

            }

        }
    }
}
}

Также вам понадобятся некоторые кавычки вокруг $ name в вашем запросе.

1 голос
/ 14 марта 2012

$node->nodeValue, вероятно, null, что устанавливает $name в null.PHP будет отображать это как неопределенное.

0 голосов
/ 14 марта 2012

$ имя выходит за рамки.

Попробуйте

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 
                }
            }
        }
    }
}
0 голосов
/ 14 марта 2012

Ну, не всегда, если $ node-> nodeName не равно «ModuleName», тогда переменная $ name никогда не создается.Попробуйте определить переменную $ name вне ваших циклов или даже вне вашего оператора if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...