这是一份自我提交表格。我有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。但我已经尝试了所有可能的单引号和双引号和点的组合,我得到语法错误。有人知道怎么写吗?
答案 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访问它们。