- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是一名二年级的 ICT 学生。今年之前我从未接触过 PHP,我们的讲师给了我们基础知识,并在学期末给了我们一个项目,该项目将结合我们在他的类(class)和数据库类(class)中学到的知识。我们要在 Windows 上使用经典的 AMP 设置。
现在,我们的导师告诉我们根据我们之前在类里面制作较小的网站的方式制作一个个人资料网站。
我不明白将用户输入数据库这种有点奇怪的方法背后的意义。
首先,我们进行一些 PHP 表单检查,以确保输入的数据安全且符合实际(例如,这里的邮政编码是 4 个数字,不会更多,也没有字母或其他符号)。
如果一切正常,我们将执行以下操作:
$sql = new SqlObject(); //from SqlObject.class.php
$newUser = new User(login,passw,mail,...,...,...); //from User.class.php
$sql->addUser($newUser);
SqlObject 类是一个类,它包含我们需要更新、插入和通常更改数据库中的数据的所有 SQL 命令。我们从不在普通 页面中编写 SQL。但这不是我感到困惑的地方。这是 User.class.php 文件。
此文件仅包含一个构造函数和与需要输入数据库的字段数量完全相同的字段。例如:
<?php
class User {
// members
var $id;
var $name;
var $password;
// constructor
function User($id=-1,$name='',$password='') {
$this->id = $id;
$this->name = $name;
$this->password = $password;
}
}
?>
就是这样。 SqlObject.class.php 文件需要第一行的 User.class.php 文件。
SqlObject.class.php 文件中的函数 addUser($user)
如下所示:
function addUser($user) {
$insQuery = 'INSERT INTO users(name,password)';
$insQuery.= " VALUES ('".$user->name."', '".$user->password."')";
@mysql_query($insQuery) or showError("user insert failed");
}
为什么要通过 User.class.php 文件绕这么远?某种安全原因?
我再说一遍:这是我使用 PHP 的第一年,我还是一名学生。
编辑:人们提示在插入数据之前没有对 SQL 注入(inject)进行检查。
在这篇文章的开头,我提到了“表单检查”。register.php
文件完成所有输入的转义和检查。这包括几个 Regex 测试、mysql_real_escape_string() 和一些更简单的测试。一旦所有测试都通过并且所有输入都被转义,只有这样才会发生:
$sql = new SqlObject(); //from SqlObject.class.php
$newUser = new User(login,passw,mail,...,...,...); //from User.class.php
$sql->addUser($newUser);
如果输入没有得到我看到有些人想要在 SqlObject.class.php 文件中给予它的处理,那么该代码将永远不会执行。
EDIT2:正如 promise 的那样,博客 posted
最佳答案
所以,你问为什么不直接传递用户名和密码
function addUser($name='',$password='') { etc
我的猜测是您显示的代码是面向 future 的示例,其想法是 User 类将来可能会做一些更详细的事情,或者从其他来源获取凭证,而不是使用名称和密码传递给它的构造函数。
这是一种关注点分离的想法,如果代码负责组装用户数据,则 addUer 函数仅使用它需要的东西。在大型程序中,拥有这些类型的组织确实很有帮助——从表面上看,它可能会增加复杂性,但当你开始这样思考时,它可以让你限制需要保留在脑海中的部分数量。您还可以想象分解整个编程任务,让一个人查看 User 类,另一个人执行 addUser。他们可以独立工作。在这个小案例中很愚蠢,但在现实世界中非常有益。
关于php - 不要立即看出这背后的意义(php,学校),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1285146/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我是一名二年级的 ICT 学生。今年之前我从未接触过 PHP,我们的讲师给了我们基础知识,并在学期末给了我们一个项目,该项目将结合我们在他的类(class)和数据库类(class)中学到的知识。我们要
对于 JS 来说,我确实是个新手,而且我从学校收到了一个我无法理解的问题。我已经了解了一些,但非常感谢一些提示/帮助,因为我完全陷入困境! 它或多或少如下: 使用 HTML5 呈现一个网页,要求用户输
我对编程语言、django 和数据库模型相当陌生。所以我的问题很简单我在 models.py 中有 3 个模型 class UserProfileInfo(models.Model): # creat
是的,我知道 W3school,你们都讨厌它。我有时也会这样做,但现在它对我有帮助。如何为他们的网站制作删除 cookie 按钮?他们网站上的 cookie 示例: function setCo
我是一名优秀的程序员,十分优秀!