前言

学习举办了个蛋疼的网页设计大赛,为了学分,我不得不参加一下,其实参加一下也蛮好的,前段时间学了一点PHP,也应该要找点什么实操去做做了,否则像C#那样学了什么都不做结果现在C#也忘了也不会写了。我是做后端功能开发的,队友做前端,两个前端一个后端的组合。。艰难地熬过了一周,把协定好的基本功能写好了,初赛作品也交上去了,大概现在就是这个情况吧,所以做一篇记录记录一下。本来这篇文章早几天就应该有了,只是一直拖一直拖,现在也要写了,要不然这个月就过去了。

正文

【就按照我做的功能分类吧】

功能页面安排

功能页面安排结构其实也是一个难点,有时候我要把PHP代码嵌入到HTML里面,有时候需要独立,其实这是考验对网站结构的安排。其实不懂可以思考成CSS文件(这个都不会麻烦先学学网站开发),可以把CSS独立成一个.css文件,也可以把css放进HTML布局文件里面,前者可以多个HTML布局共用一个层叠样式,后者就是只修改嵌入的那个HTML布局层叠。

1.独立页面
一些公用功能:例如数据库连接、页面共用的布局等。
调用方法: include("?????.php");require("?????.php");
require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。

2.整合页面
一些页面的独有功能:例如文章撰写、文件上传等。
实际上这两个功能也可以独立文件,可以用post或get方式从原HTML文件把数据包转给php页面执行操作,但如果是纯php网页,这个方式就显得没什么必要了,直接嵌入到代码中就行。

3.页面功能的开发注意事项
php网页开发有点独特,HTML布局代码在php语言的眼里属于一种字符串输出,也就是说,如果想布局文件动态化(例如登录后把登录按钮变成用户名),直接用php的echo输出即可。
独立页面的页面共用布局实际就类似于CSS的共用层叠,在php,页面的各部分布局可以根据需要模块化,例如页头也页脚,两个独立完成之后,通过include就可以把文件嵌入到一个页面了,可以节省很多开发时间,还能优化资源使用。
如果是HTML通过post或者get转到另一个php执行操作,必须要先建立一个表单包括某个功能块,然后表单的头要写

action=xxx.php
method=post或get

当然,如果在同一个页面文件里面想调用表单里面的东西,也要先写一个method,否则也无法调用

数据库连接

数据库连接也算是比较简单了,先贴一个代码,以mysql为例。

<?php
$servername = ""; //数据库ip
$username = ""; //数据库登录用户名
$password = ""; //数据库登录密码
$dbname = ""; //数据库名称
$port = ""; //数据库端口
$conn = mysqli_connect("$servername", "$username", "$password", "$dbname", "$port");
mysqli_close($conn); //退出数据库连接
?>

一般来说,普通用户建站数据库一般都是挂本地的了,所以ip一般都填写127.0.0.1,当然如果有多个服务器,且数据库在其他服务器里面,就要根据数据库服务器所在的ip填写。其他的用户名、密码、数据库名称就不说了,至于端口,mysql默认是3306,其他的端口号根据自己的情况填写即可。记得使用完数据库后要退出数据库连接。
数据库的其他相关操作之后再详细写一篇新的记录,因为涉及的内容比较多。

页面跳转

页面跳转不做什么解释,一般用于登录注册之后或者其他动作完成之后的一个自动跳转,通常用以下代码:

header("location:php页面文件路径");

链接拼接

我们常常在一些动态网站上看到的连接是这样的:www.???.com/???.php?cid=111,其实这个涉及到连接的拼接问题,实际上也很简单,cid=111实际上是一个参数,?是一个连接符号,具体是怎么实现功能呢?我百度了很多也没有什么比较适合简单新手的方法,不过我这里写一下我是怎么定位录入了数据库的网站文章内容,其他调用数据同理。
我在文章展示页面先分解网站链接,以www.???.com/???.php?cid=111为例

$picCid = end(explode("=", $_SERVER["QUERY_STRING"]));

end():字符串的结尾
explode():字符串分割
explode("指定分割标志", 要分割的字符串)
$_SERVER["QUERY_STRING"]:当前网站链接
所以这条代码的意思是:获取当前网站链接,并以“=”进行分割,获取分割后排列的最后那串字符,实际上就是获取参数111
接着利用参数,通过数据库操作查找该参数在数据库的一些数据
最后通过获取出来并显示到屏幕上

文件上传

文件上传我基本都是在网上拷的代码,不过也基本弄得明白了,先把代码贴出来

function picUpload(){
                //允许上传的图片后缀名
                $allowedKinds = array("jpeg", "jpg", "png");
                $fileName = explode(".", $_FILES["file"]["name"]);            
                //获取文件后缀名
                $getExt = end($fileName);
                if (!empty($_FILES["file"]["name"]))
                {
                    if ((($_FILES["file"]["type"] == "image/jpeg")
                    || ($_FILES["file"]["type"] == "image/jpg")
                    || ($_FILES["file"]["type"] == "image/pjpeg")
                    || ($_FILES["file"]["type"] == "image/x-png")
                    || ($_FILES["file"]["type"] == "image/png"))
                    && ($_FILES["file"]["size"] < 5242880)
                    && in_array($getExt, $allowedKinds))
                    {
                        $fileUrl = "upload/" . time().rand(1,1000).substr($_FILES["file"]["name"],strrpos($_FILES["file"]["name"],"."));
                        move_uploaded_file($_FILES["file"]["tmp_name"], $fileUrl);
                        textUpload($fileUrl);
                    }
                    else
                    {
                        echo "非法的文件格式";
                    }      
                }
            }

实际上原理也很简单,我们也知道php有一些超级全局变量,这些超级全局变量里面有一个$_FILES变量,用此变量可以获取上传文件的类型,大小,后缀,路径,临时路径等。

$_FILES的代码格式:$_FILES"表单的上传功能的name"
表单的上传功能的name一定要对应好,不能出错。

要注意的是:表单的上传功能type是file,确认上传功能的按钮的type要用commit。
参数其实就是上面提到的类型(type),大小(size),临时路径(tmp_name)等。其他参数以后再补充,

为了防止上传的文件出现同名,一般上传到服务器的文件最好经过重命名,所以这里写了一条这样的代码:

time().rand(1,1000).substr($_FILES["file"]["name"],strrpos($_FILES["file"]["name"],"."))

这条代码给一个文件做了重命名,分了三个部分(以小数点为分割)
第一部分是时间,第二部分是1~1000的随机数,第三部分就是后缀名。

strrpos():截取某字符串在另一个字符串最后一次出现的位置

格式:strrpos("字符串","字符串");

substr():获取某个字符所在位置的包括该字符和后面的字符串,也就是说例如20位长度的字符,某字符在第9位,那么就可以用这个方法获取从第9位开始一直到结尾这一整串字符。

格式:substr("字符串",位置数); //要注意的是,位置是从0开始算,而且只能是int数值;

Cookie的使用

关于Cookie的使用,本来我弄得这个网站想用Session的,用来做网站登陆之后的状态保持,结果发现Session不行,最后转到了Cookie,本来应该是Session+Cookie共用的,不过我暂时还没学会,所以只做了Cookie,Session以后研究出来再做个记录吧。
Cookie的开启:setcookie();

setcookie("cookie的名称","cookie的值"); //一般用表单的name和自定义的变量。

Cookie的使用:以保持登录状态为例子
用Cookie超级全局变量,判断该cookie是否为空置,非空的话就执行其他动作

!empty($_COOKIE["cookie名称"] //!empty是非空

结尾

记录到这里也差不多了,还有些具体的东西到时候再换篇文章继续讨论并记录。终于赶在这个月月底写了一篇博客,这个月不是0作业!!