石材陈兆贤 發表於 2019-6-2 15:01:00

php中的form表单

<h1>表单处理</h1>
<p>  表单的概念在生活中很常见,就像是问卷调查表一样,别人先把问卷发给你,你照着问卷的要求填写,完事过后再将填完的问卷发给别人,从而达到一个将别人需要的信息传递给别人的一种方式。<br>  传统的网页大多数的作用都是展示数据,就是将信息传递给用户。而在现代化的 Web 开发中,非常注重信息交互,所以表单也随处可见,只是形式上变成网页,性质上还是一模一样的。主要的作用任然是 收集指定的用户信息。</p>
<h2>1.表单的基本使用</h2>
<p>HTML 中有一个专门用于提交数据的标签: &lt;form&gt; ,通过这个标签可以很容易的收集用户输入.</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">form 标签有两个必要属性:
  action:表单提交地址(填完了,交给谁)
  method:表单以什么方式提交</span></pre>
</div>
<p>例如,我们需要在登录界面上收集用户输入的用户名和密码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;!</span><span style="color: rgba(255, 0, 255, 1)">DOCTYPE&nbsp;html</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">html&nbsp;</span><span style="color: rgba(255, 0, 0, 1)">lang</span><span style="color: rgba(0, 0, 255, 1)">="en"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">head</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">meta&nbsp;</span><span style="color: rgba(255, 0, 0, 1)">charset</span><span style="color: rgba(0, 0, 255, 1)">="UTF‐8"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>登录<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">head</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">body</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">form&nbsp;</span><span style="color: rgba(255, 0, 0, 1)">action</span><span style="color: rgba(0, 0, 255, 1)">="login.php"</span><span style="color: rgba(255, 0, 0, 1)">&nbsp;method</span><span style="color: rgba(0, 0, 255, 1)">="post"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">label&nbsp;</span><span style="color: rgba(255, 0, 0, 1)">for</span><span style="color: rgba(0, 0, 255, 1)">="username"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>用户名<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">label</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">input&nbsp;</span><span style="color: rgba(255, 0, 0, 1)">type</span><span style="color: rgba(0, 0, 255, 1)">="text"</span><span style="color: rgba(255, 0, 0, 1)">&nbsp;id</span><span style="color: rgba(0, 0, 255, 1)">="username"</span><span style="color: rgba(255, 0, 0, 1)">&nbsp;name</span><span style="color: rgba(0, 0, 255, 1)">="username"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">label&nbsp;</span><span style="color: rgba(255, 0, 0, 1)">for</span><span style="color: rgba(0, 0, 255, 1)">="password"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>密码<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">label</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">input&nbsp;</span><span style="color: rgba(255, 0, 0, 1)">type</span><span style="color: rgba(0, 0, 255, 1)">="password"</span><span style="color: rgba(255, 0, 0, 1)">&nbsp;id</span><span style="color: rgba(0, 0, 255, 1)">="password"</span><span style="color: rgba(255, 0, 0, 1)">&nbsp;name</span><span style="color: rgba(0, 0, 255, 1)">="password"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">button&nbsp;</span><span style="color: rgba(255, 0, 0, 1)">type</span><span style="color: rgba(0, 0, 255, 1)">="submit"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>登录<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span><span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">form</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">body</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">html</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>按照目前的情况,用户第一次请求得到这个表单页面,填写完表单内容,点击登录,表单会自动发送到login.php ,剩下的问题就是要考虑如何在 login.php 中获取到用户提交过来的内容.</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">PHP 中有三个超全局变量专门用来获取表单提交内容:
    $_GET :用于获取以 GET 方式提交的内容
    $_POST :用于获取以 POST 方式提交的内容
    $_REQUEST :用于获取 GET 或 POST 方式提交的内容</span></pre>
</div>
<p>借助&nbsp; $_POST 或者&nbsp; $_REQUEST 就可以获取到表单提交的内容:</p>
<div class="cnblogs_code">
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">&nbsp;获取表单提交的用户名和密码</span>
<span style="color: rgba(0, 0, 255, 1)">echo</span>&nbsp;'用户名:'&nbsp;.&nbsp;<span style="color: rgba(128, 0, 128, 1)">$_REQUEST</span>['username'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">echo</span>&nbsp;'密码:'&nbsp;.&nbsp;<span style="color: rgba(128, 0, 128, 1)">$_REQUEST</span>['password'];</pre>
</div>
<h3>1.1.&nbsp; 提交地址</h3>
<p>  action 提交地址指的是这个表单填写完成过后点击提交,发送请求的请求地址是什么。<br>  从便于维护的角度考虑,一般我们最常见的都是提交给当前文件,然后在当前文件中判断是否是表单提交请求:</p>
<div class="cnblogs_code">
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(0, 0, 255, 1)">if</span>&nbsp;(<span style="color: rgba(128, 0, 128, 1)">$_SERVER</span>['REQUEST_METHOD']&nbsp;===&nbsp;'POST'<span style="color: rgba(0, 0, 0, 1)">)&nbsp;{
&nbsp;&nbsp;</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">&nbsp;表单提交请求</span>
}</pre>
</div>
<p>另外,建议使用 $_SERVER['PHP_SELF'] 动态获取当前页面访问路径,这样就不用因为文件重命名或者网站目录结构调整而修改代码了:</p>
<div class="cnblogs_code">
<pre>&lt;!‐‐&nbsp;这样写死&nbsp;action&nbsp;地址,当文件重命名就需要修改代码&nbsp;‐‐&gt;
&lt;form&nbsp;action="/foo/login.php"&gt;<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span>&lt;!‐‐&nbsp;...&nbsp;‐‐&gt;
&lt;/form&gt;
&lt;!‐‐&nbsp;通过&nbsp;`<span style="color: rgba(128, 0, 128, 1)">$_SERVER</span>['PHP_SELF']`&nbsp;获取路径,可以轻松避免这个问题&nbsp;‐‐&gt;
&lt;form&nbsp;action="&lt;?php&nbsp;echo&nbsp;<span style="color: rgba(128, 0, 128, 1)">$_SERVER</span>['PHP_SELF'];&nbsp;?&gt;"&gt;<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span>&lt;!‐‐&nbsp;...&nbsp;‐‐&gt;
&lt;/form&gt;</pre>
</div>
<h3>1.2.&nbsp; 提交方式</h3>
<p>method 可以用于设置表单提交的方式,目前我们所认识的就是最常见两种表单提交方式: GET 和 POST 。<br>  从效果上来看,两者都可以将数据提交到服务端,但是从实现提交的原理上两者有很大的不同:<br>GET<br>  表单数据是通过 URL 中的 ? 参数传递到服务端的<br>  可以在地址栏中看到提交的内容<br>  数据长度有限制,因为 URL 地址长度有限(2000个字符)<br>POST<br>  表单数据是通过请求体传递到服务端的,我们在界面上看不到<br>  可以提交任何类型的数据,包括文件<br>  由于界面上看不见,浏览器也不储存,所以更安全<br>  至于什么情况下应该选用哪种方式,这个需要结合业务场景和这两种方式各自的特点来决定,没有绝对的答案,只能给出一些原则:<br>  绝不能使用 GET 来发送密码或其他敏感信息!!!<br>  应该想清楚这次请求到底主要是去拿东西,还是去送东西</p>
<h2>2.&nbsp; 常见表单元素处理</h2>
<p>至于表单元素中的文本框文本域一类的元素,都是直接将元素的 name 属性值作为键,用户填写的信息作为值,发送到服务端。但是表单元素中还有一些比较特殊的表单元素需要单独考虑:</p>
<h3>2.1.&nbsp; 单选按钮</h3>
<div class="cnblogs_code">
<pre>&lt;!‐‐&nbsp;最终只会提交选中的那一项的&nbsp;value&nbsp;‐‐&gt;
&lt;input&nbsp;type="radio"&nbsp;name="gender"&nbsp;value="male"&gt;
&lt;input&nbsp;type="radio"&nbsp;name="gender"&nbsp;value="female"&gt;</pre>
</div>
<h3>2.2.&nbsp; 复选按钮</h3>
<div class="cnblogs_code">
<pre>&lt;!‐‐&nbsp;没有设置&nbsp;value&nbsp;的&nbsp;checkbox&nbsp;选中提交的&nbsp;value&nbsp;是&nbsp;on&nbsp;‐‐&gt;
&lt;input&nbsp;type="checkbox"&nbsp;name="agree"&gt;
&lt;!‐‐&nbsp;设置了&nbsp;value&nbsp;的&nbsp;checkbox&nbsp;选中提交的是&nbsp;value&nbsp;值&nbsp;‐‐&gt;
&lt;input&nbsp;type="checkbox"&nbsp;name="agree"&nbsp;value="true"&gt;</pre>
</div>
<p>如果需要同时提交多个选中项,可以在&nbsp; name 属性后面 跟上&nbsp; [] :</p>
<p>https://php.net/manual/zh/faq.html.php#faq.html.arrays</p>
<div class="cnblogs_code">
<pre>&lt;input&nbsp;type="checkbox"&nbsp;name="funs[]"&nbsp;id=""&nbsp;value="football"&gt;
&lt;input&nbsp;type="checkbox"&nbsp;name="funs[]"&nbsp;id=""&nbsp;value="basketball"&gt;
&lt;input&nbsp;type="checkbox"&nbsp;name="funs[]"&nbsp;id=""&nbsp;value="world&nbsp;peace"&gt;</pre>
</div>
<p>最终提交到服务端,通过&nbsp; $_POST 接收到的是一个索引数组.</p>
<h3>2.3.&nbsp; 选择框</h3>
<div class="cnblogs_code">
<pre>&lt;select&nbsp;name="subject"&gt;<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span>&lt;!‐‐&nbsp;设置&nbsp;value&nbsp;提交&nbsp;value&nbsp;‐‐&gt;<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span>&lt;option&nbsp;value="1"&gt;语文&lt;/option&gt;<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span>&lt;!‐‐&nbsp;没有设置&nbsp;value&nbsp;提交&nbsp;innerText&nbsp;‐‐&gt;<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span>&lt;option&gt;数学&lt;/option&gt;
&lt;/select&gt;</pre>
</div>
<h3>2.3.&nbsp; 文件上传</h3>
<p>type 属性为 file 的 input 元素可以通过表单提交文件(上传文件),服务端 PHP 可以通过 $_FILES 获取上传的文件信息。</p>
<div class="cnblogs_code">
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">&nbsp;如果选择了文件&nbsp;$_FILES['file']['error']&nbsp;=&gt;&nbsp;0
//&nbsp;详细的错误码说明:http://php.net/manual/zh/features.file‐upload.errors.php</span>
<span style="color: rgba(0, 0, 255, 1)">if</span>&nbsp;(<span style="color: rgba(128, 0, 128, 1)">$_FILES</span>['file']['error']&nbsp;===&nbsp;0<span style="color: rgba(0, 0, 0, 1)">)&nbsp;{
&nbsp;&nbsp;</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">&nbsp;PHP&nbsp;在会自动接收客户端上传的文件到一个临时的目录</span>
&nbsp;&nbsp;<span style="color: rgba(128, 0, 128, 1)">$temp_file</span>&nbsp;=&nbsp;<span style="color: rgba(128, 0, 128, 1)">$_FILES</span>['file']['tmp_name'<span style="color: rgba(0, 0, 0, 1)">];
&nbsp;&nbsp;</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">&nbsp;我们只需要把文件保存到我们指定上传目录</span>
&nbsp;&nbsp;<span style="color: rgba(128, 0, 128, 1)">$target_file</span>&nbsp;=&nbsp;'../static/uploads/'&nbsp;.&nbsp;<span style="color: rgba(128, 0, 128, 1)">$_FILES</span>['file']['name'<span style="color: rgba(0, 0, 0, 1)">];
&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">if</span>&nbsp;(<span style="color: rgba(0, 128, 128, 1)">move_uploaded_file</span>(<span style="color: rgba(128, 0, 128, 1)">$temp_file</span>,&nbsp;<span style="color: rgba(128, 0, 128, 1)">$target_file</span><span style="color: rgba(0, 0, 0, 1)">))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(128, 0, 128, 1)">$image_file</span>&nbsp;=&nbsp;'/static/uploads/'&nbsp;.&nbsp;<span style="color: rgba(128, 0, 128, 1)">$_FILES</span>['file']['name'<span style="color: rgba(0, 0, 0, 1)">];
&nbsp;&nbsp;}
}</span></pre>
</div>
<p>$_FILES 同样也是一个关联数组,键为表单的&nbsp; name ,内容如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">array</span>(1<span style="color: rgba(0, 0, 0, 1)">)&nbsp;{
&nbsp;&nbsp;[</span>"avatar"]=&gt;<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">array</span>(5<span style="color: rgba(0, 0, 0, 1)">)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;[</span>"name"]=&gt;<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">string</span>(17)&nbsp;"demo.jpg"<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;[</span>"type"]=&gt;<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">string</span>(10)&nbsp;"image/jpeg"<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;[</span>"tmp_name"]=&gt;<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgba(0, 0, 255, 1)">string</span>(27)&nbsp;"C:\Windows\Temp\php786C.tmp"<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;[</span>"error"]=&gt;<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;int(</span>0<span style="color: rgba(0, 0, 0, 1)">)
&nbsp;&nbsp;&nbsp;&nbsp;[</span>"size"]=&gt;<span style="color: rgba(0, 0, 0, 1)">
&nbsp;&nbsp;&nbsp;&nbsp;int(</span>29501<span style="color: rgba(0, 0, 0, 1)">)
&nbsp;&nbsp;}
}</span></pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/wjw9/p/10962998.html
頁: [1]
查看完整版本: php中的form表单