我想从表单页上传 XML 文件.上传后,xml文件的值必须放在我的数组中


I want to upload a XML file from a form page. After the upload, the values of the xml file had to be put in my array

下面你可以看到我的表单页面,在这个页面上你上传了一个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>

您可以使用 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"目录必须可由您的网络服务器写入。

希望这有帮助。