所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

PHP通过表单与URL传递值超详细示例代码|新手一看就会的实操教程

PHP通过表单与URL传递值超详细示例代码|新手一看就会的实操教程 一

文章目录CloseOpen

本文专门针对新手痛点,用超详细的示例代码拆解这两种最常用的传值方式:从表单的GET/POST方法区别,到form标签的正确写法、$_POST变量的取值技巧;从URL带参数的格式(比如?id=1),到$_GET变量的使用场景,每一步都附可直接运行的代码,连“如何打印传递后的结果”都讲得清清楚楚。不用死记硬背概念,跟着示例敲一遍,就能快速掌握PHP传值的底层逻辑,解决开发中80%的基础数据传递问题。最后还加了新手必看的安全小提示(比如过滤特殊字符),避免踩坑。不管你是做简单的登录功能,还是列表页跳详情页,这篇“一看就会”的实操教程,都能帮你快速搞定传值难题。

你有没有过这样的情况?写了个登录表单,点提交后后台啥数据都没拿到,急得直挠头?或者做文章列表页,点“查看详情”后,页面一片空白——明明URL里带了id,后台却死活取不出来?我去年第一次做客户的会员系统时,就犯过超低级的错:form标签里没写method属性,默认用了GET,结果密码直接暴露在URL里,被客户骂得狗血淋头;还有一次做商品详情页,把URL里的?id=写成了&i=,导致所有链接都打不开,排查了半小时才发现是拼写错了。

这些坑我踩过,所以今天把我 的“笨办法”告诉你——不用记复杂概念,跟着做就能搞定PHP传值这件事,亲测有效。

表单传值:我用3步搞定,再也没丢过数据

先讲表单传值——这是PHP里最常用的传值方式,登录、注册、提交评论都得用它。我 了三个“必做项”,做对了数据肯定丢不了。

第一步:form标签的“三个必写项”

你写表单时,一定要给

actionmethod,还要给每个输入框加name——我当初就是漏加name,导致后台拿不到数据。比如做登录表单,form标签得这么写:


  • action:指向处理数据的PHP文件(比如handle_login.php),告诉浏览器“数据要发给谁”;
  • method:选POST(敏感信息一定要用POST,不然数据会暴露在URL里);
  • name:每个输入框的“身份证”,后台靠这个名字取数据——没有name的话,就算你填了内容,后台也不知道这是谁的数据。我之前做注册表单时漏加name,结果$_POST是空的,查了半小时才反应过来。
  • 第二步:后台用$_POST拿数据,先“验证”再使用

    处理数据的PHP文件(比如handle_login.php)里,直接用$_POST[‘用户名’]就能拿到数据:

    <?php 

    // 拿用户名和密码

    $username = $_POST['username'];

    $password = $_POST['password'];

    // 先验证数据有没有传过来(我每次都这么做,避免报错)

    if (empty($username) || empty($password)) {

    echo "请填写完整信息!";

    exit;

    }

    // 然后做验证,比如查数据库有没有这个用户

    // ...

    ?>

    要是你不确定数据有没有传过来,就加一行var_dump($_POST)——直接打印所有传过来的数据,我每次写新表单都会先这么试,确保数据没丢。

    第三步:搞懂GET和POST的区别,不用死记硬背

    我之前也分不清这俩,后来问了公司的老程序员,他说“看场景选就行”:

  • 要是提交敏感信息(比如密码、身份证号),用POST——数据在请求体里,不会显示在URL里,安全点;
  • 要是做搜索、分页、分享链接,用GET——比如搜索“PHP教程”,URL是search.php?keyword=PHP教程,用户可以把链接发给朋友,直接看到搜索结果。
  • 我把两者的区别做成了表格,你一看就懂:

    对比项 GET请求 POST请求
    数据位置 URL地址栏 HTTP请求体
    数据大小 一般≤2KB(浏览器限制) 无明确限制(看服务器配置)
    安全性 低(数据暴露) 较高(数据隐藏)
    适用场景 搜索、分页、分享链接 登录、注册、提交敏感信息

    URL传值:我用“笨办法”,再也没丢过参数

    再讲URL传值——比如你做文章列表页,点“查看详情”要带文章ID;或者做分页,点“下一页”要带当前页码,这些都要用URL传值。我之前做这些功能时,总犯低级错误,后来 了几个“笨办法”,再也没出过错。

    笨办法1:记牢URL传值的“格式规范”

    URL传值的格式就一句话:URL?参数名=值&参数名=值——比如:

  • 文章详情页:detail.php?id=1(单参数,id是文章ID);
  • 分页列表页:list.php?page=2&category=php(多参数,page是当前页,category是分类)。
  • 我之前做商品详情页时,把?写成了&,结果URL变成detail.php&id=1,后台拿不到id,排查了半小时才发现——你写的时候,一定要先确认“?”的位置对不对。

    笨办法2:后台取参数用$_GET,一定要“安全过滤”

    后台拿URL参数用$_GET,比如detail.php里拿文章ID:

    <?php 

    // 拿文章ID,先用intval()转成整数(安全第一!)

    $id = intval($_GET['id']);

    // 验证id是不是有效(比如不能是0或负数)

    if ($id <= 0) {

    echo "无效的文章ID!";

    exit;

    }

    // 用id查数据库

    $sql = "SELECT * FROM articles WHERE id = $id";

    // ...

    ?>

    为什么要用intval()?我之前帮朋友的博客改代码时,他直接用$id = $_GET['id']拼SQL,结果被人注入了——有人传?id=1 OR 1=1,导致数据库里的所有文章都被查出来,甚至被删除。intval()能把id转成整数,就算有恶意参数,也会被“净化”成合法数字。

    笨办法3:中文参数要“编码解码”,避免乱码

    要是URL里有中文(比如搜索“PHP教程”),直接传会乱码——你得先用urlencode()编码,后台用urldecode()解码:

    // 生成URL时编码(比如在搜索页)
    

    $keyword = "PHP教程";

    $encoded_keyword = urlencode($keyword);

    $url = "search.php?keyword=$encoded_keyword"; // 结果是search.php?keyword=PHP%E6%95%99%E7%A8%8B

    // 后台解码(search.php里)

    $keyword = urldecode($_GET['keyword']); // 解码后是“PHP教程”

    我之前做搜索功能时没编码,结果用户搜“PHP教程”,后台拿到的是乱码,根本搜不到东西——你看,这么小的细节,不注意就会出问题。

    你要是按我讲的这些方法试了,不管成功还是遇到问题,都可以在评论区告诉我——我当初学的时候,也是摸爬滚打过来的,能帮你少走点弯路,我就开心啦!


    我之前帮朋友改他的博客代码,真的踩过过滤数据的大坑——他做评论功能的时候,直接把用户输入的内容往数据库里插,结果有天早上打开博客,首页全是弹窗广告,点一下还跳钓鱼网站。我翻代码才发现,他根本没过滤评论内容,有人传了带标签的内容,浏览器把这标签当成代码执行了,这就是常说的“XSS攻击”。还有更险的一次,他的文章详情页用URL传id,直接拼进SQL里,有人传了个?id=1 OR 1=1,结果数据库里所有文章都被查出来,差点被删光——这叫“SQL注入”,就是坏人用恶意参数钻空子。你看,过滤数据真不是“多此一举”,就是防这些乱七八糟的破坏,不然辛辛苦苦做的网站,可能一下子就废了。

    其实过滤没那么复杂,我平时就用两个“笨办法”,不用记复杂的函数。要是传的是数字参数(比如文章id、分页的页码),直接用intval()转成整数就行——比如$id = intval($_GET[‘id’]),不管你传过来的是1,还是1 OR 1=1,甚至是乱七八糟的字符,intval()都会把它变成纯数字,恶意内容直接被“砍”掉。要是字符串参数(比如用户名、评论、标题),就用htmlspecialchars()转一下——比如$username = htmlspecialchars($_POST[‘username’]),它会把、”这些容易搞事的特殊字符,变成安全的“实体字符”,比如<会变成<,这样就算有人传标签,浏览器也不会当成代码跑,只会显示成普通的文本。我朋友后来按这两步改了代码,再也没出过大问题——虽然每次写的时候多敲几行,但总比网站被黑、数据丢了强,对吧?


    表单提交后后台拿不到数据,常见原因有哪些?

    最常见的3个原因:① 输入框没加name属性(后台靠name识别数据,没name等于“没给数据贴标签”,根本找不到);② form标签漏写method(默认是GET,要是后台用$_POST取就会空);③ action路径写错(比如把handle_login.php写成handle_login.pnp,数据发错了地方)。我之前漏加name属性,后台$_POST是空的——你写完表单一定要检查这3点。

    URL里带了参数,后台用$_GET拿不到怎么办?

    先查3个简单问题:① URL格式对不对(是不是“?参数名=值”,比如?id=1而不是&i=1——?是第一个参数的开头,&是后续参数的分隔符);② 参数名有没有拼写错(比如后台写$_GET['id'],URL里却写成?lid=1);③ 中文参数有没有编码(直接传中文会乱码,要用urlencode()把中文转成%开头的编码,后台用urldecode()解回来)。我之前把?id=写成&i=,导致所有链接都打不开——拼写错是最容易忽略的低级错。

    PHP传值时为什么要过滤数据?怎么简单过滤?

    过滤是为了防“坏人搞破坏”:比如有人传?id=1 OR 1=1,如果直接拼SQL,会把数据库里所有数据查出来(这叫SQL注入);或者传带标签的内容,会在页面弹出广告(这叫XSS攻击)。简单过滤方法:① 数字参数用intval()转整数(比如$id = intval($_GET['id']),把非数字的字符去掉);② 字符串参数用htmlspecialchars()转义(比如$username = htmlspecialchars($_POST['username']),把这些特殊字符变成安全的实体字符)。我帮朋友改博客时,他没过滤,结果被注入了——过滤虽然麻烦,但能避免大问题。

    什么时候用GET,什么时候用POST?有没有简单的判断方法?

    用一句大白话区分:① 能“分享给别人看”的用GET(比如搜索“PHP教程”,URL是search.php?keyword=PHP教程,可以发给朋友直接看结果);② 不能“公开”的用POST(比如登录密码,要是用GET会把密码暴露在URL里,别人一眼就看到)。再记个场景:登录、注册、提交评论用POST;搜索、分页、分享链接用GET——实在分不清,就想“这个URL能复制给朋友吗?能就用GET,不能就用POST”。

    原文链接:https://www.mayiym.com/47406.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码