PHP表单提交给自己。单击分页链接时。除表格外,所有表格都消失了

时间:2012-06-04 17:35:30

标签: php

这是一份自我提交表格。我有3个独立的Select列表,其选择的值作为sql查询的WHERE参数传递。

当我点击按钮时,所有数据都显示得很好,很好,并且链接页面在下面。但是:

当我点击页面链接时,结果集和所有链接都从视线中消失(只有选择列表仍在视线中)。我认为它与isset条件有关,如果未设置值,则显示表单,如果已设置值,则处理表单。因此,第一个结果集正确显示,但是当您尝试转到第二个页面时,我的表单会解释选择列表未设置,因为它们被重置,因为我没有单击按钮,如果我点击链接而不是因此,它会删除所有不是html表单的内容。

分页代码中没有错误。错误在于我如何使用此分页方法链接此表单。而且我不知道应该怎么做。

        if (isset($_POST['submitted'])) { /***************IF IT IS SET, WE PROCESS THE VALUES*************************/
        $oldcountry = FALSE;
        $oldfrom = FALSE;
        $oldinto = FALSE;

 // Here just checking that all variables have been selected

       if (isset($_POST['country']))


        {
        $oldcountry = $_POST['country'];
        $country = filter_var($oldcountry, FILTER_SANITIZE_STRING);
        }
        else {
        echo 'Please, select a country';
        }
        if (isset($_POST['from_language']))
        {
        $oldfrom = $_POST['from_language'];
        $from_language = filter_var($oldfrom, FILTER_SANITIZE_STRING);
        }
        else {
        echo 'no has metido el from language';
        }
        if (isset($_POST['into_language']))
        {
        $oldinto = $_POST['into_language'];
        $into_language = filter_var($oldinto, FILTER_SANITIZE_STRING);
        }

    // so, once we have selected them and clicked the button, we go for the query

    // and paginate the results


        require_once('bdd1.php');
        $per_page = 6;
        $pages_query = mysql_query("SELECT COUNT(FName)
        FROM work_assignment, developer
        WHERE AES_DECRYPT(country, 'elperrodesanroquenotienerabo') = '".$country."'
        AND from_language = '".$from_language."'
        AND into_language = '".$into_language."'
        AND work_assignment.developer_id = developer.developer_id
        ORDER BY FName ASC ");
        $pages = ceil (mysql_result($pages_query, 0) /$per_page);
        $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
        $start = ($page - 1) * $per_page;
        $query = mysql_query("SELECT FName
        FROM work_assignment, developer
        WHERE AES_DECRYPT(country, 'elperrodesanroquenotienerabo') = '".$country."'
        AND from_language = '".$from_language."'
        AND into_language = '".$into_language."'
        AND work_assignment.developer_id = developer.developer_id
        ORDER BY FName ASC LIMIT $start, $per_page");
        while ($query_row = mysql_fetch_assoc($query)){
        echo '<p>', $query_row['FName'], '</p>';
        }
        if ($pages >=1) {
        for($x = 1; $x <=$pages; $x++){
        echo '<a href="?page='.$x. '">'.$x.'</a> ';
        }
        }
        } /************* END OF IF ISSET TO PROCESS *******************************/

    ?>

更新更新

在所有帮助之后,我设法编写了一个URL链接,使页面链接起作用。然而,我仍然需要调整它,因为我硬编码了国家的名称(基本上是爱沙尼亚),而不是嵌入代表它的变量,但我不能正确地写出这个URL:

这有效:

echo '<a href="?country=Estonia&from_language=Russian&into_language=Latvian&submitted=true&
page='.$x. '">'.$x.'</a> ';

我只需要用$ country替换爱沙尼亚,用$ fromlalaage和拉脱维亚替换$ into_language。但我已经尝试了所有可能的单引号和双引号和点的组合,我得到语法错误。有人知道怎么写吗?

2 个答案:

答案 0 :(得分:1)

POST变量丢失,因为单击链接时未提交表单,就像Slomo指出的那样。

除非您希望用户隐藏这些值,否则您可以将表单的方法设置为GET而不是POST。这样就可以将变量添加到URL中,就像$ _GET ['page']。

一样

然后必须以保持URL完整的方式呈现链接,除了需要更改的页面变量。它可以这样做(只需将当前页面更改为页面):

A problem of a repeated parameter in the pagination links?

更新

如果要在字符串中插入变量,可以将它们放在双引号内(并转义字符串中的其他双引号),或者连接字符串和变量,请参阅以下两个示例:

echo "<a href=\"?country=$country&from_language=$from_language&into_language=$into_language&submitted=true&page=$x\">$x</a>";
echo '<a href="?country=' . $country . '&from_language=' . $from_language . '&into_language=' . $into_language . '&submitted=true&page=' . $x . '">' . $x . '</a>';

答案 1 :(得分:0)

$ _ POST值仅在信息与POST请求一起发送时设置,例如您最有可能的方法= POST。当您使用方法POST(按钮=提交)提交表单时,将设置$ _POST值。每当您点击另一个链接时,只会向服务器发送新页面请求。

如果您需要在提交第一个表单后提供信息,则应使用会话。 (http://php.net/manual/de/features.sessions.php) 为每个客户端(webbrowser)存储会话,并且在会话超时之前可以使用(请参阅手册)。您必须在第一次提交表单时设置会话变量。之后,您可以使用会话中的值。

/编辑

如果您不想使用会话,可以将过滤条件作为url参数(index.php?groupby = country)添加到普通链接。然后可以使用$ _GET访问它们。