我在这里碰到了一个艰难的人,我希望有人会帮忙。我希望公共用户定义网页上信息显示的顺序。用户将知道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();
});
答案 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);