php插入foreach只是最后一个元素

时间:2013-06-04 12:00:04

标签: php

我在这里有一点问题,我尝试插入我从选择中得到的所有东西,但它只插入最后一个元素

$dom = new DomDocument;
$dom->load("ResultatTestSuite.xml");

// retrieve elements by tagname
/************************************   ******************************/
$order = $dom->getElementsByTagName('order');
foreach($order as $a )
  echo $a->firstChild->nodeValue . "<br />";
echo "---<br />";

$status = $dom->getElementsByTagName('status');
foreach($status as $b)
  echo $b->firstChild->nodeValue . "<br />";
echo "---<br />";

$message = $dom->getElementsByTagName('message');
foreach($message as $c)
  echo $c->firstChild->nodeValue . "<br />";
echo "---<br />";   

$timeTaken = $dom->getElementsByTagName('timeTaken');
foreach($timeTaken as $d)
  echo $d->firstChild->nodeValue . "<br />";


/************************************   ******************************/
// database configuration

$host = "-----";
$user = "-----";
$passwd = "----";
$bdd = "-----";

$connect = mysql_connect($host,$user,$passwd) or die("erreur de connexion au serveur $host");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");


$query2 = "INSERT INTO xml VALUES('$a->textContent','$b->textContent','$c->textContent','$d->textContent')";
$result2 = mysql_query($query2);

2 个答案:

答案 0 :(得分:0)

您只需要使用{}打包所需的代码。 在您的代码中,echo $d->firstChild->nodeValue . "<br />";仅作为foreach语句的一部分执行。

/************************************   ******************************/
//info base de données 

$host = "-----";
$user = "-----";
$passwd = "----";
$bdd = "-----";

$connect = mysql_connect($host,$user,$passwd) or die("erreur de connexion au serveur $host");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");

$dom = new DomDocument;
$dom->load("ResultatTestSuite.xml");

//recuperation des elements par rapport au nom de la balise
/************************************   ******************************/
$order = $dom->getElementsByTagName('order');
foreach($order as $a ) {
   echo $a->firstChild->nodeValue . "<br />";
   echo "---<br />";

   $status = $dom->getElementsByTagName('status');
   foreach($status as $b) { 
      echo $b->firstChild->nodeValue . "<br />";
      echo "---<br />";

      $message = $dom->getElementsByTagName('message');
      foreach($message as $c) {
         echo $c->firstChild->nodeValue . "<br />";
         echo "---<br />";   

         $timeTaken = $dom->getElementsByTagName('timeTaken');
         foreach($timeTaken as $d) {
            echo $d->firstChild->nodeValue . "<br />";

            $query2 = "INSERT INTO xml VALUES('" . mysql_real_escape_string($a->textContent) . "','" . mysql_real_escape_string($b->textContent) ."','" . mysql_real_escape_string($c->textContent) . "','" . mysql_real_escape_string($d->textContent) . "')";
            $result2 = mysql_query($query2);
         }
      }
   }
}

修改:

请注意,如果您尝试插入的某些值中包含',则代码可能会失败。该符号必须被转义。您可以使用mysql_real_escape_string功能(在上面的代码中链接)。它将转义可能会破坏您的查询的符号并阻止sql注入。但请注意链接页面上的警告。不推荐使用mysql_ *函数。

$results = $dom->getElementsByTagName('result');
foreach($results as $res) {
    $order = $res->getElementsByTagName('order');
    foreach($order as $a ) {
       echo $a->firstChild->nodeValue . "<br />";
       echo "---<br />";

       $status = $res->getElementsByTagName('status');
       foreach($status as $b) { 
          echo $b->firstChild->nodeValue . "<br />";
          echo "---<br />";

          $message = $res->getElementsByTagName('message');
          foreach($message as $c) {
             echo $c->firstChild->nodeValue . "<br />";
             echo "---<br />";   

             $timeTaken = $res->getElementsByTagName('timeTaken');
             foreach($timeTaken as $d) {
                echo $d->firstChild->nodeValue . "<br />";

                $query2 = "INSERT INTO xml VALUES('" . mysql_real_escape_string($a->textContent) . "','" . mysql_real_escape_string($b->textContent) ."','" . mysql_real_escape_string($c->textContent) . "','" . mysql_real_escape_string($d->textContent) . "')";
                $result2 = mysql_query($query2);
             }
          }
       }
    }
}

如果我正确理解XML的结构,那么foreach循环应该可以更好地工作。您只需要找到所有结果元素,然后:单独元素中的order,status等元素。

答案 1 :(得分:0)

将插入语句保留在foreach循环中,您回显数据,因为您保留了最后一条记录,因此只插入了最后一条记录