如何在PHP中过滤清理输入?

时间:2017-08-20 09:49:23

标签: php session post

我有一些代码,我试图过滤清理表单,但它需要在$ _SESSION中,因为我需要将来自其他页面的项目添加到此页面并显示为购物车列表。无论如何,我现在无法让我的代码过滤任何东西。它不起作用,但不确定我在这里做错了什么?[代码] [1]

如果$ _POST数据有效,则必须将客户详细信息添加到$ _SESSION,并将用户转发到名为receipt.php的新脚本

  <?php

  session_start();

if(isset($_SESSION['cart'])) {

    $name =    filter_input(INPUT_SESSION, 'name', FILTER_SANITIZE_STRING);
    $email =   filter_input(INPUT_SESSION, 'email', FILTER_SANITIZE_EMAIL);
    $phone =   filter_input(INPUT_SESSION, 'phone', FILTER_SANITIZE_INT);
    $address = filter_input(INPUT_SESSION, 'address', FILTER_SANITIZE_STRING);



}
?>

所以在这一点上我需要将表单提交给自己进行测试,现在是我当前代码的代码:

session_start();
if(empty($_POST['add']) === false ) {

$name =    filter_var($_POST['name'], FILTER_SANITIZE_STRING);
$email =   filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
$phone =   filter_var($_POST['phone'], FILTER_SANITIZE_INT);
$address = filter_var($_POST['address'], FILTER_SANITIZE_STRING);


}
?>
<form method="post" action="cart.php" id="form1">

    <label for="name">Name:</label><br>
    <input type="text" name="name">
    <br><br>
    <label for="email">Email:</label><br>
    <input type="email" name="email">
    <br><br>
    <label for="tel">Phone:</label><br>
    <input type="tel" name="phone">
    <br><br>
    <label for="textarea">Address:</label><br>
    <input type="textarea" name="address">
    <br>

    <div id="checkbox">
        <input type="checkbox" value="remember">
    </div> 

    <div id="label1">
        <label for="checkbox">Remember Me</label>       
    </div>


    <br>
    <br>


        <input type="submit" value="Submit">   

</form>

我在页面上也有一个调试模块,现在它在$ _POST数组中而不是GET,这很好但是当我在名称输入字段中放入html实体时,它们仍然没有被清理/删除。 / p>

调试模块:

$_POST contains:
Array
(
[name] => Frost
[email] => 
[phone] => 
[address] => 
)

*当我将BOLD html标签添加到其输入字段时,Frost以粗体显示,但这样做的目的是阻止它发生。

1 个答案:

答案 0 :(得分:0)

INPUT_SESSION不存在 - 请参阅http://php.net/manual/en/function.filter-input.php

在任何情况下,由于您希望将经过验证的POST数据存储到会话中,因此即使存在INPUT_SESSION,您编写的代码也无法正常工作。

而是使用这样的东西:

if (!empty($_POST)  
    && ($name    = filter_input(INPUT_POST, "name", FILTER_SANITIZE_STRING))
    && ($email   = filter_input(INPUT_POST, "email", FILTER_SANITIZE_EMAIL))
    && ($phone   = filter_input(INPUT_POST, "phone", FILTER_SANITIZE_INT))
    && ($address = filter_input(INPUT_POST, "address", FILTER_SANITIZE_STRING))
    ) {
        $_SESSION['foobar'] = [
            'name'    => $name,
            'email'   => $email,
            'phone'   => $phone,
            'address' => $address,
        ];
}

通过这种方式,您可以在将数据作为数组分配给会话之前检查POST数据是否已提交以及确定所需的有效性。

请注意,在if条件内分配值是不受欢迎的,这仅仅是为了演示所需的方法类型,即在将其分配给会话之前检查并验证POST。