挑战最棒的留言本的源码(一)

 更新时间:2016年11月25日 16:12  点击:1996

哈哈,很开心,做了好些时候的留言本总算可以发表了...
阿,希望能大家喜欢,不喜欢也不要紧,但是,一定有不喜欢的理由,,烦请一定告知!!!
谢谢!!!

本留言本从一开始的目标就是""挑战最棒的留言本""!!!我想"没有做不到的,只是看有没有必要"!!!

假如你的建议很好,我一定做到你的要求为止,我的目标:"做一个很棒的程序员".



此留言本的优点和缺点:
-------------------------------------------------------------------
这可能是最重要的了.哈哈!!!

优点:

该留言本最大的优点是,换行.实现了用户换行,(保持原形,中国人的同学录的换行是安一定字数的,也就是说不管你的换行,统统都他给你换行.这样要是想贴文本图形的话,就存在问题了.)而现在大部分的留言本都没有实现自动换行,也就是说它不管你一句写多少个字符,它都会在一行显示,这样要是有一个留言没换行的话,留言本就会变的很难看,窗口下面的行条就会好长,,破坏了叶面的美观!!!.

到今天为止,我还没发现能同时解决这两个问题的留言,这也是我写这留言本的原因所在.

包括oso的论坛,也是不换行的,不信你去留言试试,写一条很长的不回车的字符,这样它的叶面马上就出现问题了.(我和oso提过这问题,不知道改了没有!)

我写了个computer_message($msg);的函数解决了这问题,可以看config.php文件中的源玛.

还有分页:通过两种方式来察看,一是:往前,往后显示留言,另一种是:安页数显示.

还有现在版主可以方便的通过下面的连接来删除和恢复,当然要输入密码.

缺点:

当然有了,要实事求是,就是页面的美化工作做的还不是很够,虽然觉的很必要,但由于时间的关系总觉的这是外面的东西,可以先拖一下,当然只要有一点HTML知识的都可以很方便的修改.

还有就是未知的BUG了!哈哈!!!


下载点,和样本在http://little.oso.com.cn中可以找到!!!


因为说明档是在linux下写的,所以要用写字板打开readme.txt
不要用记事本,要不然会乱码!!!

下面是配置说明:
--------------------------------------------------------------------
为了配置的方便,重新整理了代码,现在已经把全部的需要设置的参数都放在
config.php文件里了,配置起来应该很简单,里面有详悉的说明.

目标:在十分种内搞定你的留言本!!!

1: 建立一个数据库(要主页提供数据库空间)

一般象oso的有phpMyAdmin开放源玛的前端.创建以来很简单的.

取好名字后,记得把config.php 的$db_name改成这个名字

2: 建立留言表(等下把config.php的$table_name改成这里你起的名字).

结构为:
key_liuyan int(11) auto_increment primary key, //主建,自动增加
nikename varchar(20) null // 昵称
subject varchar(100) null // 留言主题
date_created varchar(19) // 留言时间
ip_address varchar(15) // 留言人的IP地址
message mediumtext null // 留言信息
email_address varchar(50) null // 留言人的e-mail地址
zhuye_address varchar(50) null // 留言人的主页地址
huifu_biaozi int(1) default 0 // 版主回复标志
huifu mediumtext null // 版主回复内容
oicq varchar(20) null // 留言人的OICQ号码

可以用如下的SQL来完成!!!(本人测试通过,记得把yourtable_name改成好记点的,
当然不改也行阿)

create table your_liuyan_table(
key_liuyan int(11) auto_increment primary key,
nikename varchar(20) null,
subject varchar(100) null,
date_created varchar(19) ,
ip_address varchar(15),
message mediumtext null,
email_address varchar(50) null,
zhuye_address varchar(50) null,
huifu_biaozi int(1) default 0 ,
huifu mediumtext null,
oicq varchar(20) null
)

3: 建立控制表:(同样要把这里起的名字放到config.php的$table_name_control里去)

结构如下:

leibie varchar(20) primary key,
value varchar(20) null

也可以用下面的SQL语句:

create table your_control_table(

leibie varchar(20) primary key,
value varchar(20) null
)

因为这是你的控制表,所以要自己加入控制记录两条;

SQL语句为:

插入删除密码:

insert into your_control_tble(
leibie,
value)
values
(delete,'1332');

插入回复密码:

insert into your_control_tble(
leibie,
value)
values
(huifu,'1332');

这样放进去的密码为:123,用户名为空!

怎么计算密码和插入的值的关系呢?

是这样的,你的密码 ,如123 把三位数上的各位加起来,等于6,然后把6乘以222就是密码值!!!

6*222=1332.

知道了这关系,当然你可以改成其它的密码了.

不过用户名要为空,,,


这实行的简单加密的原理可以参照主页 http://cxg168.126.com 的三位数.


4: 一切完成,然后只要把除了readme.txt外的文件上传就行了.

很多seoer都说把文件做成静态这样对搜索引擎是最好的了,但是像我们这些买别人的虚拟空间,是有限的但是又想以静态形式,如果生成真正的静态如果你的网站有1000000篇文件生成静态就要占很大的空间,这样的话增加了我们的费用,所以就出现了伪静态这个名词,伪静态有很多种做法,下面我们来一一讲解一下吧.

第一种就是以aa.php/aaaa_1_.htm这种形式,这种做法的好处就是在我们没有足够的权限时做的,下面看看代码.

$html_id=isset($_SERVER['PATH_INFO'])?$_SERVER['PATH_INFO']:'';//取得地参数
$url =@explode('_',$html_id);//进行处理
$id  =@$url[1];//得到我们所要的数据

例:http://www.111cn.net/show.php/id_3_cn.html

使用上面的方法后$url[1]的值就为3,不过说一个得到值后最好判断处理一下啦,

 

第二种方法:Apache 伪静态

一 打开 Apache 的配置文件 httpd.conf 。
二 将#LoadModule rewrite_module modules/mod_rewrite前面的#去掉
三 在 httpd.conf中添加:
<IfModule mod_rewrite.c>
    RewriteEngine On
    #RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]+\.html
    RewriteRule ^(.*?(?:index|dispbbs))-([-0-9]+)\.html$ $1.php?__is_apache_rewrite=1&__rewrite_arg=$2
</IfModule>

四 要实现asp帖子URL到php帖子的映射,在 第三步的<IfModule mod_rewrite.c>和</IfModule>之间添加:
    RewriteMap tolowercase int:tolower
    RewriteCond %{QUERY_STRING} (?:boardid|page|id|replyid|star|skin)\=\d+ [NC]
    RewriteRule ^(.*(?:index|dispbbs))\.asp$ $1.php?${tolowercase:%{QUERY_STRING}}&__is_apache_rewrite=1

五 保存httpd.conf并重启Apache。

关键字:asp 伪静态   什么是伪静态   iis 伪静态   asp.net 伪静态   php 伪静态 discuz 伪静态   apache 伪静态   phpwind 伪静态   伪静态规则   虚拟主机 伪静态

5. 其他杂项
5.1 生成图像

PHP可以操作处理图像。假如你已经安装了GD库,你甚至可以利用PHP生成图像。
<?
Header("Content-type: image/gif");
$string=implode($argv," ");
$im = imagecreatefromgif("images/button1.gif");
$orange = ImageColorAllocate($im, 220, 210, 60);
$px = (imagesx($im)-7.5*strlen($string))/2;
ImageString($im,3,$px,9,$string,$orange);
ImageGif($im);
ImageDestroy($im);
?>
(译者注:以上代码段缺少注释,请读者参考PHP Manual的图像处理函数部分)
这段代码在其他页面中通过以下标记<img src="button.php3?text">调用,然后以上的那段button.php3代码取得text值并在另外取得的图像文件中加上该值--在以上的代码中该图像文件是images/button1.gif--最后输出到浏览器。假如你想在表单域中使用图像按钮,但是又不希望在每次按钮上的文字改变后不得不重新生成新的图像,就可以利用这样简单的方法动态生成图像文件。

5.2 Cookies

PHP支持基于HTTP的cookies。在需要时你可以像使用一般变量一样方便的使用cookie。Cookies是浏览器保存于客户端的一些信息片段,由此你可以知道是否一台特定PC上的任何人都访问过你的站点,浏览者者在你的站点上的踪迹等等。使用cookies的典型例子就是对浏览者偏好的甄别。Cookies由函数setcookie()设定。与输出HTTP标头的函数header()一样,setcookie()必须在任何实际内容杯输出到浏览器之前调用。以下是一个简单例子:
<?
if (empty($VisitedBefore))
{
// 假如没有设定cookie,为cookie赋上当前时间值
// 函数中的最后一个参数声明了该cookie保存的时间
// 在这个例子中是1年
// time()函数返回自1970年1月1日以来的以秒数计的时间
SetCookie("VisitedBefore",time(), time() (60*60*24*365));
}
else
{
// 欢迎浏览者再次光临
echo "Hello there, welcome back<BR>";
// 读取cookie并判定
if ( (time() - $VisitedBefore) >= "(60*60*24*7)" )
echo "Why did you take a week to come back. You should be here more often!? ";
}
?>

5.3 基于HTTP验证

基于HTTP验证当PHP以CGI模式运行时不能实现。我们可以使用函数header()发送HTTP标头强制验证,客户端浏览器则弹出供输入用户名和密码的对话框。这两个变量被储存在$PHP_AUTH_USER和$PHP_AUTH_PW中,你可以使用这两个变量验证合法并答应进入。以下的例子通过用户名称/密码对为tnc/nature的验证一名用户的登录:
<?
if(!isset($PHP_AUTH_USER))
{
Header("WWW-Authenticate: Basic realm="My Realm"");
Header("HTTP/1.0 401 Unauthorized");
echo "Text to send if user hits Cancel button ";
exit;
}
else
{
if ( !($PHP_AUTH_USER=="tnc" && $PHP_AUTH_PW=="nature") )
{
// 假如是错误的用户名称/密码对,强制再验证
Header("WWW-Authenticate: Basic realm="My Realm"");
Header("HTTP/1.0 401 Unauthorized");
echo "ERROR : $PHP_AUTH_USER/$PHP_AUTH_PW is invalid.";
exit;
}
else
{
echo "Welcome tnc!";
}
?>
事实上再实际引用中不大可能如上面使用代码段明显的用户名称/密码对,而是利用数据库或者加密的密码文件存取它们。

5.4 文件上传

你可以利用PHP实现文件的功能,注重客户端的浏览器应该是Netscape3以上或者IE3以上。以下就是该功能的简单演示:
( upload.html ):
<HTML>
<HEAD>
<TITLE>Upload Your File</TITLE>
</HEAD>
<BODY>
<FORM ACTION="receiver.php3"
ENCTYPE="multipart/form-data" METHOD=POST>
<INPUT TYPE="HIDDEN"
NAME="MAX_FILE_SIZE" VALUE="2000000">
<INPUT TYPE="FILE"
NAME="uploadfile" SIZE="24" MAXLENGTH="80">
<BR><BR>
<INPUT TYPE="SUBMIT" VALUE="Upload File!"
NAME="sendit">
<INPUT TYPE="SUBMIT" VALUE="Cancel"
NAME="cancelit"><BR>
</FORM>
<I><FONT SIZE="2">(You may notice a slight
delay while we upload your file.)</FONT></I>
</BODY>
</HTML>

下面是处理上传的文件:
( receiver.php3 ):
<?
function do_upload ()
{
global $uploadfile, $uploadfile_size;
global $local_file, $error_msg;
if ( $uploadfile == "none" )
{
$error_msg = "You did not specify a file for uploading.";
return;
}
if ( $uploadfile_size > 2000000 )
{
$error_msg = "Sorry, your file is too large.";
return;
}
$the_time = time ();
// 你需要对以下目录有写权限
$upload_dir = "/local/uploads";
$local_file = "$upload_dir/$the_time";
if ( file_exists ( '$local_file' ) )
{
$seq = 1;
while ( file_exists ( "$upload_dir/$the_time$seq" ) ) { $seq ; }
$local_file = "$upload_dir/$the_time$seq";
};
rename ( $uploadfile, $local_file );
display_page ();
}
function display_page ()
{
// 这里是你的页面内容
}
<HTML>
<HEAD>
<TITLE>php3 Receiving Script</TITLE>
</HEAD>
<BODY>
<?
if ( $error_msg ) { echo "<B>$error_msg</B><BR><BR>"; }
if ( $sendit )
{
do_upload ();
}
elseif ( $cancelit )
{
header ( "Location: $some_other_script" );
exit;
}
else
{
some_other_func ();
}
?>
</BODY>
</HTML>

5.5 常用函数

我们简单来看看一些常用的函数。

数组


array - 生成数组
count - 数组元素个数
sort - 数组排序,另有其他几种排序函数可供使用

记得 HTML 从1.0 版发展到 2.0 版的那些令人兴奋的日子吗,那时把握一种新的 Web 语言就和查看 Web 站点之后的代码一样简单?记得轻松的学习基础 HTML 吗?记得能够随意地构建出一些代码,并在编写时快速地查看外观,而且假如它不能运行,能够轻易地修改 HTML 代码吗?没有 IDE,没有对象和类。只需一个文本编辑器、一些标记和您自己的聪明才智。堪称快速和经济高效!  

  这些日子不会永远消逝。这种“保持简单”的精神在 PHP(近几年来得到广泛应用的一种脚本语言)中继续延续。这种语言在不断发展,并逐渐知道 PHP 能做什么以及不能做什么,并且使 Web 应用程序更加易于构建。

  从默默无闻的新生事物到 Web 上的明星角色   

  就像二十世纪五十年代初涉影坛的好莱坞演员,PHP 真正的开始并不广为人知。有些人认为 PHP 代表“个人主页”。有些人认为 PHP 是其发明者姓名的首字母缩写。实际上,PHP 代表超文本预处理器 (Hypertext Pre Processor),它是由一个名叫 Rasmus Lerdorf 的人在 1994/95 年左右发明的。Lerdorf 提出了 PHP 框架,作为跟踪 Web 站点的访问者如何查看其在线简历的一种方式。他公开发布了最初的超文本预处理器源代码,以帮助其它的 Web 开发人员对在线内容执行类似的操作。   

  当时 Web 开发人员受到 HTML 中提供的表示特性的打击,开始发现这种新的 PHP 脚本语言在构建动态内容的 Web 站点时有多大的好处。PHP 代码可以直接嵌入到 HTML 代码中,而且这种年轻的脚本语言就像 HTML 一样易于把握。   

  对开发人员而言,这意味着可以很快学会 PHP,可以快速构建动态内容的 Web 站点,对代码的修改也可以快速地完成。在开发人员编程时,可以立即查看结果,无需 IDE,也无须困扰于处理用户类型和整数类型以及对象和类

函数count()
描述:
计算一变量中元素的个数
int count (mixed var);
Returns the number of elements in var , which is typically an array (since anything else will have one element).
Returns 0 if the variable is not set.
Returns 1 if the variable is not an array.

 

函数current()
描述:
传回数组指针目前所指的元素

 

mixed current (array array);

 

Each array variable has an internal pointer that points to one of its elements. In addition, all of the elements in the array are linked by a bidirectional linked list for traversing purposes. The internal pointer points to the first element that was inserted to the array until you run one of the functions that modify that pointer on that array.

 

The current() function simply returns the array element that's currently being pointed by the internal pointer. It does not move the pointer in any way. If the internal pointer points beyond the end of the elements list, current() returns false.

 

函数each()
描述:
返回数组中下一对key/value的值

 

array each (array array);

 

Returns the current key/value pair from the array array and advances the array cursor. This pair is returned in a four-element array, with the keys 0 , 1 , key , and value . Elements 0 and key each contain the key name of the array element, and 1 and value contain the data.

 

Example 1. each() examples

 

$foo = array( "bob", "fred", "jussi", "jouni" ); $bar = each( $foo );
$bar now contains the following key/value pairs:

 

0 => 0
1 => 'bob'
key => 0
value => 'bob'

 

$foo = array( "Robert" => "Bob", "Seppo" => "Sepi" ); $bar = each( $foo );

 

$bar now contains the following key/value pairs:

 

0 => 'Robert'
1 => 'Bob'
key => 'Robert'
value => 'Bob'

 

Example 2. Traversing $HTTP_POST_VARS with each()

 

echo "Values submitted via POST method:<br>";
while ( list( $key, $val ) = each( $HTTP_POST_VARS ) ) {
echo "$key => $val<br>";
}

 

函数end()
描述:
将数组中的指针移到最后一个
end (array array);
end() advances array 's internal pointer to the last element.

 

函数key()
描述:
从一数组中取出key
mixed key (array array);
key() returns the index element of the current array position.

 

函数ksort()
描述:
以key来排列一数组
Example 1. ksort() example

 

$fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","c"=>"apple");
ksort($fruits);
for(reset($fruits);
$key = key($fruits);
next($fruits)) { echo "fruits[$key] = ".$fruits[$key]." "; }

 

This example would display: fruits[a] = orange fruits[b] = banana fruits[c] = apple fruits[d] = lemon

 

函数list()
描述:
用类似数组的方式去指定一整串变量的值
Example 1. list() example

 

<table> <tr> <th> Employee name</th>
<th>Salary</th> </tr>
<?php $result = mysql($conn, "SELECT id, name, salary FROM employees");
while (list($id, $name, $salary) = mysql_fetch_row($result)) {
print(" <tr> "."<td><a href="info.php3?id=$id">$name</a></td> "."<td>$salary</td> "." </tr> ");
}
?>
</table>

 

函数next()
描述:
将数组的指向指到下一组数据

 


函数pos()
描述:
传回数组的当前的数据

 

函数prev()
描述:
传回数组的前一条的数据

 

函数reset()
描述:
数组的指针指到第一条

 

函数rsort ()
描述:
以倒序方式排列一个数组
Example 1. rsort() example

 

$fruits = array("lemon","orange","banana","apple");
rsort($fruits);
for(reset($fruits); ($key,$value) = each($fruits); ) {
echo "fruits[$key] = ".$value." ";
}

 

This example would display: fruits[0] = orange fruits[1] = lemon fruits[2] = banana fruits[3] = apple The fruits have been sorted in reverse alphabetical order.

 

函数sizeof()
描述:
取得一个数组的大小和元素的数目

 

函数sort()
描述:
排序数组
Example 1. sort() example

 

$fruits = array("lemon","orange","banana","apple");
sort($fruits);
for(reset($fruits);
$key = key($fruits);
next($fruits)) {
echo "fruits[$key] = ".$fruits[$key]." ";
}

 

This example would display: fruits[0] = apple fruits[1] = banana fruits[2] = lemon fruits[3] = orange The fruits have been sorted in alphabetical order.

 

函数uasort()
描述:
以自定义的方式排列一个数组且序列不变。

 


函数uksort()
描述:
以自定义的方式以key排列
This function will sort the keys of an array using a user-supplied comparison function. If the array you wish to sort needs to be sorted by some non-trivial criteria, you should use this function. Example 1. uksort()

[!--infotagslink--]

相关文章

  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • jQuery 2.0.3 源码分析之core(一)整体架构

    拜读一个开源框架,最想学到的就是设计的思想和实现的技巧。废话不多说,jquery这么多年了分析都写烂了,老早以前就拜读过,不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery又给扫一遍我也不会照本宣科的翻译...2014-05-31
  • vue3源码剖析之简单实现方法

    源码的重要性相信不用再多说什么了吧,特别是用Vue 框架的,一般在面试的时候面试官多多少少都会考察源码层面的内容,下面这篇文章主要给大家介绍了关于vue3源码剖析之简单实现的相关资料,需要的朋友可以参考下...2021-09-07
  • Underscore源码分析

    Underscore 是一个 JavaScript 工具库,它提供了一整套函数式编程的实用功能,但是没有扩展任何 JavaScript 内置对象。这篇文章主要介绍了underscore源码分析相关知识,感兴趣的朋友一起学习吧...2016-01-02
  • Android Studio如何查看源码并调试的方法步骤

    这篇文章主要介绍了Android Studio如何查看源码并调试的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-15
  • 个人网站留言页面(前端jQuery编写、后台php读写MySQL)

    这篇文章主要为大家介绍了个人网站的留言页面,前端使用jQuery编写、后台利用php简单读写MySQL数据库,感兴趣的小伙伴们可以参考一下...2016-05-05
  • ASP.NET使用HttpWebRequest读取远程网页源代码

    本文分享了一个使用HttpWebRequest读取远程网页的案例,供大家参考学习。...2021-09-22
  • 用C#获取硬盘序列号,CPU序列号,网卡MAC地址的源码

    privatestring[]GetMoc() { string[]str=newstring[3]; ManagementClassmcCpu=newManagementClass("win32_Processor"); ManagementObjectCollectionmocCpu=mcCpu.GetInstan...2020-06-25
  • php留言板制作教程

    本文章给各位php入门者提供一篇从数据库的创建到最后的读写留言板过程全部分享给各位朋友,有需要了解的可参考参考。 创建一个数据表 代码如下 复制代码...2016-11-25
  • Php经典分页源码

    #********************************************************* #文件名称: function.php #功能描述: 新闻添加修改处理模块 #程序制作:留印(adleyliu) #联系qq :143...2016-11-25
  • php 简单留言板教程三

    好了,其它的都快完了我们就来看看index.php文件显示留方的页面吧. <?php @session_start(); include("global.php"); if(isset($_GET['act']) && $_GET['act'...2016-11-25
  • .NET Core 源码编译的问题解析

    这篇文章主要介绍了.NET Core 源码编译的问题解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-06
  • 一文帮你理解PReact10.5.13源码

    这篇文章主要介绍了一文帮你理解PReact10.5.13源码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-04
  • C# 骑士飞行棋的源码(分享)

    以下是骑士飞行棋的源码,需要的朋友可以拿去用...2020-06-25
  • C语言 MD5的源码实例详解

    这篇文章主要介绍了C语言 MD5的源码实例详解的相关资料,需要的朋友可以参考下...2020-04-25
  • 使用C#获取网页HTML源码的例子

    这篇文章主要介绍了使用C#获取网页HTML源码的例子,考虑了区分GB2312和UTF-8编码,需要的朋友可以参考下...2020-06-25
  • IDEA2020.1构建Spring5.2.x源码的方法

    这篇文章主要介绍了IDEA2020.1构建Spring5.2.x源码的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-09
  • C#中使用快速排序按文件创建时间将文件排序的源码

    快速排序类 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.We...2020-06-25
  • Python优秀开源项目Rich源码解析的流程分析

    这篇文章主要介绍了Python优秀开源项目Rich源码解析,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-06
  • nGrinder性能工具源码安装部署过程

    nGrinder是NHN公司用Java语言开发的一款的基于Grinder开发的开源B/S Web性能测试平台,具有友好简洁的用户界面和分布式测试功能,本文给大家分享nGrinder性能工具源码安装部署过程,一起看看吧...2021-06-01