2012-02-06 64 views
0

我想通过点击标题来排序表。一旦我点击它,表格就按A→Z排序。下次我点击它,它应该被排序Z-> A。我不知道什么是错的。每次点击标题时,条件的第二部分都会激活。Php排序mysql表

我删除了前面的代码,并粘贴了使用$ _SESSION的几乎解决方案。

if (isset($_SESSION['sorted'])) 
{ 
    if($_SESSION['sorted']== 1) 
    { 
     $result = mysql_query("SELECT filename, address, id FROM $tablename order by ".$column." DESC"); 
     $_SESSION['sorted'] = 0; 
     echo "sorted = ". $_SESSION['sorted']; 
    } 
    else 
    { 
     $result = mysql_query("SELECT filename, address, id FROM $tablename order by ".$column); 
     $_SESSION['sorted'] = 1; 
     echo "sorted = ". $_SESSION['sorted']; 
    } 
} 
else 
{ 
     $result = mysql_query("SELECT filename, address, id FROM $tablename order by ".$column); 
     $_SESSION['sorted'] = 1; 
     echo "isnotset.sorted = ". $_SESSION['sorted']; 
} 

现在,它的工作,但有一个问题。当用户刷新页面时,$ _SESSION变量被设置为另一个值,就好像用户再次单击标题(按F5一次又一次地对表格进行排序)。

+0

全球==执着,你需要存储当前在持久存储器中排序asc/desc – 2012-02-06 16:44:37

+0

只是猜测:如果初始化$ AZ_sorted = false,它是否总是按照其他方式排序? – 2012-02-06 16:44:53

+0

每次单击标题时是否重新加载页面? – j08691 2012-02-06 16:45:33

回答

0

看起来您总是将$AZ_sorted设置为true。您应该从请求中获取它,并且只有在未设置时才将其设置为true。细节取决于您网站的其他部分的结构。例如,如果您使用GET参数,则需要类似如下内容:

$AZ_sorted = $_GET['AZ_sorted']; 
0

您在哪里设置$ AZ_sorted为true?我假设每次页面加载时都会执行此操作,并且每次都将$ AZ_sorted重置为true。

另外,全局变量永远不是一个好主意。

0

因为重新加载页面时,$ AZ_sorted再次被初始化为TRUE,所以它总是进入条件语句的else部分。

0

我想你不应该创建函数sort($ column),因为它是php中的一个受限函数。

否则,你的二传手似乎不工作:

$AZ_sorted = false; 

尝试更换真/假0/1这样的:

$AZ_sorted = 1; 
function new_sort($column="") { 
global $AZ_sorted; 
if ($AZ_sorted == 0) 
{ 
    $result = mysql_query("SELECT filename, address, id FROM $tablename order by ".$column); 
    $AZ_sorted = 1; 
    echo "$AZ_sorted = true"; 
} 
else 
{ 
    $result = mysql_query("SELECT filename, address, id FROM $tablename order by ".$column." DESC"); 
    $AZ_sorted = 0; 
    echo "$AZ_sorted = false"; 
} 
} 
+0

我试过这个。我在主代码中设置了$ AZ_sorted,而不是在函数中,并且我不认为整个代码在单击标题时运行(为什么会这样)。 – erdomester 2012-02-06 17:17:27

+0

尝试执行两次new_sort($ column =“”),您将看到条件的每个部分都被执行。 – JuSchz 2012-02-06 17:20:00

+0

是什么?执行两次?起初它的1.所以起初其他的是活跃的,它是由DESC命令,并且是0.如果我再次点击,如果应该是活跃的,它由ASC命令并且是1.然后其他活动再次。通过阅读这段代码,这是它应该如何工作的,但事实并非如此 – erdomester 2012-02-06 17:58:52