笔记:

这次用的方法是先跟着视频做一遍,隔一天或半天后独立再做一遍,能发现真正不会的地方记录下来。

CMS0.1界面布局
1、问题:分两个css来实现时basic.css+index.php出现定位不正确问题。
     解决:@CHARSET "UTF-8"; 第一行说明漏了一个封号“;”导致奇怪问题,花了半个多小时和原文件对比。
     ps.经常会犯这种错误少个结尾符号,浪费大量时间。

2、小知识:body{margin:0 auto;}让页面居中 。

3、小知识:border宽度会计算到页面宽度里。

4、小知识:body width如果已经设定,占一整行的div可以width:auto;

5、小知识:ul li 取消列表前面符号list-style-type: none;

列表右对齐ul{text-align:right;}

横向排序li{display:inline;}(其实用float:right也能实现横向对齐)

CMS0.2分离调用

1、小知识:index加载header、footer

require 'includes/header.inc.php';

require 'includes/footer.inc.php';

2、小知识:防止恶意调用,被调用文件内添加一个常量来判断。在调用文件中增加该常量IN_TG

if(!defined('IN_TG')){

exit('access defined');
               }

3、小知识:转换为硬路径,速度更快

//substr函数是用来截取需要的目录长度,-8是从后截取8位
//dirname是获得目录路径
//__FILE__是获得文件路径
//在common.inc.php定义硬路径常量
define('ROOT_PATH', substr(dirname(__FILE__),0,-8)); //使用硬路径来调取文件
//index.php使用硬路径调用其他页面
require dirname(__FILE__).'/includes/common.inc.php';
require ROOT_PATH.'includes/header.inc.php';
require ROOT_PATH.'includes/footer.inc.php';

4、小知识:PHP_VERSION php版本的全局常量

CMS0.3执行耗时

1、小知识:通过microtime()可以获取时间戳和微秒数

$_mtime = explode(' ', microtime());//将时间戳和微秒数分开放到数组中

$_mtime[1] + $_mtime[0]; //时间戳+微秒数 用来将后面的时间-开始时间,得到执行消耗的时间

2、第一个函数,需要养成良好的写备注文档的习惯

/**
*_runtime()是用来获取执行耗时
*@access public 表示函数对外公开
*@return float 表示返回出来的是一个浮点型数字
*/
function _runtime(){
$_mtime=explode(' ',microtime());
return $_mtime[1]+$_mtime[0];
}

3、小知识:round()函数,对浮点数进行四舍五入

同时可以指定精度round($value,3)//保留小数点后3位

4、小知识:

//判断PHP版本是否过低
                 if(PHP_VERSION<'4.1.0'){
                       exit("THE PHP VERSION IS TOO LOW!");
                 }
                出现的问题:'4.1.0'漏了加单引号,经常不知道什么时候加引号

cms0.4注册界面

1、小知识:<dl>列表的用法以及dl、ul、ol的区别

<dl></dl>

<dt>

<dd></dd>

</dt>

2、小知识:样式class="text yzm",引用时使用.yzm

3、小知识:让dl列表居中,必须先设定它的宽度

#register dl{

width: 400px;
                  margin: 0 auto;
                 }

4、小知识:鼠标移动上去指针变成手型。

cursor:pointer;

5、小知识:JavaScript实现点击打开新窗口

//第一个参数打开url,第二个标题,第三个打开网页的大小和位置

onclick="javascript:window.open('index.php','face','width=400,height=400,top=0,left=0')"

cms0.5选择头像

1、小知识:range()函数。range(1,9)取1-9数字放入数组中

2、小知识:两种循环:for()和foreach()

//用for循环9次读取m01-m09,9张图片
<?php for($i=1;$i<10;$i++) {?>
<dd><img src="data:images/face/m0<?php echo $i?>.gif" alt="头像<?php echo $i?>"></dd>
<?php }?>
//用foreach循环读取m10-m64的图片
<?php foreach(range(10,64) as $i) {?>
<dd><img src="data:images/face/m<?php echo $i?>.gif" alt="头像<?php echo $i?>"></dd>
<?php }?>

3、不理解:1、div块face包含了h3和dl,为什么#face加一条外边框,dl却不显示在里面?

2、dl加外边框后,同样dd显示的内容也不在外边框内。不知道为什么?

回答:等我明白了再来写

<div id="face">
<h3>更换头像</h3>
<dl>
<dt></dt>
<?php for($i=1;$i<10;$i++) {?>
<dd><img src="data:images/face/m0<?php echo $i?>.gif" alt="头像<?php echo $i?>"></dd>
<?php }?>
<?php foreach(range(10,64) as $i) {?>
<dd><img src="data:images/face/m<?php echo $i?>.gif" alt="头像<?php echo $i?>"></dd>
<?php }?> </dl>
</div>

4、js一点不会,先做点记录。陆续学起来。

作用:等待网页加载完毕,获得id=faceimg对象,对它的onclike增加动作打开一个网页。

//等在网页加载完毕再执行
window.onload = function () {
var faceimg = document.getElementById('faceimg');
faceimg.onclick = function () {
window.open('face.php','face','width=400,height=400,top=0,left=0,scrollbars=1');
}
};

cms0.6头像取值

//通过getElementsByTagName获得每张图片的src
//增加图片的onclick事件触发_opener()函数
//由于img.src为长地址,所以face.php的img增加了alt,将alt调用函数,为之后表单调取value使用
window.onload = function(){
var img = document.getElementsByTagName('img');
for (i=0;i<img.length;i++){
img[i].onclick = function(){
_opener(this.alt);
}
} }
//通过前端页面直接插入onclick事件调用_opener();
function _opener(src){
//opener是父窗口的意思
var img = opener.document.getElementById('faceimg');
img.src = src;
opener.document.register.face.value = src;
}

另一种方法是在<img>添加onclick="_opener(this.src)"来调用函数。不过并不推荐

cms0.7验证码上

1、小知识:画图函数

//创建图片

$_img = imagecreatetruecolor($_width,$_height);

//填充背景

imagefill($_img,0,0,$_white);

//创建一个黑色的边框

$_black = imagecolorallocate($_img,100,100,100);

imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);

//随机划线条

for ($i=0;$i<6;$i++) {

$_rnd_color= imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));

imageline($_img,mt_rand(0,75),mt_rand(0,75),mt_rand(0,75),mt_rand(0,75),$_rnd_color);

}

//随机打雪花(其实打印一个字符*)

for ($i=1;$i<100;$i++) {

imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height),"*",imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)));

}

//输出验证码(也是输出字符)

for ($i=0;$i<strlen($_SESSION['code']);$i++){

imagestring($_img,mt_rand(3,5),$i*$_width/4+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION['code'][$i],imagecolorallocate($_img,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200)));

}

//输出销毁

ob_clean();

header("Content-Type: image/png");

imagepng($_img);

imagedestroy($_img);

2、问题:跟着教程做,但始终显示不了图片

解决:百度:

使用PHP中的GD库绘制图像,之后浏览器无法显示,GD库安装,配置也没什么错误,提示图像因本身有错无法显示,于是就在header() 前面使用ob_clean();然后使用浏览器就能正常的浏览了

<?php

$height = 300;
$width = 300;
$im = imagecreatetruecolor($width, $height);
$white = imagecolorallocate ($im, 255, 255, 255);
$blue = imagecolorallocate ($im, 0, 0, 64);
imagefill($im, 0, 0, $blue);
imagestring($im, 10, 100, 120, 'Hello,PHP', $white);
ob_clean();
header ('Content-type: image/png');
imagepng($im);
imagedestroy($im);

?>

ob_get_contents() - 返回输出缓冲区的内容
ob_flush() - 冲刷出(送出)输出缓冲区中的内容
ob_clean() - 清空(擦掉)输出缓冲区
ob_end_flush() - 冲刷出(送出)输出缓冲区内容并关闭缓冲
ob_end_clean() - 清空(擦除)缓冲区并关闭输出缓冲
flush() - 刷新输出缓冲

cms0.8验证码下

1、小知识:验证码点击刷新

放入图片区域,可以自动刷新局部

                onclick="javascript:this.src='code.php?tm='+Math.random()"

然后采用分离JS的原则分离出去

cms0.9提交数据

1、小知识:

1)将数据提交到本页,必须做一个名值对,用来判断是否提交了数据。

action=register.php?action=register

2)也可以设计一个隐藏字段来做名值对

<input type="hidden" name="action" value="register" />

cms1.0过滤用户名

1、小知识:

$_string = trim($_string); //去掉两边空格

mb_strlen($_string,'utf-8') //以utf-8格式判断字符串长度

preg_match($_char_pattern,$_string) //正则比对

in_array($_string,$_mg) //判断$_mg数组中是否含有$_string

mysql_real_escape_string($_string) //mysql自带转义输入函数,防止SQL注入

跟着PHP100第一季学写一个CMS(1-10)的更多相关文章

  1. 跟着PHP100第一季学写一个CMS(11-20)

    PS.刚发现IE并不兼容,有点悲剧  cms1.1密码处理 1.小知识:sha1($_answer) //加密为40位,不知道能不能破解 2.小知识:mysql_real_escape_string( ...

  2. android注解入门 并来自己写一个框架

    介绍 这里我带大家来学习一下注解 并且用来写下一个模仿xUtils3 中View框架 此框架 可以省略activity或者fragment的 findViewById 或者设置点击事件的烦恼 我正参加 ...

  3. 冰血暴第一季/全集Fargo迅雷下载

    冰血暴 第一季 Fargo 1 (2014)本季看点: 该剧改编自科恩兄弟获得1996年奥斯卡提名的同名经典影片,计划总共拍摄10集,第一季将讲述一个完整的故事.由<识骨寻踪第一季>编剧诺 ...

  4. JS入门学习,写一个时钟~

    <!-- 耽搁了几天,于是又继续回到JS的学习了~~ 各种头大,加油吧... --> <!doctype html><html><head> <t ...

  5. 通过游戏学python 3.6 第一季 第二章 实例项目 猜数字游戏--核心代码--猜测次数 可复制直接使用 娱乐 可封装 函数

      猜数字游戏--核心代码--猜测次数   #猜数字--核心代码--猜测次数 number=33 amount=3 count=0 while count<=amount: conversion ...

  6. 通过用jQuery写一个页面,我学到了什么

    概述 前几天面试,hr发来一个测试文件,让我做做看.我一看,其实就是根据PSD需求写一个页面,再加上一些互动效果即可. 刚好我之前学了切图,jquery等知识还没练手过,于是高兴的答应了. 最后花了3 ...

  7. 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果

    package com.rui.test; import java.util.Random; /** * @author poseidon * @version 1.0 * @date:2015年10 ...

  8. 学了C语言,如何利用cURL写一个程序验证某个网址的有效性?

    在<C程序设计伴侣>以及这几篇关于cURL的文章中,我们介绍了如何利用cURL写一个下载程序,从网络下载文件.可是当我们在用这个程序下载文件时,又遇到了新问题:如果这个网址是无效的,那么我 ...

  9. 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装

    在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...

随机推荐

  1. HBase Error: connection object not serializable

    HBase Error: connection object not serializable 想在spark driver程序中连接HBase数据库,并将数据插入到HBase,但是在spark集群提 ...

  2. CollatingOfData 之 JsonHelper

    1 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System. ...

  3. 几个常用myeclipse快捷键

    Ctrl + D:直接删除光标所在行 Alt + ↑:向上移动光标所在行 Alt + ↓:向下移动光标所在行 Ctrl + Alt + ↑:直接向上复制光标所在行内容 Ctrl + Alt + ↓:直 ...

  4. AJAX XMLHttpRequest

    <html> <head> <title>XMLHTTPRequest对象的说明DEMO</title> <script language=&qu ...

  5. JS 控制文本框只能输入中文、英文、数字与指定特殊符号

    想做姓名输入的js判断是否是中文,但是网上找的很多是源于一篇文章的,判断中文的正则式不对,后来找到一个可以准确判断了,但是是监测里面有中文的就行,跟我想要的只能输入中文的意思相左,所以又找了下面的 J ...

  6. mongoDB操作命令及mongoDB的helper

    此项目已开源,开源地址是: http://mongodbhelper-csharp.googlecode.com/svn/trunk/ mongodb的helper using System; usi ...

  7. [设计模式]<<设计模式之禅>>抽象工厂模式

    1 女娲的失误 上一篇讲了女娲造人的故事.人是造出来了,世界也热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍 脑袋,忘记给人类定义性别了 ...

  8. wince 位图的使用

    操作位图的基本步骤: *创建位图句柄 *加载位图对象 *创建内存设备描述对象,将位图选入内存设备描述对象 *使用绘图函数进行图形绘制 *删除位图句柄 创建位图句柄并且加载位图对象: *位图句柄 HBI ...

  9. #if...#endif的用法总结

    在写到  pwm音阶程序的时候,在代码中有#if...#endif的用法问题,相关音阶的代码如下: /************************************************* ...

  10. MSP430常见问题之指令系统类

    Q1. IAR中怎样描述P2OUT.3脚,#define LCD_cs1 P2OUT.3; 对吗?A1:430 不能位寻址,所以一般的位操作,都通过“与”来作用.#define LCD_cs1 (P2 ...