上一节介绍怎么在mac电脑上启用PHP程序,并且演示了一个简单的例子,这个例子运行时,涉及了浏览器、apache以及PHP程序的交互,这三者的关系大概是这样的:

一般来说,浏览器(或者类似功能的程序)给apache(或者其它服务器)发送的数据称作“表单”,表单就相当一个“界面”,小程觉得从“界面”入手去理解交互的流程是一个可行的办法。

本文介绍如何提交一个表单,以及引发的相应交互。 那么,在浏览器上点击一个“按钮”,会引发什么样的交互行为呢?

(一)交互一,浏览器给apache发送数据

浏览器以表单的形式给apache发送数据。

表单的标签是:,比如下面一个html页面,留意里面标签的内容:

<html>
<meta charset="utf-8">
<body>
<form action="login.php" method="post">
昵称:<input type="text" name="name">
口号:<input type="text" name="slogan">
<input type="submit" value="提交">
</form>
</body>
</html>

html页面(相当于整体的界面),包括中的内容,由浏览器来解析。比如上面的这个html页面,解析后的样子是这样的:

可以看到,有两个文本输入框,还有一个提交按钮。

如果浏览器只做解析显示的工作,那就没有apache跟PHP程序什么事情了。实际上,浏览器经常要把数据发送给apache,而发送的数据就是标签(即表单)的数据。

表单数据,可以在标签中找到,其中可以包括按钮、下拉菜单、文本输入框等等元素。比如上面那个表单:

注意,上面的表单,还把PHP代码文件发给了apache,如果项目目录(默认是/Library/WebServer/Documents)下面没有这个php文件,那么在点击提交按钮后,会看到这样的提示:

那么,发送的时机是什么?即浏览器在什么时候发送表单数据给apache?

在点击“submit”类型的按钮的时候触发发送。如果没有submit按钮,则需要通过js主动触发表单的submit事件。

另外,在发送的method上,区分为get与post方式。

get方法,表单的所有信息都出现在请求的url中(在地址栏上可以看到),对于长度也有限制。比如,这样的get请求:

http://localhost/formtest.html?name=abc&slogan=hello+world

其中name与slogan是键(key),而abc与hello world是对应的值(value),表单的数据就是键值对的集合。

post方法,请求时不会显示表单的任何数据,对于长度限制也很弱。

(二)交互二,PHP代码访问表单的内容

表单中可以指定把项目目录中的php文件的内容(或者当前的脚本--比如既有表单又有php代码)提交给apache。apache在拿到php代码后,会交由PHP程序来处理,而这些php代码很可能需要访问表单的内容,比如login.php代码中,需要访问表单中的文本框的内容,那如何访问呢?

表单的内容(键值对的集合),会保存在$_GET变量(get方法时)或$_POST变量(post方法时)中,这个在apache调用PHP程序时就初始化好。

所以,PHP代码可以通过访问$_GET或$_POST变量来访问表单的内容。

比如,login.php的代码可以这样写:

<meta charset="utf-8">
你好,<?php echo $_GET["name"]; ?>! <br>
你的口号是:<?php echo $_GET["slogan"];?> !

再次提交这个表单时,在浏览器上可以看到这样的提示:

明显,还要区分是用$_GET还是$_POST是麻烦的,这时,可以使用$_REQUEST变量来访问,$_REQUEST对于get或post方式都适用。

应该留意到,PHP程序解析出结果后,把结果返回给apache,apache返回html页面给浏览器,最终浏览器显示结果。

总结一下,本文从一个简单表单请求的例子入手,介绍了表单的概念,以及请求过程中涉及到的两个重要的交互,并引出了_REQUEST等变量的使用。


前后端开发(2):浏览器与PHP程序的交互的更多相关文章

  1. ABP开发框架前后端开发系列---(3)框架的分层和文件组织

    在前面随笔<ABP开发框架前后端开发系列---(2)框架的初步介绍>中,我介绍了ABP应用框架的项目组织情况,以及项目中领域层各个类代码组织,以便基于数据库应用的简化处理.本篇随笔进一步对 ...

  2. ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用

    在前面几篇随笔介绍了我对ABP框架的改造,包括对ABP总体的介绍,以及对各个业务分层的简化,Web API 客户端封装层的设计,使得我们基于ABP框架的整体方案越来越清晰化, 也越来越接近实际的项目开 ...

  3. ABP开发框架前后端开发系列---(4)Web API调用类的封装和使用

    在前面随笔介绍ABP应用框架的项目组织情况,以及项目中领域层各个类代码组织,以及简化了ABP框架的各个层的内容,使得我们项目结构更加清晰.上篇随笔已经介绍了字典模块中应用服务层接口的实现情况,并且通过 ...

  4. ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

    在前面随笔介绍的<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>里面,介绍了如何改进和完善审计日志和登录日志的应用服务端和Winform客户端,由于篇幅限制,没有进 ...

  5. ABP开发框架前后端开发系列---(12)配置模块的管理

    一般来说,一个系统或多或少都会涉及到一些系统参数或者用户信息的配置,而ABP框架也提供了一套配置信息的管理模块,ABP框架的配置信息,必须提前定义好配置的各项内容,然后才能在系统中初始化或者通过接口查 ...

  6. ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架

    前面介绍了很多ABP系列的文章,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机构.用户.角色.权限.菜单等内 ...

  7. ABP开发框架前后端开发系列---(16)ABP框架升级最新版本的经验总结

    有一小段时间没有持续升级ABP框架了,最近就因应客户的需要,把ABP框架进行全面的更新,由于我们应用的ABP框架,基础部分还是会使用官方的内容,因此升级的时候需要把官方基础ABP的DLL进行全面的更新 ...

  8. .net core webapi 前后端开发分离后的配置和部署

    背景:现在越来越多的企业都采用了在开发上前后端分离,前后端开发上的分离有很多种,那么今天,我来分享一下项目中得的前后端分离. B/S  Saas 项目:(这个项目可以理解成个人中心,当然不止这么点功能 ...

  9. ABP开发框架前后端开发系列---(2)框架的初步介绍

    在前面随笔<ABP开发框架前后端开发系列---(1)框架的总体介绍>大概介绍了这个ABP框架的主要特点,以及介绍了我对这框架的Web API应用优先的一些看法,本篇继续探讨ABP框架的初步 ...

  10. ABP开发框架前后端开发系列---(10)Web API调用类的简化处理

    在较早期的随笔<ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用>已经介绍了Web API调用类的封装处理,虽然这些调用类我们可以使用代码生成工具快 ...

随机推荐

  1. 浅析JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 注意:垃圾回 ...

  2. 使用nfs映射远程服务器磁盘目录

    参考:http://www.centoscn.com/CentosSecurity/SoftSecurity/2015/0408/5118.html          http://www.cnblo ...

  3. 在VS2005中设置WPF中自定义按钮的事件

    原文:在VS2005中设置WPF中自定义按钮的事件 上篇讲了如何在Blend中绘制圆角矩形(http://blog.csdn.net/johnsuna/archive/2007/08/13/17407 ...

  4. WPF 3D编程介绍

    原文:WPF 3D编程介绍 上一篇文章简单的介绍了WPF编程的相关的内容,也推荐了本书.今天要来讲一下在WPF如何开展3D编程. 使用的xmal 和C#开发的时候:需要使用如下的关键要素: 1:摄像机 ...

  5. linux之tail -F命令异常file truncated

    使用tail -F收集日志时,经常报出file truncated, 导致日志又重新读取.tail: `test.out' has appeared;  following end of new fi ...

  6. php 二维数组相同值 相加

    array(3) { [0]=> array(2) { ["sourcesid"]=> int(1) ["addusernum"]=> str ...

  7. Activity跳转通过EventBus传值问题

    根据阿里发布的Android开发规范:下载地址:https://102.alibaba.com/downloadFile.do?file=1520478361732/Android_v9.pdf Ac ...

  8. Qt官方对OpenSSL的编译方法的描述,单独下载的Qt library则一般不带SSL(包括QT FAQ)

    https://wiki.qt.io/MSYS2http://wiki.qt.io/Compiling_OpenSSL_with_MinGWhttps://wiki.qt.io/MinGW-64-bi ...

  9. Windows10 1607 x64/x86 + Office 2016 Win/Mac + KMS激活/安装密钥汇总

    各位观众,这里汇总了一份最新微软系统和办公软件的资源清单,希望对你们有帮助. Windows10 1607 For x64 ed2k://|file|cn_windows_10_multiple_ed ...

  10. 【SQL Server】SQL Server占用CPU使用率100%的解决方法

    原文:[SQL Server]SQL Server占用CPU使用率100%的解决方法 近日,帮一个客户解决了服务器CPU占用率高达100%的问题. 以前做的一个某污水处理厂自控系统项目,客户反映其自控 ...