您现在的位置是:首页 > 技术教程 正文

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

admin 阅读: 2024-03-15
后台-插件-广告管理-内容页头部广告(手机)

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

一、POST传值

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

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

PHP

  1. $data = array(
  2. 'param1' => 'value1',
  3. 'param2' => 'value2'
  4. );
  5. $ch = curl_init();
  6. curl_setopt($ch, CURLOPT_URL, 'http://example.com');
  7. curl_setopt($ch, CURLOPT_POST, true);
  8. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  9. $response = curl_exec($ch);
  10. curl_close($ch);

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

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

PHP

  1. $data = array(
  2. 'param1' => 'value1',
  3. 'param2' => 'value2'
  4. );
  5. $options = array(
  6. 'http' => array(
  7. 'header' => 'Content-type: application/x-www-form-urlencoded',
  8. 'method' => 'POST',
  9. 'content' => http_build_query($data)
  10. )
  11. );
  12. $context = stream_context_create($options);
  13. $response = file_get_contents('http://example.com', false, $context);

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

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

PHP

  1. $data = array(
  2. 'param1' => 'value1',
  3. 'param2' => 'value2'
  4. );
  5. $context = stream_context_create(array(
  6. 'http' => array(
  7. 'method' => 'POST',
  8. 'header' => "Content-type: application/x-www-form-urlencoded\r\n",
  9. 'content' => http_build_query($data)
  10. )
  11. ));
  12. $fp = stream_socket_client('tcp://example.com:80', $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
  13. if ($fp) {
  14. $response = stream_get_contents($fp);
  15. fclose($fp);
  16. }

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

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

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

PHP

  1. <?php
  2. $posthtml = '
  3. DOCTYPE html>
  4. <html>
  5. <head>
  6. <title>提交POST数据
  7. head>
  8. <body>
  9. <h2>提交POST数据
  10. <form method="POST" action="post.php">
  11. <label for="name">姓名:label>
  12. <input type="text" name="name" id="name" required>
  13. <br><br>
  14. <label for="email">邮箱:label>
  15. <input type="email" name="email" id="email" required>
  16. <br><br>
  17. <input type="submit" value="提交">
  18. form>
  19. body>
  20. html>
  21. ';
  22. echo $posthtml;
  23. ?>

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

二、GET传值

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

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

PHP

  1. $params = array(
  2. 'param1' => 'value1',
  3. 'param2' => 'value2'
  4. );
  5. $query = http_build_query($params);
  6. $url = "http://example.com/?$query";
  7. 2. 使用parse_url()函数构建 URL 参数:
  8. $url_parts = parse_url("http://example.com/");
  9. $query_string = array();
  10. foreach ($_GET as $key => $value) {
  11. $query_string[] = "$key=$value";
  12. }
  13. $url .= "?" . implode("&", $query_string);

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

PHP

  1. $url = "http://example.com/?param1=value1¶m2=value2";
  2. 4. 使用 $_SERVER超全局变量:
  3. $server = $_SERVER['REQUEST_URI'];
  4. $query_string = "?param1=value1¶m2=value2";
  5. $url = "$server$query_string";

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

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

PHP

  1. <?php
  2. $gethtml = '
  3. DOCTYPE html>
  4. <html>
  5. <head>
  6. <title>GET请求示例
  7. head>
  8. <body>
  9. <h1>GET请求示例
  10. <form action="get.php" method="GET">
  11. <label for="name">姓名:label>
  12. <input type="text" name="name" id="name">
  13. <br><br>
  14. <label for="email">邮箱:label>
  15. <input type="email" name="email" id="email">
  16. <br><br>
  17. <input type="submit" value="提交">
  18. form>
  19. body>
  20. html>
  21. ';
  22. echo $gethtml;
  23. ?>

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

三、POST接收数据

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

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

PHP

$data = $_POST['data_name'];

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

2. 使用 file_get_contents('php://input'):

PHP

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

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

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

PHP

$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超级全局变量:

PHP

  1. $param1 = $_GET['param1'];
  2. $param2 = $_GET['param2'];

2. 使用parse_url()函数:

PHP

  1. $url = "http://example.com/?param1=value1¶m2=value2";
  2. $components = parse_url($url);
  3. if (isset($components['query'])) {
  4. $params = explode('&', $components['query']);
  5. foreach ($params as $param) {
  6. $keyValue = explode('=', $param);
  7. $paramKey = $keyValue[0];
  8. $paramValue = $keyValue[1];
  9. // 处理参数
  10. }
  11. }

3. 使用parse_str()函数:

PHP

  1. $url = "http://example.com/?param1=value1¶m2=value2";
  2. parse_str($url, $params);
  3. $param1 = $params['param1'];
  4. $param2 = $params['param2'];
  5. 4. 使用$_SERVER超级全局变量:
  6. $server = $_SERVER['QUERY_STRING'];
  7. $params = explode('&', $server);
  8. foreach ($params as $param) {
  9. $keyValue = explode('=', $param);
  10. $paramKey = $keyValue[0];
  11. $paramValue = $keyValue[1];
  12. // 处理参数
  13. }

五、总结

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

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索