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

news/发布时间2024/5/15 15:16:59

目录

  • 一、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注入,给你的网站带来危险或者损失!

原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/MHdy/716.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

ZISUOJ 2022年算法基础公选课练习四(Map)

说明&#xff1a; 博主为了提早预习数据结构和C的一些知识&#xff0c;自己琢磨外加查阅资料所写的代码&#xff0c;题目来源于22年初的学院老师组织的算法基础公选课的练习。我的代码甚至思路肯定存在许多不足和错误&#xff0c;欢迎大家批评指正。 题目列表&#xff1a; 问题…

猫多喝水好吗?最有效解决猫不喝水的办法

猫多喝水好吗&#xff1f;充足的水分摄入对猫咪的健康非常重要&#xff0c;有助于维持其体液平衡&#xff0c;促进消化&#xff0c;降低便秘的风险&#xff0c;并保护泌尿系统的健康。猫多喝水好吗&#xff1f;建议每公斤体重的猫每天摄入60-80毫升的水&#xff0c;除了与体重相…

Windows系统cmd常用指令大全

文章目录 前言一、怎么打开cmd&#xff08;命令提示符&#xff09;&#xff1f;1.键盘法&#xff1a;快捷键Win R2.鼠标法 二、如何使用cmd指令&#xff1f;1.关机、重启、休眠、注销指令2.查看本机IP3.复制、移动、删除文件&#xff08;1&#xff09;复制文件&#xff08;2&a…

后端开发怎么学?

后端开发怎么学&#xff1f; 后端开发可以简单地理解为与前端开发相对应的开发方向。前端开发主要负责构建用户界面、维护用户体验等方面的工作&#xff0c;而后端开发则主要负责处理数据、逻辑和算法等方面的工作。后端开发旨在为前端应用程序提供支持&#xff0c;以帮助实现可…

【HarmonyOS】【DevEco ohpm ERROR: NOTFOUND package “@ohos/hypium“如何解决

参考 &#xff1a;&#xff08;无效&#xff09; 华为开发者论坛 DevEco创建项目时的错误解决_6 月 优质更文活动_路北路陈_InfoQ写作社区 解决&#xff1a; HormonyOS-DevEco Studio新建空项目ERROR解决_oh_modules\ohos\hypium-CSDN博客 将 .ohpm文件夹中的hypium文件夹复…

Vue+SpringBoot打造生活废品回收系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案&#xff0c;旨在鼓…

vue框架-vue-cli

vue-cli Vue CLI是一个官方的脚手架工具,用于快速搭建基于Vue.js的项目。Vue CLI提供了一整套可配置的脚手架,可以帮助开发人员快速构建现代化的Web应用程序。 Vue CLI通过提供预先配置好的Webpack模板和插件,使得开发人员可以在不需要手动编写Webpack配置的情况下快速创建…

佳能2580的下载手册

凡是和电子产品有关的产品其内部都开始不断地进行内卷&#xff0c;在不断地内卷背后&#xff0c;意味着科技更新和换代&#xff0c;自己也入手了一台佳能2580的打印机&#xff0c;一台相对比较老式的打印机&#xff0c;以此不断地自己想要进行打印的需要。 下载的基础步骤&…

JVM-JVM中对象的生命周期

申明&#xff1a;文章内容是本人学习极客时间课程所写&#xff0c;文字和图片基本来源于课程资料&#xff0c;在某些地方会插入一点自己的理解&#xff0c;未用于商业用途&#xff0c;侵删。 原资料地址&#xff1a;课程资料 对象的创建 常量池检查:检查new指令是否能在常量池…

数据结构:动态内存分配+内存分区+宏+结构体

一、作业 1.定义一个学生结构体&#xff0c;包含结构体成员&#xff1a;身高&#xff0c;姓名&#xff0c;成绩&#xff1b;定义一个结构体数组有7个成员&#xff0c;要求终端输入结构体成员的值&#xff0c;根据学生成绩&#xff0c;进行冒泡排序。 #include <stdio.h>…

面试redis篇-01开篇

使用场景 Redis的数据持久化策略有哪些什么是缓存穿透&#xff0c;怎么解决什么是布隆过滤器什么是缓存击穿&#xff0c;怎么解决什么是缓存雪崩&#xff0c;怎么解决redis双写问题Redis分布式锁如何实现Redis实现分布式锁如何合理的控制锁的有效时长Redis的数据过期策略有哪些…

centos安装mongodb

1&#xff0c;下载mongodb&#xff0c;百度网盘分享 链接: https://pan.baidu.com/s/1jwwcKD4GppeAXOOJ8xlV4A 密码: dgfi 也可以去官网下载 官网&#xff1a;www.mongodb.com 2&#xff0c;安装 在主目录下创建mongodb文件夹&#xff0c;将刚才下载的压缩包放进去并解压&…

TLS、运输层安全协议

目录 运输层安全协议 1 协议 TLS 的要点 1.1 协议 TLS 的位置 1.2 TLS 与应用层协议独立无关 1.3 协议 TLS 具有双向鉴别的功能 1.4 TLS 建立安全会话的工作原理 TLS 的握手阶段 TLS 的会话阶段 1.5 TLS 传送的记录格式 2 协议 TLS 必须包含的措施 运输层安全协议 现…

基于JAVA+Springboot+Thymeleaf前后端分离项目:学校校园自习室教室座位预约系统设计与实现

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

云计算基础-存储虚拟化(深信服aSAN分布式存储)

什么是存储虚拟化 分布式存储是利用虚拟化技术 “池化”集群存储卷内通用X86服务器中的本地硬盘&#xff0c;实现服务器存储资源的统一整合、管理及调度&#xff0c;最终向上层提供NFS、ISCSI存储接口&#xff0c;供虚拟机根据自身的存储需求自由分配使用资源池中的存储空间。…

KUKA库卡机器人编程语言是什么?

KUKA库卡机器人的编程语言主要是KUKA Robot Language&#xff08;简称KRL&#xff09;。KRL是库卡机器人专门为其机器人系统设计的编程语言&#xff0c;用于编写和控制KUKA工业机器人的运动和操作。KRL结合了指令式编程和结构化编程的特点&#xff0c;具有一定的易学性和灵活性…

探索Linux系统中HTTP隧道技术的原理与实践

在Linux的世界里&#xff0c;HTTP隧道技术就像是一个神秘的魔法师&#xff0c;它能让你的网络请求穿越重重障碍&#xff0c;安全地到达目的地。今天&#xff0c;我们就来一起探索这个魔法师的奥秘&#xff0c;看看它是如何在Linux系统中施展魔法的。 首先&#xff0c;我们要明…

OpenHarmony—UIAbility组件生命周期

概述 当用户打开、切换和返回到对应应用时&#xff0c;应用中的UIAbility实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调&#xff0c;通过这些回调可以知道当前UIAbility实例的某个状态发生改变&#xff0c;会经过UIAbility实例的创建和销毁&#xff0c;…

DS:八大排序之直接插入排序、希尔排序和选择排序

创作不易&#xff0c;感谢三连支持&#xff01;&#xff01; 一、排序的概念及运用 1.1 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起 来的操作。稳定性&…

【数据结构】栈

1.栈的介绍 栈&#xff08;也叫堆栈&#xff0c;Stack&#xff09;是一种特殊的线性表&#xff0c;它只能在在表尾进行插入和删除操作&#xff0c;就像下面这样&#xff1a; 也就是说&#xff0c;我们只能在一端进行插入和删除&#xff0c;当我们依次插入1、2、3、4这四个元素…
推荐文章