2015-10-07 44 views
0

我正在设计一个简单的任务列表,但我遇到了一些小问题。 我希望能够通过单击表单按钮来从数据库中订购项目,但它不起作用。PHP按升序/降序排序不起作用

这是在升序和降序之间对它进行排序的代码。

$type='ASC'; 
if(isset($_POST['sort'])) { 
    if ($type == 'DESC') { 
     $type = 'ASC'; 
    } 
}elseif($type == 'ASC') { 
    $type='DESC'; 
} 

用于获取从DB结果查询:

$sql = 'SELECT * FROM customers ORDER BY id '. $type; 

(编辑:按钮是一个POST方法表单标签内) 和表单按钮:

<form method="post"><button type="submit" name="sort" id="asc"></button></form> 

这(在我看来)应该能够工作,但事实并非如此。 任何人愿意帮我找到问题吗?

+0

你是如何让你的'$ type'变量? – NaijaProgrammer

+1

该按钮本身不会真的发送名为'asc'的$ _POST变量。您需要将其放在表单中才能正确发布信息。如果它不起作用,你可以使用'$ sql'查询来查看实际发送到数据库的内容吗? –

+0

该按钮位于表单标签内,忘记插入问题中。我写的代码必须这样做:单击按钮时,检查$ type是否为DESC,如果是,请将$ type设置为ASC,反之亦然。但它不起作用。我试图在函数内部声明变量$ type,但那也不起作用。 –

回答

0

如果要使用表单,则需要将值保存为input type =“hidden”。

<?php 
$type = $_POST["sortvalue"]; 
if(!$type) { 
    $type = "ASC"; 
} 
if(isset($_POST['sort'])) { 
    if ($type == 'DESC') { 
     $type = "ASC"; 
    }elseif($type == 'ASC') { 
     $type = "DESC"; 
    } 
} 
$sql = 'SELECT * FROM customers ORDER BY id '. $type; 
?> 

<form method="POST"> 
<button type="submit" name="sort" value="sort">Sort</button> 
<input type="hidden" name="sortvalue" value="<?php echo $type; ?>"> 
</FORM> 

希望这对你的工作..:d

+0

这个工程!非常感谢你。我想问你,因为我不擅长PHP。你为什么使用隐藏的输入类型?我不明白这是如何工作的。 –

+0

隐藏的输入与其他输入类似,但隐藏的输入不会显示在网页上,所以如果您想要将数据或临时变量与表单一起传递,您可以使用隐藏输入,您可以查看隐藏输入如何工作使用萤火虫。 :) –

0

或者您可以使用AJAX

$("body").on("click", "#asc", function(e) { 
e.preventDefault(); 
sort(); 
}); 

function sort() { 
    var order = find("table#sort_order").val(); 

    $.ajax({ 
    url: 'process.php', 
    type: 'POST', 
    data: order, 
    dataType: 'json', 
    success: function(data) { 
     // change sort order using data 
    }, // End of success function of ajax form 
    error: function(xhr, status, errorThrown) { 
     console.log("Error: " + errorThrown); 
     console.log("Status: " + status); 
     console.dir(xhr); 
    }, 
    }); // End of ajax call 
}