【问题标题】:Turn filtered $_POST vars into session variables?将过滤后的 $_POST 变量转换为会话变量?
【发布时间】:2016-06-16 19:51:54
【问题描述】:

我有一些从表单$_POST 数组中获取的变量,并且我已经在每个值trim() 和filter_input() 上运行了很多函数。我知道我必须在每个页面的开头添加session_start(),并像这样使用它:$_SESSION["value"]。

我只是不知道如何从 post 数组中添加我的值,并且仍然对它们使用我的卫生功能:

$ip = $_SERVER['REMOTE_ADDR'];
$name = trim( filter_input( INPUT_POST, "name", FILTER_SANITIZE_STRING ) );
$email = trim( filter_input( INPUT_POST, "email", FILTER_SANITIZE_EMAIL ) );
$state = trim( filter_input( INPUT_POST, "state", FILTER_SANITIZE_STRING ) );
$zip = trim( filter_input( INPUT_POST, "zip", FILTER_SANITIZE_STRING ) );
$product_delivery = trim( filter_input( INPUT_POST, "product_delivery", FILTER_SANITIZE_STRING ) );
$facility_delivery = trim( filter_input( INPUT_POST, "facility_delivery", FILTER_SANITIZE_STRING ) );
$cc_cost = trim( filter_input( INPUT_POST, "cc_cost", FILTER_SANITIZE_STRING ) );
$labor_cost = trim( filter_input( INPUT_POST, "labor_cost", FILTER_SANITIZE_STRING ) );
$util_cost = trim( filter_input( INPUT_POST, "util_cost", FILTER_SANITIZE_STRING ) );
$total_savings = ($product_delivery - $facility_delivery - $cc_cost - $labor_cost - $util_cost);
$tons_per_year = trim( filter_input( INPUT_POST, "tons_per_year", FILTER_SANITIZE_STRING ) );
$savings_per_year = ($total_savings * $tons_per_year);

我可以这样做吗? $_SESSION[$zip]

【问题讨论】:

  • 只做$_SESSION['name'] = $name 把它当作一个数组。
  • foreach(array('foo','bar','baz) as $x) { $_SESSION[$x] = trim(filter_input(INPUT_POST, $x, etc...); }
  • 马克 B 说了什么。但是话又说回来,你确定你在会话中需要所有这些吗?如果您想进一步审查/帮助,您可能希望更深入地展示您的设计:) 您会看到,对全局变量使用会话很容易,只是因为它很方便。但也很容易掉入反模式陷阱
  • 哇,这是一个很酷的解决方案@Marc B。像这样吗? foreach(array('ip','name','email', 'state') as $x) { $_SESSION[$x] = trim(filter_input(INPUT_POST, $x, FILTER_SANITIZE_STRING); }
  • @Sebas 再次查看我的设计后,我实际上不需要将所有这些变量都带过来。从技术上讲,Marc 的答案是最好的,但我不需要它!

标签: php session post


【解决方案1】:

例如,您可以这样做而不是创建普通变量:

session_start();
$_SESSION['name'] = trim( filter_input( INPUT_POST, "name", FILTER_SANITIZE_STRING ) );

【讨论】:

    【解决方案2】:

    你可以使用filter_input_array():

    $defs = array('name'  => FILTER_SANITIZE_STRING,
                  'email' => FILTER_SANITIZE_EMAIL);
                  //etc...
    
    $_SESSION['data'] = array_map('trim', filter_input_array(INPUT_POST, $defs));
    

    我使用$_SESSION['data'] 来不覆盖其他会话变量。然后只需访问$_SESSION['data']['name'] 等...

    或者:

    $vals     = array_map('trim', filter_input_array(INPUT_POST, $defs));
    $_SESSION = array_merge($_SESSION, $vals);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-22
      • 2012-12-22
      • 2015-11-30
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      相关资源
      最近更新 更多