当前位置: 首页 > news >正文

PHP如何利用post与get方式传值接收数据

目录

  • 一、POST传值
    • 1. 使用curl库发送 POST 请求:
    • 2. 使用file_get_contents()函数发送 POST 请求:
    • 3. 使用stream_socket_client()函数发送 POST 请求:
    • 4. 利用from表单提交数据:
  • 二、GET传值
    • 1. 使用http_build_query()函数构建 URL 参数:
    • 2. 使用parse_url()函数构建 URL 参数:
    • 3. 使用$_GET超全局变量:
    • 4. 利用HTMI的表单提交GET数据:
  • 三、POST接收数据
    • 1. 使用 $_POST超全局变量:
    • 2. 使用 file_get_contents('php://input'):
    • 3. 使用$_REQUEST超全局变量:
    • 4. 使用 curl库:
  • 四、GET方式接收数据
    • 1. 使用$_GET超级全局变量:
    • 2. 使用parse_url()函数:
    • 3. 使用parse_str()函数:
    • 4. 使用$_SERVER超级全局变量:
  • 五、总结

在php程序的开发中,传值和接收数据是最基础的功能。网站很多地方需要使用到表单数据的提交、URL参数的解析以及API站外数据的传递和接收等。本文主要介绍PHP对post和get这两种数据传递和接收方式的使用!

一、POST传值

在 PHP 中,有几种常用的方法可以发送 POST 数据。以下是几种常见的方法:

1. 使用curl库发送 POST 请求:

$data = array('param1' => 'value1','param2' => 'value2'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);

这种方法使用curl库发送 POST 请求,并可以在CURLOPT_POSTFIELDS中设置要发送的数据。

2. 使用file_get_contents()函数发送 POST 请求:

$data = array('param1' => 'value1','param2' => 'value2'
);
$options = array('http' => array('header' => 'Content-type: application/x-www-form-urlencoded','method' => 'POST','content' => http_build_query($data))
);
$context = stream_context_create($options);
$response = file_get_contents('http://example.com', false, $context);

这种方法使用 stream_context_create() 函数创建一个上下文,并使用 file_get_contents() 函数发送 POST 请求。可以在上下文选项中设置请求头和发送的数据。

3. 使用stream_socket_client()函数发送 POST 请求:

$data = array('param1' => 'value1','param2' => 'value2'
);
$context = stream_context_create(array('http' => array('method' => 'POST','header' => "Content-type: application/x-www-form-urlencoded\r\n",'content' => http_build_query($data))
));
$fp = stream_socket_client('tcp://example.com:80', $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
if ($fp) {$response = stream_get_contents($fp);fclose($fp);
}

这种方法使用stream_context_create()函数创建一个上下文,并使用stream_socket_client()函数发送 POST 请求。同样可以在上下文选项中设置请求头和发送的数据。

4. 利用from表单提交数据:

以下是一个使用PHP实现的利用form表单提交POST数据的示例代码:

<?php
$posthtml = '
<!DOCTYPE html>
<html>
<head><title>提交POST数据</title>
</head>
<body><h2>提交POST数据</h2><form method="POST" action="post.php"><label for="name">姓名:</label><input type="text" name="name" id="name" required><br><br><label for="email">邮箱:</label><input type="email" name="email" id="email" required><br><br><input type="submit" value="提交"></form>
</body>
</html>
';echo $posthtml;
?>

上述代码中的form标签中指定了method为"POST",action为"post.php",这意味着当用户提交表单时,请求将被发送到post.php处理。这样即可利用html的表单把数据发送给php文件了。这些方法中的每一种都有其优点和适用场景。选择哪种方法取决于你的具体需求和项目结构。

二、GET传值

在 PHP 中,同样有多种方法可以发送 GET 参数。以下介绍几种常用的方法:

1. 使用http_build_query()函数构建 URL 参数:

$params  =  array('param1'  =>  'value1','param2'  =>  'value2'
);
$query  =  http_build_query($params);
$url  =  "http://example.com/?$query";

2. 使用parse_url()函数构建 URL 参数:

$url_parts  =  parse_url("http://example.com/");
$query_string  =  array();
foreach  ($_GET  as  $key  =>  $value)  {$query_string[]  =  "$key=$value";
}
$url  .=  "?"  .  implode("&",  $query_string);

3. 使用$_GET超全局变量:

$url  =  "http://example.com/?param1=value1&param2=value2";
使用 $_SERVER超全局变量:
$server  =  $_SERVER['REQUEST_URI'];
$query_string  =  "?param1=value1&param2=value2";
$url  =  "$server$query_string";

4. 利用HTMI的表单提交GET数据:

以下是一个使用PHP实现的简单案例,利用form表单提交GET数据:

<?php
$gethtml = '
<!DOCTYPE html>
<html>
<head><title>GET请求示例</title>
</head>
<body><h1>GET请求示例</h1><form action="get.php" method="GET"><label for="name">姓名:</label><input type="text" name="name" id="name"><br><br><label for="email">邮箱:</label><input type="email" name="email" id="email"><br><br><input type="submit" value="提交"></form>
</body>
</html>
';
echo $gethtml;
?>

在上面的示例中,我们创建了一个简单的HTML表单,包含了姓名和邮箱的输入框。表单的action属性指定了数据提交的目的地get.php,method属性为get,既以get的方式传递该组数据!以上这4种常用的发送 GET 参数的方法,是我们在实际程序编程时最常用的方式。你在选择使用的时候,应该根据实际需求和项目结构选择合适的方法。

三、POST接收数据

在php中,利用post方式接收数据的方法其实与post发送数据的方法基本是对应的。有多种方法可以获取通过 POST 方法发送的数据。比如以下几种常用的方法:

1. 使用 $_POST超全局变量:

$data = $_POST['data_name'];

其中,$_POST是一个超全局变量,用于存储通过 POST 方法发送的表单数据。你需要将data_name替换为实际的字段名或键名。

2. 使用 file_get_contents(‘php://input’):

$data = file_get_contents('php://input');
$post_data = json_decode($data, true);
$data = $post_data['data_name'];

这种方法可以获取到原始的 POST 数据,通常以 JSON 格式发送。首先使用file_get_contents(‘php://input’)获取原始数据,然后使用 json_decode()将其解码为 PHP 数组,最后通过键名访问数据。

3. 使用$_REQUEST超全局变量:

$data = $_REQUEST['data_name'];

$_REQUEST是一个超全局变量,它包含了通过 GET、POST、COOKIE 等方法发送的请求数据。这种方法可以获取到通过 POST 方法发送的数据。

4. 使用 curl库:

如果你需要更高级的请求处理和数据解析,可以使用curl库来获取 POST 数据。使用curl_exec()方法执行 cURL 请求,并将返回的数据存储在变量中。你可以使用回调函数或手动解析返回的数据。这种方法需要手动处理数据,但提供了更多的灵活性和控制。

四、GET方式接收数据

GET方式传递和接收数据最常见的是URL参数传值,通过URL参数的形式把需要传递的数据发送给数据处理文件,来进行解析和使用!但是相对于POST方式来说,他的安全性和传递数据的大小都要远差于POST。但是在网站的开发中,依然是最常见的一种使用方式。那么在 PHP 中,有哪些方法可以从 URL 中获取 GET 参数呢?以下简单介绍一下:

1. 使用$_GET超级全局变量:

$param1  =  $_GET['param1'];
$param2  =  $_GET['param2'];

2. 使用parse_url()函数:

$url  =  "http://example.com/?param1=value1&param2=value2";
$components  =  parse_url($url);
if  (isset($components['query']))  {$params  =  explode('&',  $components['query']);foreach  ($params  as  $param)  {$keyValue  =  explode('=',  $param);$paramKey  =  $keyValue[0];$paramValue  =  $keyValue[1];//  处理参数}
}

3. 使用parse_str()函数:

$url  =  "http://example.com/?param1=value1&param2=value2";
parse_str($url,  $params);
$param1  =  $params['param1'];
$param2  =  $params['param2'];

4. 使用$_SERVER超级全局变量:

$server  =  $_SERVER['QUERY_STRING'];
$params  =  explode('&',  $server);
foreach  ($params  as  $param)  {$keyValue  =  explode('=',  $param);$paramKey  =  $keyValue[0];$paramValue  =  $keyValue[1];//  处理参数
}

五、总结

文章中介绍的几种常用的获取 GET/POST 参数的方法,都能够满足我们日常网站对获取或者发送get/post参数的需求,根据实际需求和项目结构选择合适的方法,才是最佳的策略。我们可以通过不同的使用方法来满足我们网站程序开发的需要。每一种方法都有他的优缺点和用处,对于站内、站外、简单、复杂、普通、敏感数据的处理方式应该综合考虑、权衡利弊后进行选择。不管选择POST还是GET,在处理数据的时候都应该对数据进行验证或者过滤,避免被黑客利用,对你的网站或者应用进行植入木马或者SQL注入,给你的网站带来危险或者损失!

原文

相关文章:

PHP如何利用post与get方式传值接收数据

目录 一、POST传值1. 使用curl库发送 POST 请求&#xff1a;2. 使用file_get_contents()函数发送 POST 请求&#xff1a;3. 使用stream_socket_client()函数发送 POST 请求&#xff1a;4. 利用from表单提交数据&#xff1a; 二、GET传值1. 使用http_build_query()函数构建 URL …...

在Mac上搭建MongoDB环境

最近工作中需要装MongoDB环境&#xff0c;搭建过程中遇到了一些问题&#xff0c;在这里记录一下安装MongoDB环境的方法以及问题的解决方法。有两种安装MongoDB的方法&#xff1a;brew安装和手动安装。 目录 使用Homebrew安装MongoDB 手动安装MongoDB&#xff08;不使用Homebr…...

第三十九天| 62.不同路径、63. 不同路径 II

Leetcode 62.不同路径 题目链接&#xff1a;62 不同路径 题干&#xff1a;一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “…...

提高代码质量的 10 条编码原则

提高代码质量的 10 条编码原则 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 今天来聊聊提高代码质量的 10 条编码原则。 软件开发需要良好的系统设计和编码标准。我们在下图中列出了 10 条良好的编码原则。 01 遵循代码规范 我们…...

SHERlocked93 的 2017 年终总结

回家的路上有点无聊&#xff0c;简短回顾一下2017年的得失收获 开始两个月3月到5月用C#完结了一个烂尾的wpf小项目&#xff0c;对自己前半年的.net生涯也算是一个句号&#xff08;虽然不知道最后有没有采用&#xff09;&#xff0c;后面由于项目组转变技术栈&#xff0c;选择了…...

【FreeRTOS基础入门】任务通知

文章目录 前言一、任务通知介绍1.1 任务通知怎么通信1.2 任务通知与其他通信方式的区别1.3 优势及限制任务通知的优势任务通知的限制 1.4 内部原理 二、任务通知的使用2.1 发出与接收通知简化版2.1 发出与接收通知专业版 总结 前言 FreeRTOS 提供了丰富而灵活的任务通知机制&a…...

python opencv比较图片相似度

目录 一:均值哈希算法 二:三直方图算法 三:单通道直方图 一:均值哈希算法 均值哈希算法是一种快速比较图像相似度的方法。它首先将图像转化为灰度图像,然后计算图像的均值,接着将每个像素的...

校园兼职|大学生校园兼职小程序|基于微信小程序的大学生校园兼职系统设计与实现(源码+数据库+文档)

大学生校园兼职小程序目录 目录 基于微信小程序的大学生校园兼职系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户​微信端功能模块​ 2、管理员服务端功能模块 &#xff08;1&#xff09; 兼职管理 &#xff08;2&#xff09;论坛管理 &#xff08;3&…...

linux系统离线安装docker服务教程

1、下载、上传docker-20.10.0.tgz压缩包至服务器&#xff0c;其中&#xff0c;docker下载地址https://download.docker.com/linux/static/stable/x86_64/ 2、新建安装docker脚本docker-install.sh #!/usr/bin/env bash tar -xvf docker-20.10.0.tgzcp docker/* /usr/bin/cat …...

【青龙】快速搭建青龙面板,部署属于你自己的应用!

青龙面板是一个支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台。 废话不多说&#xff0c;直接开始。 这里使用一台 雨云 的云服务器作为演示。雨云注册地址&#xff1a;https://www.rainyun.com/ 优惠码&#xff1a;lz932 使用优惠码注册后绑定微信可获得8折…...

shell脚本实现Mysql分库分表备份

一.数据库的分库分表&#xff1f; 12张图把分库分表讲的明明白白&#xff01;阿里面试&#xff1a;我们为什么要分库分表https://mp.weixin.qq.com/s?__bizMzU0OTE4MzYzMw&mid2247547792&idx2&sn91a10823ceab0cb9db26e22783343deb&chksmfbb1b26eccc63b784879…...

【算法 - 动态规划】从零开始学动态规划!(总纲)

动态规划 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是一种优化问题求解方法&#xff0c;通常用于解决具有 重叠子问题 和 最优子结构 性质的问题。它的基本思想是将原问题分解成更小的子问题&#xff0c;通过求解和保存这些子问题的解&#xff0c;避…...

从 Elasticsearch 到 Apache Doris,统一日志检索与报表分析,360 企业安全浏览器的数据架构升级实践

导读&#xff1a;随着 360 企业安全浏览器用户规模的不断扩张&#xff0c;浏览器短时间内会产生大量的日志数据。为了提供更好的日志数据服务&#xff0c;360 企业安全浏览器设计了统一运维管理平台&#xff0c;并引入 Apache Doris 替代了 Elasticsearch&#xff0c;实现日志检…...

【力扣 - 二叉树的直径】

题目描述 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 提示&#xff1a; 树中节点数目在范围 [1, 10000] 内…...

大数据,对于生活的改变

谷歌通过对于疾病的查询量可以预测一个个h1n1病毒的大爆发&#xff0c; 大数据时代对于人的考验 用户的搜索记录就是一种信息&#xff0c;这种信息会满足其基础相关的词条与其有关的词条&#xff08;最为原始的搜索机制&#xff0c;国内的搜索引擎都是采用这种基础原理。&…...

py2neo和neo4j

py2neo 和 neo4j 是两个 Python 中与 Neo4j 图数据库交互的库&#xff0c;但它们有不同的设计和使用方式。 py2neo: 类型: py2neo 是一个面向对象的库&#xff0c;提供了一个对象模型&#xff0c;使得与 Neo4j 数据库的交互更加 Pythonic。API 风格: 使用 Node 和 Relationship…...

解决windows无法访问wsl下docker服务

笔者在初学使用wsl跑docker时,遇到了windows无法访问的问题,并且浏览了大部分的文章,发现并没有起效,在反复试错终于成功之后,总结为以下几点: 1.升级至wsl2 2.将.wslconfig文件(用户文件夹下)中的如下镜像服务关闭删除 networkingModemirrored 3.打开wsl防火墙相应的端口 …...

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(二)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型&#xff0c;由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”&#xff08;そら sora&#xff09;&#xff0c;即天空之意&#xff0c;以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…...

Python第十九章(模块)

系统的模块库一般处于外部库中的Lib里面 一。导入模块的方式&#xff1a; 1.方式一&#xff1a; 导入&#xff1a;import 模块名1&#xff0c;模块名2 调用&#xff1a;模块名 . 功能名() 2.方式二&#xff1a; 导入&#xff1a;from 模块名 import 功能1&#xff0c;功能…...

【Linux网络编程五】Tcp套接字编程(四个版本服务器编写)

【Linux网络编程五】Tcp套接字编程(四个版本服务器编写&#xff09; [Tcp套接字编程]一.服务器端进程&#xff1a;1.创建套接字2.绑定网络信息3.设置监听状态4.获取新连接5.根据新连接进行通信 二.客户端进程&#xff1a;1.创建套接字2.连接服务器套接字3.连接成功后进行通信 三…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

Linux操作系统共享Windows操作系统的文件

目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项&#xff0c;设置文件夹共享为总是启用&#xff0c;点击添加&#xff0c;可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download&#xff08;这是我共享的文件夹&#xff09;&…...