用户使用php定义了mysql表的XML输出

时间:2013-05-30 14:10:39

标签: php html mysql xml

我在这里碰到了一个艰难的人,我希望有人会帮忙。我希望公共用户定义网页上信息显示的顺序。用户将知道mysql数据库中的数据字段,并按照他或她想要的顺序自定输出字段。 这是我的php生成xml:

<?php 
    header("Content-type: text/xml"); 
    include_once("config.php");

    parse_str($_POST['data'], $order);
    $order = array(firstname,surname,title,booktitle);

    $neworder = explode("&", $order);
    echo $neworder[1];      

    $query = "SELECT `author`.`surname`,`author`.`firstname`,`publication`.`title`,`book`.`book_title` FROM author, book, publication "; 
    $resultID = mysql_query($query, $conn) or die("Data not found."); 

     $xml_output = "<?xml version=\"1.0\"?>\n"; 
    $xml_output .= "<entries>\n"; 

    for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){ 
        $row = mysql_fetch_assoc($resultID); 
        $xml_output .= "\t<entry>\n"; 
        foreach($order as $col){
            $xml_output = "\t\t<$col>" . $row[$col] . "</$col\n"; 
        }    
        $xml_output .= "\t</entry>\n"; 
    } 
    $xml_output .= "</entries>"; 
    echo $xml_output;  
?> 

和xml输出

<entries>
<entry>
<firstname>Kimtai</firstname>
<surname>Evans</surname>
<title>
Operational Decision Support: Context-Based Approach and Technological Framework
</title>
<book_title>Operational Support Decision</book_title>
</entry>
</entries>

我需要的是,用户可以通过输入他想要的字段的顺序来更改html表单的输出顺序,以便网页上的最终输出可以以姓氏开头,而不是以名字开头。我希望我能很好地解释我的问题。任何帮助将不胜感激。

jquery ajax代码

<script>
  $(function() {
        $( "#sortable" ).sortable({
        placeholder: "ui-state-highlight",
        opacity: 0.6,
       update: function(event, ui) {
        var info = $(this).sortable("serialize");
        alert(info);
        $.ajax({
            type: "POST",
            url: "home.php",
            data: info,
            context: document.body,
            success: function(){
            }
      });
    }
    });
    $( "#sortable" ).disableSelection();
  });

1 个答案:

答案 0 :(得分:2)

让用户使用jQuery UI Sortable之类的内容订购字段。按照用户选择的顺序将这些字段添加到数组中。例如:

$order = array('firstname', 'title', 'etc');

然后,当您打印出XML时,请执行以下操作:

<?php

//Example array
$order = array('firstname', 'title', 'etc');

for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){ 
    $row = mysql_fetch_assoc($resultID); 
    $xml_output .= "\t<entry>\n"; 
    foreach($order as $col){
        $xml_output = "\t\t<$col>" . $row[$col] . "</$col\n"; 
    }    
    $xml_output .= "\t</entry>\n"; 
} 

警告:列名必须与您正在创建的XML元素具有相同的名称。如果那不可行,则需要创建某种查找数组。无论如何,我建议这样做,只是因为你想要将用户可以选择的字段列入白名单。

从您在评论中提供的示例:

<?php
$string = 'post[]=firstname&post[]=title&post[]=surname&post[]=booktitle';
$order = array();

$stringExploded = explode("&", $string);
foreach($stringExploded as $val){
    $keyVal = explode("=", $val);
    array_push($order, $keyVal[1]);
}

var_dump($order);