gpt4 book ai didi

php - 不要立即看出这背后的意义(php,学校)

转载 作者:可可西里 更新时间:2023-11-01 07:48:37 27 4
gpt4 key购买 nike

我是一名二年级的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com