HTML表单提交后PHP代码是如何被触发执行的?
简单表单交互示例
以下是一段可根据用户输入内容输出对应文本的表单+PHP处理示例代码:
<form method="post"> Colore: <input type="text" name="colore"></br> <input type="submit" name="submit" value="inserisci colore"> </form> <?php $colore_inserito = $_POST['colore']; switch ($colore_inserito) { case "rosso": echo "hai scelto il colore $colore_inserito"; break; case "verde": echo "hai scelto il colore $colore_inserito"; break; case "giallo": echo "hai scelto il colore $colore_inserito"; break; default: echo "non hai selezionato nessun colore rosso o verde o giallo"; } ?>
PHP代码触发执行的核心逻辑
别把PHP的运行逻辑和浏览器端执行的JavaScript搞混,两者的运行环境完全不同:
- PHP是服务端运行语言,所有写在
<?php ?>标签里的代码从来不会发送到用户浏览器,只会在部署了PHP运行环境的Web服务器上执行,执行完成后才会把生成的输出内容和静态HTML拼接成完整网页返回给浏览器。 - 这份代码写在同一个
.php文件里,不存在「点击提交按钮才单独激活某段PHP代码」的特殊机制,完整执行流程如下:- 用户第一次在浏览器输入地址访问这个文件时,服务器就已经把文件里的所有PHP代码从头到尾执行了一遍。这时候还没提交表单,请求里没有携带POST数据,
$_POST为空,代码会直接走switch的default分支输出默认提示,最终把表单HTML和PHP输出的内容拼接后返回给浏览器渲染。 - 用户填完内容点击提交按钮时,因为表单没有设置
action属性,浏览器会默认把填写的所有表单字段打包成POST请求体,向当前PHP文件的地址发起一次全新的HTTP请求,这个动作就是你看到的页面刷新。 - 服务器收到这次带表单数据的新请求后,会先自动把请求里的表单字段解析出来,预存到超全局变量
$_POST里,再从头到尾执行一遍这个PHP文件的所有代码。这时候$_POST['colore']已经存了用户提交的内容,switch逻辑会匹配到对应分支输出对应文本,最后把新生成的完整HTML返回给浏览器,就完成了结果展示。
- 用户第一次在浏览器输入地址访问这个文件时,服务器就已经把文件里的所有PHP代码从头到尾执行了一遍。这时候还没提交表单,请求里没有携带POST数据,
- 本质上只要向这个PHP文件发起请求,不管是首次打开页面还是提交表单,服务器都会完整执行一次文件里的PHP代码,
$_POST只是服务器在执行代码前,提前填充好用户提交数据的内置变量而已,不是什么触发代码运行的开关。
注意:当前示例代码没有判断表单是否已提交,首次访问页面时会抛出
Undefined array key "colore"的警告,正式使用时需要先通过isset($_POST['submit'])判断请求类型,确认是表单提交请求后再读取$_POST里的参数。
内容的提问来源于stack exchange,提问作者AQ95
相关产品推荐
相关产品推荐

