$ variable = $ _POST ['variable']。$ _ GET ['variable'];这可以接受吗?

时间:2013-06-17 16:55:34

标签: php post get pagination

输入表格,如

<form action="<?php echo (htmlspecialchars($_SERVER["PHP_SELF"] .'?page=1')) ?>" method="post">

<input type='text' name='date_month' value='<?php echo $_POST['date_month'].$_GET['date_month']?>'>

</form>

然后收到输入

$post_date_month = $_POST['date_month'].$_GET['date_month'];

基于来自mysql的输入select / get过滤数据

由于可能有很多行数据,因此创建了分页。喜欢这个

for ($page_i = 1; $page_i <= $total_pages; $page_i++) {
echo "<a href='__filter_mysql_data.php?page=$page_i&date_month=$post_date_month&date_year=$post_date_year'>| $page_i |</a> ";
}

注意!如果在url中我不使用&date_month=$post_date_month,那么当用户点击页码$page_i时,脚本将显示来自mysql的所有数据(不基于{{ 1}};不仅是用户选择的月份,而是所有月份,因为页面重新加载后$post_date_month“消失”。)

现在这是我唯一可行的解​​决方案(已经找到了几个分页类的例子,但这些例子对我来说非常复杂,所以不能在合理的时间内对我的需求进行修改)。因此决定创造一些简单的东西。

脚本可以根据需要运行,只有这个$_POST['date_month']看起来有点'疯狂'。所以问题是:代码是否可接受(可以在脚本中使用)?使用相同的查询(单击),用户可以设置/传递$ _POST或$ _GET,而不是两者。

更新

基于ØHankyPankyØ建议(不幸删除)改变

$post_date_month = $_POST['date_month'].$_GET['date_month'];

$post_date_month = $_POST['date_month'].$_GET['date_month'];

2 个答案:

答案 0 :(得分:1)

代码有点奇怪,但我认为这是可以接受的。只注意不要将$ _POST ang $ _GET变量传递给查询,因为它可以是Sql注入的向量。

答案 1 :(得分:1)

您可以像这样构建表单,但是当您使用POST提交表单时,该特定变量将完全存储在$_POST['date_month']中。

在您的情况下,当您提交表单时,您只会在page中找到GET变量(假设$_SERVER["PHP_SELF"]中没有查询字符串)。

所以你必须使用:

$post_date_month = $_POST['date_month'];

但是,如果您希望用户仅以一种方式(postget)提供月份,则最好使用类似的内容(为了清晰起见而写出来):

if (isset($_POST['date_month']))
{
  $post_date_month = $_POST['date_month'];
}
elseif (isset($_GET['date_month']))
{
  $post_date_month = $_GET['date_month'];
}
else
{
  // no month given, so for example:
  $post_date_month = '';
}