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