PHP读取XML并写入数据库

Posted

技术标签:

【中文标题】PHP读取XML并写入数据库【英文标题】:PHP read XML and write in Database 【发布时间】:2016-09-07 23:56:38 【问题描述】:

我有一个 XML 文件,在我检查它们之后需要数据库中的数据。所以我在表格中显示数据,然后我尝试将数据写入数据库。但是使用我的代码,我只能从数据库中的 xml 中获取第一组数据。但每个 xml 中至少有 20 个或更多。如何将所有数据写入数据库?

使用此代码,我可以显示来自 xml 的数据

<form action="insert.php" method="post" />
    <table id="Wagen">
        <thead>
          <tr>        
            <th>Typ</th>
            <th>Kennzeichen</th>
            <th>Fahrer</th>
          </tr>
        </thead>

        <tbody>

    <?php
      $url = ('./cars.xml');
      $xml = simplexml_load_file( urlencode($url), null, true);


       foreach ( $xml->car as $cars ) :?>
    <tr>        
            <td><input type="hidden" name="name" value="<?php echo $cars->typ; ?>"><?php echo $cars->typ; ?></td>
            <td><input type="hidden" name="kfz-nr" value="<?php echo $cars->plate; ?>"><?php echo $cars->plate; ?></td>
            <td><input type="hidden" name="fahrer" value="<?php echo $cars->driver; ?>"><?php echo $cars->driver; ?></td>
    </tr>

<?php endforeach; ?>

       </tbody>
    </table> 
    <input type="submit" name="senden" value="XML speichern" />
</form>

我尝试使用这段代码将数据写入数据库。但我只从我的桌子上得到第一行。不是其他人。

<?php

     error_reporting(E_ALL); 
        $mysql_HOST = 'localhost'; 
        $MYSQL_USER = 'username'; 
        $MYSQL_PASS = 'password'; 
        $MYSQL_DATA = 'database'; 

        $connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
        mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error()); 

       if (isset($_POST['senden']))
    
      $sql = 
              "INSERT INTO myTable 
              (fahrzeug,
               kennzeichen,
               fahrer
              )
              VALUES
              ('".mysql_real_escape_string(trim($_POST['name']))."',
               '".mysql_real_escape_string(trim($_POST['kfz-nr']))."',   
               '".mysql_real_escape_string(trim($_POST['fahrer']))."'); 
                mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error()); 
                mysql_query("SET NAMES 'utf8'");
    
?>

我希望有人可以帮助我。 :)

【问题讨论】:

这是完全正确的,你只有一个值。因为您只发送一个值。 【参考方案1】:

在您的 foreach 循环中,您编写了多组具有不同值的隐藏输入,但所有这些都具有相同的名称,因此在提交后只有一个输入通过 POST 发送。 因此,在您的数据库代码中,您只需添加被传递的单个输入。

总之,您需要为每个隐藏的输入设置不同的名称,并在数据库插入中使用一个循环来遍历所有发送的结果。

一种方法是在输入名称后面添加 [],使其返回一个数组。

<input type="hidden" name="name[]" value="<?php echo $cars->typ; ?>">
<input type="hidden" name="kfz-nr[]" value="<?php echo $cars->plate; ?>">
<input type="hidden" name="fahrer[]" value="<?php echo $cars->driver; ?>">

会产生类似的结果:

$_POST[kfz-nr][0]=="ABC123";
$_POST[kfz-nr][1]=="KLM901";
$_POST[kfz-nr][2]=="RGB255";

等等。然后在你的插入方法中你这样做:

if (isset($_POST['senden']))

$count = count($_POST['name']);
for($i=0;$i<$count;$i++)
  $sql = 
          "INSERT INTO myTable 
          (fahrzeug,
           kennzeichen,
           fahrer
          )
          VALUES
          ('".mysql_real_escape_string(trim($_POST['name'][$i]))."',
           '".mysql_real_escape_string(trim($_POST['kfz-nr'][$i]))."',   
           '".mysql_real_escape_string(trim($_POST['fahrer'][$i]))."'); 
            mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error()); 
            mysql_query("SET NAMES 'utf8'");


【讨论】:

谢谢。你们俩。我尝试了 Ergo 的方法,效果很好。 :)【参考方案2】:
    send data from html 将数据保存为数组,而不是一个元素(下面的php示例) 不要在 php 中使用 mysql。 mysqli 或 PDO

$values = array();
for( $i=0; $i < count( $_POST['names'] ); $i++ )
    $values[] = "(" . 
             "\"" . mysql_real_escape_string(trim($_POST['name'][$i]).""\",".
             "\"" . mysql_real_escape_string(trim($_POST['kfz-nr'][$i])."\",".
             "\"" . mysql_real_escape_string(trim($_POST['fahrer'][$i])."\"".
             ")";


$sql = "INSERT INTO myTable (fahrzeug, kennzeichen, fahrer ) VALUES " . implode($values); 
mysql_query($sql) OR die("<pre><br>" . $sql . "</pre><br>".mysql_error()); 
mysql_query("SET NAMES 'utf8'");

【讨论】:

以上是关于PHP读取XML并写入数据库的主要内容,如果未能解决你的问题,请参考以下文章

C#读取并写入XML文件

PHP读写XML文件

PHP XMLReader 读取、编辑节点、编写 XMLWriter

读取/写入使用 csd 生成的 xml

六十三Spark-读取数据并写入数据库

C#读取和写入XML文件