重蔚php学习第二十八天——表单文件上传
bigegpt 2024-09-22 00:42 3 浏览
数组:定义,数组做什么的
PHP中数组的特点:数组没有类型,没有长度限制,可以有文本下标
数据遍历:foreach遍历,for(数组是从0开始,顺序增长的索引数组,count),each+list,一些列数组函数(current,key,next,prev,end,reset)
数组相关的函数
字符串-数组:explode,implode
验证码:range,array_rand(获取元素下标,顺序排序),shuffle
数据结构的模拟:栈和队列,array_push(入栈),array_pop(出栈),array_unshift,array_shift
SQL注入:addslashes,stripslashes(将添加的转义符号去掉)
浏览器传值
用户在浏览器里输入相关数据,数据需要提交到服务器。
浏览器到底是如何将数据传递给服务器的?
url传递数据
表单提交数据(form)
PHP获取浏览器提交数据的方式:
$_GET:获取用户get方式提交的数据,url地址栏里面的数据
$_POST:获取用于post方式提交的数据,表单提交的数据
$_REQUEST:获取以上两种方式提交的数据(进行合并)
严格的讲,浏览器只有两种提交数据的方式:get提交和post提交
Get提交:url里本身的数据,表单get方式提交的数据
Post提交:表单以post形式提交的数据
$_REQUEST会对post和get方式提交的数据进行合并:array_merge()
Array_merge($_GET,$_POST):如果post方式提交的数据,如果与get方式提交的数据,有同名下标,则会用post覆盖get。
是什么绝对了是post覆盖get而不是get覆盖post?
是配置文件决定了顺序:php.ini中一个叫做request_order的配置,决定了覆盖的顺序
这个顺序决定了数据数组在array_merge()里面出现的顺序
如果在低版本里,可能没有request_order这个配置,是用variables_order配置的。
注意:
1.通常session不会放到$_REQUEST里去,$_REQUEST里通常会保存get,post和cookie数据。
2.$_REQUEST要慎用,因为$_REQUEST不安全。
Get与post的区别
1.安全性:post提交的数据看不见(一般用户看不到),get都是在地址栏里,用户一眼就可以看到;用户可以直接修改地址栏的信息
2.Get方式能提交的数据是有限的(比较少),比post小很多。
3.Get和post都只能提交字符流数据,如果要进行文件的传输(二进制流),必须使用post方式提交(配合其他)
如何选择使用get方式还是post方式提交数据?
1.如果数据安全性要求不高,且数据量比较少,可以使用get方式(因为简单,不需要使用表单)
2.如果数据量大,或者安全性要求较高(秘密等),应该使用post提交
3.如果要上传完文件,非post莫属
在PHP5.3以前,可以修改PHP的配置文件,register_globals,能够将用户提交的表单,直接生成表单名字对应的变量
<form method=”post” action=”post.php”>
用户名:<input type=”text” name=”username”/>
密码:<Input type=”password” name=”password” />
<input type=”submit” value=”提交”/>
</form>
当用户提交到对应的PHP界面post.php中,默认的只能使用$_POST获得用户的数据
$_POST[‘username’],$_POST[‘password’];
Php.ini:register_globals=on
$username,$password
从PHP5.3开始,这个功能被废弃,5.4之后直接删除了。
1.不安全,用户提交的数据不是很方便验证
2.PHP不相信任何外来数据
如果用户表单提交界面,使用js对用户提交的所有表单数据进行验证。那么PHP还有没有必要对表单提交的数据进行验证?(数据合法性)
答案的肯定有必要!
对于PHP来讲,js验证过的数据依然是外部数据。Js可以被用户禁用,所以PHP还必须对数据进行验证。
如果在一个PHP脚本中,既有PHP代码,又有html表单,同时该表单还是提交到当前页。就需要对用户操作进行判断,用户究竟是直接请求还是提交
复选框的使用
Checkbox
复选框语法
篮球<input type=”checkbox” name=”名字” value=”值”/>
表现形式
技术实现
1.如何提交复选框的内容
表单
提交接收
选择了多个复选框,却只得到一个复选框的值
1)什么样的复选框能够被提交
复选框必须要有name属性
只有被选中的复选框才会被提交
2)多个复选框选中之后,只有一个被提交?
因为复选框的名字重复,浏览器只提交一个该名字的表单元素。最后一个被选中的复选框元素。
解决方式:给不同的复选框不同的名字,可以解决选中提交被覆盖的问题
3)无法区分复选框是否属于一类的问题?
采用数组的形式:给定name属性的值增加一个中括号[]
加上中括号之后,浏览器就不会把这个看似一样的名字当做相同的名字
提交之后
复选框加上中括号不会覆盖名字的原理
将表单复选框选中的元素添加到数据库
使用PHP1405数据库
创建hobby表
插入数据库代码
将数据从数据库拿出来并显示
之前所选择的爱好信息,在显示的时候,能够自动勾选上。
1.取出数据
2.把数据从字符串转化成数组
3.遍历数组,匹配选择
1)如何让复选框默认被选中?
在表单里添加一个checked=”checked”属性
2)如何判断一个元素是否在数组中存在?
In_array,判断一个元素字符在数组中存在,如果存在返回true,否则返回false
作业:将复选框显示采用数组遍历,构造checkbox表单的形式。
文件上传
将用户浏览器端的文件上传到服务器端的过程就是文件上传。
1) 哪里会用到文件上传?
头像管理,相册管理,共享文件,文件下载。。。
2)文件上传浏览器端,要做什么呢?
1. 选中文件
2. 点击上传
3)文件上传服务端,要做什么呢?
1. 接收用户上传的文件
2. 判断文件的类型和内容
3. 将文件保存到服务器上
如果要实现文件上传,必须保证两点:
1.浏览器要有文件表单域
保证表单的提交方式是post
<input type=”file” name=”名字” />
2.保证PHP允许文件上传功能
配置文件开启文件上传功能
修改临时文件上传的路径
如果不做修改,那么该目录指的是操作系统的临时目录,win7对应的是C:/Windows/Temp
文件上传
1.准备文件上传表单
2.准备接收文件的PHP文件
3.提交测试
文件没有上传成功,只是上传了一个文件名。原因?
Get或者post都只能提交字符流的字符串,不能够提交二进制流数据,而文件本身是二进制流
4.修改文件上传表单域,增加一个二进制流配置enctype=”multipart/form-data”
经测试,怪异的事情发生了,原来保存着$_POST里面的文件名不见了。原因?
文件上传成功了!
但是因为脚本立即结束,临时文件马上被删除了。如果想要看临时文件是否存在
5.PHP真正接收上传的文件
$_FILES预定义全局变量,保存用户上传的文件信息。
6.将临时文件给放到指定的文件上传目录
PHP提供了两个函数
Copy:将一个文件复制一份,将复制的这份放到指定的目录(会保留源文件)
Move_uploaded_file:将上传的文件移动到指定的目录(不会保留源文件)
文件上传流程
文件上传会因为编码的原因导致上传的中文名字会变成乱码。所以解决该问题的方式,就是对上传的文件进行重命名。
文件重命名
改变的是文件的名字,不改变文件后缀名
1.修改文件名字(系统生成)
2.保证原来文件的后缀名
文件上传函数封装(简单)
1.判断用户是否上传文件
2.正常情况下应该判断文件上传错误信息
只要当文件上传错误信息为0的时候才上传成功的,其他都是上传失败
3.文件重命名
4.移动文件
5.调用文件上传函数
算法
PHP中没有算法,在底层的语言当中算法应用的比较多。
基本排序算法:冒泡算法,选择排序,插入排序,快速排序。
都是对数组进行排序,数组里面都是数值元素
冒泡算法
假设升序排序,每次将最大的那个数值给冒到最后
原理
代码
查找
找出元素在数组中存在的位置。(下标)
查找就是遍历数组,拿元素与需要查找的值进行比对,比对成功则返回对应的下标,失败则继续直到数组末尾。
二分法
前提:要查找的数组是一个已经排序好的数组。
将数组进行折半,对中间元素进行比较,如果没有得到结果则从另外一半再进行折半,直到找到对应的元素
原理
代码
- 上一篇:教育平台项目后台管理系统:课程信息模块
- 下一篇:小程序开发教程学习(二)
相关推荐
- Dify「模板转换」节点终极指南:动态文本生成进阶技巧(附代码)Jinja2引擎解析
-
这篇文章是关于Dify「模板转换」节点的终极指南,解析了基于Jinja2模板引擎的动态文本生成技巧,涵盖多源文本整合、知识检索结构化、动态API构建及个性化内容生成等六大应用场景,助力开发者高效利用模...
- 我用C#造了个AI程序员:自动调试+重构代码实战
-
在软件开发的世界里,调试和重构代码往往占据了程序员大量的时间。我一直梦想着能有一个智能助手,帮我处理这些繁琐的工作。于是,我决定用C#打造一个AI程序员,让它具备自动调试和重构代码的能力。系统架构设计...
- 公文自动排版vba代码(公文自动排版vba代码)
-
Sub公文自动排版()'设置页面参数(单位:厘米)WithActiveDocument.PageSetup.TopMargin=CentimetersToPoints(3.7)...
- Anthropic最强代码神器:Claude Code系统提示词
-
最近,在融合Opus-4之后,ClaudeCode的整体能力直线飙升.甚至一度把曾经的最强开发工具——Cursor打的抬不起头来。无论是代码生成的准确度,还是智能补全的丝滑体验,都让人印象深...
- 使用 Ruff 进行 Python 代码格式化与静态检查
-
随着Python项目的规模增大,保持一致的代码风格和高质量的代码变得尤为重要。Ruff是一个现代、高性能、支持lint和格式化的Python工具,能帮助你快速发现并修复常见代码问题。本文...
- 基础语法篇:格式化输出 含完整示例代码
-
所谓格式化输出就是按照一定格式来输出对应的内容,在Python的语法中格式化输出包含两种:格式化符号、格式化字符串一、格式化符号常用的格式化符号包括%s(将内容转换为字符串,放入占位位置)、%d(将内...
- 代码整洁如诗!Keil 插件上线,一键格式化代码,告别风格混乱!
-
引言:代码格式不统一?你的团队还在为“括号位置”吵架吗?嵌入式开发者们,你是否经历过这些抓狂瞬间?代码风格“百花齐放”:同事的代码缩进用空格,你的用Tab,合并时冲突频发!手动调整耗时费力:为了通过C...
- [信捷PLC] 信捷PLC之C函数编程(一)
-
前言写PLC程序,越来越觉得结构化文本编程语言(ST)给PC编程带来的便利,在处理一些数据上,可以写的更加灵活。所以,在项目PLC选型上,我都会优先选择支持结构化文本的PLC。国内有些厂商推出了一些较...
- C语言-HelloWorld解析(c语言的helloworld怎么写)
-
使用VisualStudio2017开发工具新创建一个项目,编写第一个C语言程序。#include<stdio.h>voidmain(){printf("HelloW...
- VSCode 配置 C++ 开发环境!教程详解
-
第一步、安装VSCode应用程序打开VSCode官网,下载对应安装包并默认安装(这里指明:安装路径可以修改)第二步、安装相关插件此时的VSCode仅仅是一个英文文本编辑器,还称不上开发工具,所以需要...
- C语言进阶教程:C语言与汇编语言交互
-
C语言和汇编语言的交互是底层编程和性能优化中的一个重要方面。理解它们如何协同工作,可以帮助开发者更好地控制硬件、优化关键代码段以及理解编译器的行为。为什么需要在C语言中嵌入汇编?尽管C语言已经提供了相...
- C语言如何处理平台相关代码(c语言的开发平台)
-
在进行跨平台C编程时,不可避免地会遇到需要针对不同操作系统或硬件架构编写特定代码的情况。C语言通过预处理器指令,特别是条件编译指令,为我们提供了处理平台相关代码的有效机制。最常用的就是利用预定义的宏(...
- C语言:hello world(c语言helloworld代码)
-
环境:a.初学者建议用“啊哈C”,这款软件简单易装;b.devc.visualstdiod.Vc6.0第一行代码:#include<stdio.h>#<stdio.h&g...
- C语言之编译器集合(编写c语言编译器)
-
C语言有多种不同的编译器,以下是常见的编译工具及其特点:一、主流C语言编译器1.GCC(GNUCompilerCollection)特点:开源、跨平台,支持多种语言(C、C++、Fortran...
- 适合零基础初学者学习C语言第一课教程,揭开C语言的神秘面纱
-
一、C语言简介我刚接触编程,首先想要学习的就是C语言,这次我就把我的感悟用我自己理解的文字表述出来,这样对刚学C语言的人来说,才是比较友好的。因为我们都没有C语言的基础,不懂啥是编程,啥事代码。我们...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- libcrypto.so (74)
- linux安装minio (74)
- ubuntuunzip (67)
- vscode使用技巧 (83)
- secure-file-priv (67)
- vue阻止冒泡 (67)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)