我正在学习php并且一直在关注OOP,在phpbridge.org
创建数据类教程在教程中,他们从帖子中获取表单数据并将其插入数据库。
以下是代码:
第1步:表格
<h2>New Topic</h2>
<form action="add.php" method="POST">
<label>
Title: <input type="text" name="title">
</label>
<br>
<label>
Description:
<br>
<textarea name="description" cols="50" rows="20"></textarea>
</label>
<br>
<input type="submit" value="Add Topic">
</form>
第2步Php文件
<?php
require 'TopicData.php';
if (isset($_POST) && sizeof($_POST) > 0) {
$data = new TopicData();
$data->add($_POST);
}
?>
第3步
TopicData.php中包含的函数
public function add($data)
{
$query = $this->connection->prepare(
"INSERT INTO topics (
title,
description
) VALUES (
:title,
:description
)"
);
$data = [
':title' => $data['title'],
':description' => $data['description']
];
$query->execute($data);
}
我的问题是关于安全问题。在将此数据插入数据库之前,通过filter_input()函数运行表单的每个字段不是最佳做法吗?这些也应该通过filter_var()来运行吗?
如果有必要,过滤器代码究竟是什么样的?
谢谢!
答案 0 :(得分:0)
TopicData.php文件正在使用准备好的SQL查询。使用准备好的查询的好处是,如果SQL查询不基于外部输入,它将消除SQL注入的可能性。使用准备好的查询时,查询的模板将与数据分开发送。这有很多好处,如下所述:https://www.w3schools.com/php/php_mysql_prepared_statements.asp
它消除了对表单数据进行清理的需要。但是,如果需要验证,如最大字符串长度,最大值和最小值等,仍可能需要使用filter_var函数过滤表单数据。