【问题标题】:What does this do in this code $id = $_GET['id'];? [duplicate]这在这段代码 $id = $_GET['id']; 中有什么作用? [复制]
【发布时间】:2015-12-16 19:47:04
【问题描述】:

我正在尝试学习 PHP,我从一个简单的 CRUD 项目开始。我基本上已经下载了一些源代码,我只是在尝试完成它。当我进入 CRUD 项目的删除部分时,我遇到了这段代码:

include 'connect.php';
$id = $_GET['id']; // What does this line do?
$table = 'book';
$query = "DELETE FROM $table WHERE id_book=$id";
$result = mysqli_query($connect, $query) or die(mysqli_error($connect));
header('location: index.php');

我真的被这句话弄糊涂了:

$id = $_GET['id'];

当我在 Google 上进行一些搜索时,我发现的唯一内容是来自一些类似代码的简短描述,上面写着“从 URL 获取 id”。这对我来说毫无意义。这行实际上做了什么以及存储在 $id 变量中的内容是什么?

【问题讨论】:

  • 见过这样的网址http://www.example.com/index.php?id=123 吗?
  • 在这种情况下,它使您的代码可注入 SQL。它从这样的 URL 读取 42file.php?id=42。但是,没有执行验证,所以有人可以注入任何东西。
  • 昨天看到一个类似的问题。可惜你们不是邻居。
  • 查看准备好的语句; php.net/manual/en/mysqli.quickstart.prepared-statements.php。虽然与您的问题无关,但此代码可以很容易地删除您的所有书籍。
  • 是的,在担心安全性之前,我只是想了解一切是如何工作的

标签: php mysql


【解决方案1】:

$_GET['id'] 指的是一个 URL 参数。这是一个例子:

http://www.yourdomain.com?id=1&name=Taylor&city=London

给定上面的URL,你可以得到URL参数idnamecity$_GET['id']$_GET['name']$_GET['city']的值。

此外,正如 cmets 中所说,您的行 $query = "DELETE FROM $table WHERE id_book=$id"; 不安全。看看prepared statements

【讨论】:

  • 是的,这很奇怪,因为在源代码中我的表单是通过 POST 发送的,所以我认为这意味着 url 中不会出现任何内容,所以该行对我来说毫无意义
  • 但如果表单操作是action='file.php?id=11',那么两者都使用是有意义的
  • POST 表单请求也可以包含 GET 参数。基本上 GET 参数是你的 URL 中的所有参数。
【解决方案2】:

如果您有一个带有http://www.yourdomain.com?id=1 的网址,

$id = $_GET['id'];

ID 是$_GET['id'];

看看$_GET

但这不是最好的方法……看看filter_input

您的代码需要验证 $id(查看 Validate filters)。

对于数据库,请改用PDO (The PDO class)。

【讨论】:

  • 他们在这里寻找解释。
  • $HTTP_GET_VARS [deprecated] 不是 $_GET。根据您自己的链接php.net/manual/en/reserved.variables.get.php。你自己没有读过这个吗?如果 $_GET 曾经被弃用,他们会是一些非常愤怒的程序员,包括我自己。
  • 那么请编辑您的答案,对于 OP 和未来的读者来说,您的答案是不正确和具有欺骗性/误导性的。编辑:谢谢。
【解决方案3】:

您需要从浏览器对该 PHP 脚本进行两​​次基本调用。您可以使用“GET”或“POST”。 $_GET 将变量作为键值对传递给您的 PHP 脚本。例如,如果您执行这样的 GET 请求:http://yoururl?usermail=abc@gmail.com&id=1275,那么 $_GET 将有两个键:usermail 和 id。 $_GET["id"] 的值为 1275 - 在您的 PHP 脚本中,这将被插入到 SQL 语句中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多