0

我在这里遇到了一个棘手的问题,我希望有人能帮忙。我希望公共用户定义网页上信息显示的顺序。用户将知道 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();
  });

4

1 回答 1

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);
于 2013-05-30T14:22:51.557 回答