【问题标题】:$variable = $_POST['variable'].$_GET['variable']; Is this acceptable?$variable = $_POST['variable'].$_GET['variable'];这可以接受吗?
【发布时间】:2013-06-17 16:55:34
【问题描述】:

输入形式如

<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中选择/获取过滤数据

由于可能有很多行数据,创建了分页。像这样

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中我不使用&amp;date_month=$post_date_month,那么当用户点击页码$page_i时,脚本将显示来自mysql的所有数据(不是基于$post_date_month;不仅用户选择的月份,但所有月份,因为页面重新加载后$_POST['date_month']“消失”)。

现在这对我来说是唯一可行的解​​决方案(找到了几个带有分页类的示例,但是这些示例对我来说非常复杂,因此无法在合理的时间内根据我的需要进行修改)。所以决定创建一些简单的东西。

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

更新

基于 Ø Hanky Panky Ø 建议(不幸被删除)更改

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

$post_date_month = $_REQUEST['date_month'];

【问题讨论】:

  • 输出用户数据时请使用htmlspecialchars防止XSS。
  • @Marcel Korpel htmlspecialchars 用在'
  • 不在value='&lt;?php echo $_POST['date_month'].$_GET['date_month']?&gt;' 中,不在date_month=$post_date_month 中(你应该在其中urlencode 参数)并且不要在@ 和我的名字之间放置空格以便正确地给我打电话。
  • @Crontab 但是当$_GET['blah'] 包含foo$_POST['blah'] 包含bar$_REQUEST['blah'] 将包含什么?是foobarfoobar 还是barfoo

标签: php post get pagination


【解决方案1】:

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

在您的情况下,当您提交表单时,您只会在GET 中找到page 变量(假设$_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 = '';
}

【讨论】:

  • &lt;form method="POST" action="somepage.php?date_month=foo"&gt; 不太可能发生的情况下,both $_POST['date_month']$_GET['date_month'] 将包含(不同的?)值。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2013-07-22
    相关资源
    最近更新 更多