PHP 超全局变量$_SERVER

1.$_SERVER['QUERY_STRING']

`$_SERVER['QUERY_STRING']` 是一个 PHP 超全局变量,它包含了 URL 中 `?` 后面的查询字符串部分。查询字符串是 URL 的一部分,用于在请求中发送数据。查询字符串由一系列的参数组成,参数之间用 `&` 符号分隔。

以下是 `$_SERVER['QUERY_STRING']` 的一些用法示例:

获取查询字符串

echo $_SERVER['QUERY_STRING'];

拆分查询字符串为数组

可以使用 `parse_str()` 函数将查询字符串解析为变量。

parse_str($_SERVER['QUERY_STRING'], $query_vars);
print_r($query_vars);

 获取特定的查询参数

可以通过直接访问数组的方式获取查询字符串中的特定参数。

// 假设查询字符串是 "id=123&name=John"
$id = isset($_SERVER['QUERY_STRING']) ? $_GET['id'] : null;
$name = isset($_SERVER['QUERY_STRING']) ? $_GET['name'] : null;

echo "ID: " . $id . "<br>";
echo "Name: " . $name . "<br>";

使用查询参数执行操作

可以根据查询参数的值来执行不同的操作。

if (isset($_GET['action']) && $_GET['action'] == 'delete') {
    // 执行删除操作
    echo "Deleting item...";
} else if (isset($_GET['action']) && $_GET['action'] == 'update') {
    // 执行更新操作
    echo "Updating item...";
}

重定向到新的查询字符串

可以使用 `header()` 函数重定向到包含新查询字符串的 URL。

header("Location: somepage.php?newparam=value");
exit;

注意事项

- 始终对从查询字符串中获取的数据进行验证和清理,以防止安全漏洞,如 XSS 攻击或 SQL 注入。
- 如果查询字符串为空,`$_SERVER['QUERY_STRING']` 将是一个空字符串,而不是 `null`。

使用 `$_SERVER['QUERY_STRING']` 可以方便地处理 URL 参数,但请记得在生产环境中谨慎使用,确保数据的安全性。

例子

来看一个查询字符串的使用实例。假设有一个用于搜索书籍的简单网页界面,用户可以输入他们想要搜索的书籍名称,然后提交表单。查询字符串用于传递用户输入的搜索词服务器端脚本。

1. HTML 表单

首先,我们有一个HTML表单用于用户输入搜索词:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Book Search</title>
</head>
<body>
    <form action="search.php" method="get">
        <label for="search">Search for a book:</label>
        <input type="text" id="search" name="query" placeholder="Enter book title">
        <input type="submit" value="Search">
    </form>
</body>
</html>

在这个表单中,当用户填写搜索词并点击“Search”按钮时,浏览器会发送一个GET请求到 search.php,同时将用户输入的搜索词作为查询字符串附加到URL后面。

2.生成的查询字符串

如果用户输入了“MVC Frameworks”作为搜索词并提交表单,生成的URL可能如下所示:

http://www.example.com/search.php?query=MVC+Frameworks

这里的查询字符串是 query=MVC+Frameworks

3.PHP脚本处理查询字符串

接下来是 search.php 脚本,它将解析查询字符串并执行搜索:

<?php
// search.php

// 使用 $_SERVER['QUERY_STRING'] 获取查询字符串
$queryString = $_SERVER['QUERY_STRING'];

// 使用 parse_str() 函数解析查询字符串
parse_str($queryString, $query);

// 检查 'query' 参数是否存在
if (isset($query['query'])) {
    // 获取查询词
    $searchTerm = $query['query'];

    // 假设 $connection 是一个已经建立的数据库连接
    // 对查询词进行转义以防止SQL注入
    $searchTerm = mysqli_real_escape_string($connection, $searchTerm);

    // 构建SQL查询
    $sql = "SELECT * FROM books WHERE title LIKE '%$searchTerm%'";

    // 执行查询并显示结果
    $result = mysqli_query($connection, $sql);
    while ($row = mysqli_fetch_assoc($result)) {
        // 使用 htmlspecialchars() 防止潜在的XSS攻击
        echo htmlspecialchars($row['title']) . "<br>";
    }
} else {
    // 如果没有提供查询词,显示一个消息
    echo "No search term provided.";
}

// 注意:在实际应用中,你需要确保 $connection 是有效的数据库连接。
?>

在这个脚本中我们首先获取了 $_SERVER['QUERY_STRING'] 的值,它包含了整个查询字符串。然后,我们使用 parse_str() 函数将查询字符串解析为一个数组。如果存在 query 参数,我们从数组中取出它,并继续执行搜索逻辑。        

注意事项

  • 在处理查询字符串时,始终对用户输入进行验证和清理。
  • 使用 htmlspecialchars() 来避免潜在的跨站脚本(XSS)攻击。
  • 使用预处理语句(PDO或mysqli)来避免SQL注入。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值