0

下面你可以看到我的表单页面,在这个页面你上传一个 xml 文件。

<html>
<body>

<form enctype="multipart/form-data" action="arrayincludefiletest.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
<table width="600">
<tr>
<td>File name:</td>
<td><input type="file" name="file" /></td>
<td><input type="submit" value="Upload" /></td>
</tr>
</table>
</form>

</body>
</html>

下面你可以看到我的 PHP 代码,如果你看一下你会发现现在一切都是手动的。我必须自己填充数组。但我希望该数组将由 XML 文件的值自动填充。因此,如果您上传 XML 文件,文件的值将自动填充我的数组。您还可以看到我将数组插入到我的数据库中。

<html>
<head>
<title> Bom Array </title>
</head>
<body>

<?php

$bom= array(
        array("Aantal" =>1, "Manufactorer" =>"Panasonic", "Partno" =>"EEEFC1H1R0R", 
                "Description" =>"Capacitor 0603","Footprint" =>"CAP0603", "Refdes" =>"B1"),
        array("Aantal" =>2, "Manufactorer" =>"Vishay", "Partno" =>"MAL215371228E3", 
                "Description" =>"Capacitor 1210","Footprint" =>"CAP1210", "Refdes" =>"C6,C7"),
        array("Aantal" =>3, "Manufactorer" =>"Ferroxcube", "Partno" =>"MAL215371109E3", 
                "Description" =>"Buzzer 80dB 3,4 KHz","Footprint" =>"KPEG238", "Refdes" =>"C8,C25"),
        array("Aantal" =>4, "Manufactorer" =>"Philips", "Partno" =>"EEEFC1E101P", 
                "Description" =>"Tantaal 100uF, 6,3V Case_B","Footprint" =>"Case_B", "Refdes" =>"C1")
);

echo "<table border='1'>";
echo "<tr>
        <th>Aantal</th>
        <th>Manufactorer</th>
        <th>Partno</th>
        <th>Description</th>
        <th>Footprint</th>
        <th>Refdes</th>
     </tr>";

echo "<tr>
        <td>" . $bom[0]['Aantal'] . "</td>
        <td>" . $bom[0]['Manufactorer'] . "</td>
        <td>" . $bom[0]['Partno'] . "</td>
        <td>" . $bom[0]['Description'] . "</td>
        <td>" . $bom[0]['Footprint'] . "</td>
        <td>" . $bom[0]['Refdes'] . "</td>
      </tr>";

echo "<tr>
        <td>" . $bom[1]['Aantal'] . "</td>
        <td>" . $bom[1]['Manufactorer'] . "</td>
        <td>" . $bom[1]['Partno'] . "</td>
        <td>" . $bom[1]['Description'] . "</td>
        <td>" . $bom[1]['Footprint'] . "</td>
        <td>" . $bom[1]['Refdes'] . "</td>
      </tr>";

echo "<tr>
        <td>" . $bom[2]['Aantal'] . "</td>
        <td>" . $bom[2]['Manufactorer'] . "</td>
        <td>" . $bom[2]['Partno'] . "</td>
        <td>" . $bom[2]['Description'] . "</td>
        <td>" . $bom[2]['Footprint'] . "</td>
        <td>" . $bom[2]['Refdes'] . "</td>
      </tr>";

echo "<tr>
        <td>" . $bom[3]['Aantal'] . "</td>
        <td>" . $bom[3]['Manufactorer'] . "</td>
        <td>" . $bom[3]['Partno'] . "</td>
        <td>" . $bom[3]['Description'] . "</td>
        <td>" . $bom[3]['Footprint'] . "</td>
        <td>" . $bom[3]['Refdes'] . "</td>
      </tr>";
echo "</table>";

// Connectie database and Insert into database
$con = mysqli_connect("localhost", "csa", "csa", "csa");

// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL:" . mysqli_connect_error();
}

if(is_array($bom))
{
    $sql= "INSERT INTO bom (Aantal, Manufactorer, Partno, Description, Footprint, Refdes) values";

    $valuesArr = array();
    foreach ($bom as $row)
    {   
        $aantal = (int) $row['Aantal'];
        $manufactorer = mysqli_real_escape_string($con, $row['Manufactorer']);
        $partno = mysqli_real_escape_string($con, $row['Partno']);
        $description = mysqli_real_escape_string($con, $row['Description']);
        $footprint = mysqli_real_escape_string($con, $row['Footprint']);
        $refdes = mysqli_real_escape_string($con, $row['Refdes']);

        $valuesArr[] = "('$aantal', '$manufactorer', '$partno', '$description', '$footprint', '$refdes')";
    }

    $sql .= implode(',', $valuesArr);
    mysqli_query($con, $sql) or die('Error:' . mysqli_errno($con));

}

mysqli_close($con);

?>

</body>
</html>
4

1 回答 1

0

您可以使用 PHP SimpleXML 扩展来读取 XML 文件并将它们转换为对象。如果您运行 PHP 5.1.2 或更高版本,则默认启用它。PHP 手册提供了一些出色的示例。

第 1 步:保存 XML 文件

首先要决定是否要存储 XML 文件。在这种情况下,请查看“POST 方法上传”示例(http://www.php.net/manual/en/features.file-upload.post-method.php)。如果要将上传的 XML 文件移动到当前文件夹中名为“xml”的目录中,则如下所示:

if(!empty($_FILES)) {
    $uploaddir = dirname(__FILE__) . '/xml/';
    $uploadfile = $uploaddir . basename($_FILES['file']['name']);

    if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
        echo 'The XML file has been successfully uploaded.';
    } else {
        echo 'Error occurred while saving the uploaded file.';
    }
}

第 2 步:读取 XML 文件

下一步是使用 SimpleXML 加载 XML 文件并将其转换为对象(参见http://www.php.net/manual/en/simplexml.examples-basic.php中的示例)。首先,您需要为您的数据定义一个 XML 结构。例如:

<?xml version='1.0' standalone='yes'?>
<boms>
    <bom>
            <aantal>1</aantal>
            <manufactorer>Panasonic</manufactorer>
            <partno>EEEFC1H1R0R</partno>
            <description>Capacitor 0603</description>
            <footprint>CAP0603</footprint>
            <refdes>B1</refdes>
    </bom>
    <bom>
            <aantal>2</aantal>
            <manufactorer>Vishay</manufactorer>
            <partno>MAL215371228E3</partno>
            <description>Capacitor 1210</description>
            <footprint>CAP1210</footprint>
            <refdes>C6,C7</refdes>
    </bom>
</boms>

然后读取 XML 文件并遍历行以回显它们或将它们保存到数据库中:

if(isset($uploadfile) && file_exists($uploadfile)) {
    $bom = simplexml_load_file($uploadfile);
    if(!$bom) {
        die('Unable to load XML file.');
    }

    foreach($bom as $row) {
        echo "<tr>
        <td>" . $row->aantal . "</td>
        <td>" . $row->manufactorer . "</td>
        <td>" . $row->partno . "</td>
        <td>" . $row->description . "</td>
        <td>" . $row->footprint . "</td>
        <td>" . $row->refdes . "</td>
      </tr>";
    }
}

关于这些例子的几点说明:

  • 没有验证上传的文件是否真的是 XML 文件以及它是否具有您定义的结构。确保在解析之前检查它。
  • “xml”目录必须可由您的网络服务器写入。

希望这可以帮助。

于 2013-10-04T10:23:47.533 回答