如何在数据库上传时插入xml处理指令


How to insert xml process instruction upon upload on database

我在SO上找到了一个问题的代码。我想知道我应该把这段代码放在我的上传函数的哪里,这样它就会插入这行:

<?xml-stylesheet type="text/xsl" href="foreach_template.xsl"?>

,然后上传到数据库。

*注意:我在数据库中有这个表,它有以下列:

id - int(3)
title - varchar(50)
name - varchar(50)
type - varchar(25)
size - int(10)
content - mediumblob

*注:我也有一个文件夹,xml文件上传

uploadprocess.php

<?php
include 'connection.php';
if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0)
{
$title = $_POST['title'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
//$fileName = $_FILES['userfile']['name'];
$xml = strip_tags(mysql_real_escape_string($_FILES['userfile']['name']));
$filename = strip_tags(mysql_real_escape_string(pathinfo($xml, PATHINFO_FILENAME)));
$ext = strip_tags(mysql_real_escape_string(".xml"));
$file = strip_tags(mysql_real_escape_string($filename.$ext));
$full_local_path = strip_tags(mysql_real_escape_string('../xml/images/'.$filename.$ext));
$extension = end(explode(".", $_FILES["userfile"]["name"]));
$loc = strip_tags(mysql_real_escape_string('xml/images/'));
if ($_FILES["userfile"]["type"] == "text/xml")
{
    $fp      = fopen($tmpName, 'r');
    $content = fread($fp, filesize($tmpName));
    $content = addslashes($content);
    fclose($fp);
    $query = "INSERT INTO xmltable (title, name, size, type, content) ".
    "VALUES ('$title','$file', '$fileSize', '$fileType', '$content')";
    mysql_query($query) or die('Error, query failed');
    move_uploaded_file($_FILES["userfile"]["tmp_name"], $full_local_path);
    echo "<script> alert ('upload successful'); location.href='upload.php';</script>";
}
else
{
    echo "<script> alert('Invalid File Type'); history.back(); </script>";
}
}
?>

upload.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>XML Upload</title>
</head>
<body>
    <div style="font-family:verdana;padding:50px 10px 0px 0px;border:5px solid #4D4D4D;">
        <form action="uploadprocess.php" enctype="multipart/form-data" method="post">
        <center>
            <p>
                TITLE OF THE ARTICLE &nbsp;&nbsp;&nbsp;&nbsp;<input name="title" type="text" id="title" /><br /><br />
                <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
                <input name="userfile" type="file" id="userfile" />
                <input name="upload" type="submit" class="box" id="upload" value=" Upload ">
            </p>
        </center>
    </div>
    <br />
    <div>
        <table border="1" align="center">
            <tr>
                <td align="center" width="100px">ID</td>
                <td align="center" width="100px">TITLE</td>
                <td align="center" width="100px">LINK</td>
            </tr>
            <?php
            include ('connection.php');
            $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
            $resultsPerPage = 5;
            $startResults = ($page - 1) * $resultsPerPage;
            $numberOfRows = mysql_num_rows(mysql_query('SELECT id FROM xmltable'));
            $totalPages = ceil($numberOfRows / $resultsPerPage);
            $query = mysql_query("SELECT * FROM xmltable LIMIT $startResults, $resultsPerPage");
            while ($output = mysql_fetch_assoc($query))
            {
                echo "<tr><td>".$output['id']."</td>";
                echo "<td>".$output['title']."</td>";
                echo "<td>";
                ?>
                <a class="del" href="/xml/images/<?php echo $output['name']; ?>" class="del">View Article</a>
                </td></tr>
                <?php
            }
                ?>
    </div>
        <div id="pagination">
            <div id="pagiCount">
                <center>
                    <?php
                    echo '<span id="prev"> <a href="?page=1">| First |</a></span>';
                    if ($page > 1)
                    {
                        echo '<span id="prev"> <a href="?page='.($page - 1).'">| Prev |';
                    }
                    for($i = 1; $i <= $totalPages; $i++)
                    {
                        if($i == $page)
                            echo '<strong>'.$i.'</strong>';
                        else
                            echo '<a href="?page='.$i.'">'.$i.'</a>';
                    }
                    if ($page < $totalPages)
                        echo '<span id="next"> <a href="?page='.($page + 1).'">| Next |</a></span>';
                    echo '<a href="?page='.$totalPages.'">| Last |</a>';
                    ?>
                </center>
            </div>
        </div>
        </table>
    </form>
</body>

和view.php

<?php
include 'connection.php';
$name=$_GET['name'];
$sql="SELECT * FROM xmltable WHERE name = '$name'";
$rs=mysql_query($sql);
if (!$rs)
{
echo "failed to connect";
}
else
{
while($row = mysql_fetch_array($rs))
{
    show_source("images/".$row['name']);
}
}
?>

我可以把这段代码放在哪里?这是正确的吗?

$dom = new DOMDocument();
$dom->loadXml('<?xml version="1.0" encoding="UTF-8" ?><root/>');
$dom->insertBefore($dom->createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="foreach_template.xsl"'), $dom->documentElement);
echo $dom->saveXml();

如果你觉得这篇文章太长了,我很抱歉。请帮助。谢谢你!

<?php
include 'connection.php';
if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0)
{
    $tmpName  = $_FILES['userfile']['tmp_name'];
    $fileSize = $_FILES['userfile']['size'];
    $fileType = $_FILES['userfile']['type'];
    //$fileName = $_FILES['userfile']['name'];
    if ($_FILES['userfile']['type'] == 'text/xsl')
    {
        echo "<script> alert('Invalid File Type'); history.back(); </script>";
    }
    else if($_FILES['userfile']['type'] != 'text/xml')
    {
        echo "<script> alert('Invalid File Type'); history.back(); </script>";
    }
    else
    {
        $userfile = strip_tags(mysql_real_escape_string($_FILES['userfile']['name']));
        $filename = strip_tags(mysql_real_escape_string(pathinfo($userfile, PATHINFO_FILENAME)));
        $ext = strip_tags(mysql_real_escape_string(".xml"));
        $extension = end(explode(".", $_FILES["userfile"]["name"]));
        $loc = strip_tags(mysql_real_escape_string('xml/images/'));
        $xslt = strip_tags(mysql_real_escape_string($filename.$ext));
        $xml = new DOMDocument('1.0', 'utf-8');
        $xml->load($tmpName);
        $xml->insertBefore($xml->createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="xsl/foreach_template.xsl"'), $xml->documentElement);
        $xml->formatOutput = true;
        $xml->saveXml();
        $xml->save($tmpName);
        $fp      = fopen($tmpName, 'r');
        $content = fread($fp, filesize($tmpName));
        $content = addslashes($content);
        fclose($fp);
        print_r($tmpName);
        var_dump($tmpName);
        $full_local_path = strip_tags(mysql_real_escape_string('../xml/images/'.$filename.$ext));
        move_uploaded_file($tmpName, $full_local_path);
        $query = "INSERT INTO xmltable (name, size, type, content) "."VALUES ('$xslt', '$fileSize', '$fileType', '$content')";
        mysql_query($query) or die('Error, query failed');
        echo "<script> alert ('upload successful'); location.href='upload.php';</script>";
    }
}
?>