建站历程——任投票 toupiao.org
刘力瑞 / 2015-10-31 / 电脑技术 / 阅读量 1051

点此进入该站

一直想尝试着弄个可以实现注册登录,并有有趣功能的网站,最后决定从投票网站开始,现在专注于投票这一个功能的成功网站不多,我也只是想试着做一下,便有了网站——任投票 toupiao.org

  • 2015年5月5日:注册了这个网站域名:poll.ren,本来想弄一个其他的后缀,但好的都没了,poll.ren任投票也不错~
  • 2015年7月某日:刚刚高考完,放假尝试着弄了一下,学了些php,在freedom.zone上通过php连接数据库,实现了注册登录,做了一个班级的毕业去向表,登录后可查看他人信息或修改个人信息,界面简陋但很有成就感~
  • 2015年9月某日:决定着手尝试任投票,做出来了,实现了注册登录和显示投票,但界面太简陋,决定先找个能用的开源模板,然后改后台的部分。
  • 2015年10月13日:9月21日重新申请备案,把甘肃改山东。山东很慢,今天才好。。
  • 2015年10月某日:找到一个喜欢的简洁模板,然而当天就发现自己学的还差很多,没有js知识,无法实现那个模板的表单值传递
  • 2015年10月19日:只好网上寻人帮助
  • 2015年10月30日:费了很大功夫。。值传递问题终于解决!!
  • 2015年10月31日:用户注册登录及个人主页修改完成!
  • 2015年11月2日:修复完成邀请码问题!
  • 2015年11月4日:在修复资料修改时再次遇到与登录类似问题,决定自己先去抽时间学习javascript,再继续。。
  • 2015年11月23日:又看了看程序,发现网上找的人都是乱改,只要功能实现就行,重新整了下反馈和登录,效果都好了可是每次都验证密码错误,还是有点问题,不过这个能解决,网站后面应该没有太大问题了!
  • 2015年12月8日:实在搞不好提交后的数据接收,果断放弃使用别人的样式,把很早以前的代码拿了出来重新贴上,修了下,虽然不美观,但代码是什么,功能是什么自己都清楚,感觉比改别人代码要很多。
  • 2015年12月9日:继续修改老代码,实现推荐码功能,修了一些小bug
  • 2015年12月12日:优化了一下页面,把查看投票页大体实现,但还不能投票
  • 2016年1月1日:元旦前实现了全部功能!
  • 2016年1月2日——2016年3月9日:同学说界面太单调,从网上找UI前台设计,花了大价钱修改。这下又要重写后台了。
  • 2016年3月9日:改完后内容繁琐,好多之前用的现在不需要的语句没有删去,开始对前台代码简单修改
  • 2016年3月10日:从自己的主页到别人的主页还有很多问题,今天修好了。
  • 2016年3月11日:给个人主页加一个设置是否资料可见的按钮。
  • 2016年3月12日:加入按钮功能,以及其与数据库的连接。
  • 2016年3月14日:发现注册还有问题,进行修复
  • 2016年3月16日:修改投票时的显示,网上找了加载图标点投票时变成这个图标
  • 2016年3月17日:图书馆借mysql书写了一些触发器,改了部分后台数据库代码。被投票的ajax纠结了一下午一晚上,不过总算解决了!剩下时间改了个下拉菜单
  • 2016年3月18日:投票功能修改完善
  • 2016年3月19日:做一个查看单个投票的页面,主要可以看评论,修改了投票页面,把背景图片去了,加了border等一些元素
  • 2016年3月27日:去图书馆自习,自习到一半又想写写网站,修改了一下投票页,写了一个showclass的通用php方法,这样以后加投票分类稍微方便点,把所有标签初始化放到主css,这样比较规范而且以前登录后昵称下有白条的小bug也没了。
  • 2016年3月28日:写了搜索页面的大体框架,又修改了一些整体的css
  • 2016年3月29日:在别的宿舍的大屏笔记本上打开网站发现有些错位,有些显示图片后只有左侧有图,右侧被蓝色填充,给每个背景加限定宽度的max-width后,把两边剩下的区域设置为淡蓝色,布局恢复正常
  • 2016年3月31日:实现了搜索页面,但目前只能通过数字id搜索,因为觉得文字匹配查询时间会很长,以后看看有没有什么优化的办法。修改了一些文字内容,以及忘记密码刷新重复发送的漏洞,重新激活邮件的漏洞。
  • 2016年4月13日:接受post的各种submit.php发现了好多后台未进行二次验证的大bug,学了java传post给php,才清楚绕过前台很简单,赶紧加上了所有后台二次验证。
  • 2016年4月14日:本来想用ajax做分页,但发现get传递值反而更方便,实现了投票页的分页功能
  • 2016年4月17日:发现了美图秀秀提供api,非常好用也非常方便,果断选用,实现前台兼容显示
  • 2016年4月26日:前几天同学认识的学长看了下网站,后台验证太少漏洞还是太多,又各种修修补补。顺便修改了下前台不规范多余的div代码
  • 2016年4月28日:开始设计评论模板,写好点击后出现评论的下拉菜单,以及二次点击的情况
  • 2016年5月8日:美化头像修改功能,修改初始默认头像。稍微改了一下投票页,三部分采用了display:table的模式,两侧的投票人数和投票相关信息得以垂直居中(diplay:table table-row table-cell非常好用,可惜有些浏览器不支持)
  • 2016年5月9日:继续美化投票页,使投票选项较整齐显示,但显示自己所投选项的颜色样式觉得怎么都不好
  • 2016年5月10日:投票排序功能实现
  • 2016年5月11日:初步实现等级功能,分了21个等级~但经验增加还没测试,不知道有没有什么问题。
  • 2016年5月15日:加入我的等级页面,待进一步美化
  • 2016年5月16日:修改看他人主页时可直接查看投票结果的问题
  • 2016年5月19日:后台投票分类整合完成,修复主页头像显示错误,等级显示错误的问题
  • 2016年5月24-26日:设计投票评论样式并完成。
  • 2016年5月30日:完成评论内容从数据库的读取与显示
  • 2016年6月4日:实现第一个评论框的内部功能,实现@用户id显示昵称并链接到其个人主页的功能,想了半天方法,最终决定用户@时读取昵称,然后@用户id#用户昵称#如此保存,到前台显示时再进行组织筛选
  • 2016年7月18日:好久没动网站了,改了下指定投票页的标题和关键词,主要是动态的,不知道对收录有没有帮助。还把投票页面由名称poll改为list
  • 2016年8月29日:完成修改横版前台代码,美化简化
  • 2016年10月19日:修改@media判断,避免手机端自动随意转换

建站期间遇到的各种问题及解决方法

  • 验证码如何自动改为大写?

用样式表即可搞定。
<input style="text-transform: uppercase;" name="T1" size="20" type="text" />

  • 如何生成邀请码?

打算将每个id提出每个位的数字,再通过不同算法生成对应的ASCII码,转换利用php的chr和ord函数
例子:

使用chr()函数和ord()函数进行字符串与ASCII码之间的转换,程序代码如下:
$str1=chr(88);
echo $str1; //返回值为X
echo "t";
$str2=ord('S');
echo $str2; //返回值为83
?>
运行结果:X 83

  • php查询数据库记录数?

函数mysql_num_rows(执行结果语句)便可实现

  • 判断是否登录,没登录则跳转?

if($_SESSION['user'] == ""){
echo "<script language="JavaScript">

location='http://www.poll.ren/login';
</script>";

  • 设置mysql自动更新初始值?
    > alter table table_name AUTO_INCREMENT=n</blockquote>
  • mysql_query($sql)无法成功?
    > 当$sql只包含一句mysql语句,就好了。多了会报错</blockquote>
  • 如何在mysql原有数据上修改?

增加字符串用update table_name set XXX=concat(XXX,YYY) where ZZZZZ
数字增加update table_name set XXX=XXX+1 where ZZZZZ

  • 2015年11月19日:能否删除数据库token列精简数据库?

可以,每次通过特定公式计算出verify的值,然后与传入值判断,便可免掉每次从数据库查询的麻烦。

  • 2015年11月23日:如何使图片具有链接效果?

小问题,直接在图片的img标签外套上a标签就好。。。居然没想到!!

  • 2015年12月9日:如何是table表格居中?

直接整体套一个center就好!

  • 2015年12月12日:如何是避免多次提交?

先写一个javascript:<script language="javascript">
function submitonce(registration){

if(document.all||document.getElementById){
for(i=0;i<registration.length;i++){
var tempobj=registration.elements[i];
if(tempobj.type.toLowerCase()=="submit"||tempobj.type.toLowerCase()=="reset")
tempobj.disabled=true;
}
}
}
</script>

然后表单这么引入:<form name="registration" action="submit.php" method="post" onSubmit="submitonce(this)">
就可以了!

  • 2015年12月12日:将年月日时分的时间在php中显示为年月日,去掉时和分?

echo date("Y-m-d",strtotime("2014-05-05 16:05:32"));用这句php就行!

  • 2015年12月14日:如何设置导航栏点击后改变class?

百度了半天没收获,后面想到了一种方法,用php判断再输出就可以轻松实现!!

  • 2015年12月21日:jquery后台提交后还会自动刷新?

把submit按钮改为button就好了,submit还会自己再提交一遍

  • 2015年12月24日:mysql如何复制内容到结构相同的表?

1、表结构相同的表,且在同一数据库(如,table1,table2)
sql:insert into table1 select * from table2 (完全复制)

insert into table1 select distinct * from table2(不复制重复纪录)
insert into table1 select top 5 * from table2 搜索(前五条纪录)
2、不在同一数据库中(如,db1 table1,db2 table2)
sql:insert into db1..table1 select * from db2..table2 (完全复制)
insert into db1..table1 select distinct * from db2table2(不复制重复纪录)
insert into tdb1..able1 select top 5 * from db2table2 (前五条纪录)

  • php连接字符串无法实现?

习惯了+=,在php中,字符串是.=

  • 2016年3月10日:之前页面不居中,限定了宽度为1440px,去掉后手机又错位?

可以用css的@media 限定,对分辨率较小的单独加width:1440px;

  • 2016年3月11日:鼠标移到元素后,如何变化?

修改cursor的样式

  • 2016年3月11日:图片按钮点击后如何变化?

将所有按钮样式保存在一个图中,用margin-top=-10px;的方法设置显示的区域,其他区域用overflow:hidden;隐藏,然后用jquery点击时移动图片的显示区域。

  • 2016年3月11日:十进制数如何转化为二进制?

string decbin(int),这样方便保存用户资料是否对外公开。(二进制转十进制:int bindec(string))

  • 2016年3月11日:在数据库里存了一个二进制bit数据,但读取不到?

数据结构:create table an_bit (id bit(8));
插入二进制数据:insert into an_bit values (b’11′);(11为二进制数)

插入十进制数据:insert into an_bit values (11);(11为十进制)
读取二进制数据:select bin(id+0) from an_bit;
读取十进制数据:select id+0 from an_bit;
这样什么也读不到:select * from an_bit;(我最初这样写的,找错误找了好久)

  • 2016年3月14日:注册第一个页面完成后,我用.html()改变了内容,又加载了填写详细资料,但这一页的按钮以及日期js特效都消失了?

在一个测试页面写入html()新改变的内容,js加载了,原来是js只绑定第一次,那就在第一个页面加入隐藏的第二个页面的内容,然后.html()改变换成.css('display','inline')进行显示,就可以一开始带着js加载了。

  • 2016年3月17日:如何同时修改不同记录行的数据?

代码:UPDATE mytable
SET myfield = CASE id

WHEN 1 THEN 'value'
WHEN 2 THEN 'value'
WHEN 3 THEN 'value'
END
WHERE id IN (1,2,3)

  • 2016年3月17日:ajax始终执行不了success?

传入的submit.php含有一句select数据库查询,可能传过来输出了什么,去掉这句就好了!

  • 2016年3月19日:里面的div怎么撑开外面的div让高度自适应?

在浮动的容器后面,父容器结束之前加入一个div
代码代码如下:

<div class="fuji"><ul><li>内容1</li><li>内容1</li>;</ul><div class="clearfloat"></div></div>
.clearfloat{clear:both;height:0;line-height: 0px;}

  • 2016年3月31日:div里英文不自动换行?

css代码中加上这行:word-wrap:break-word; 即可

  • 2016年3月31日:如何用php设置cookie,为什么有警告提醒?

设置cookie:setcookie('mycookie','value');
获取cookie:$_COOKIE['mycookie']。

和session开启一样,cookie的设置也要放在html头前,并且不能有输出,否则会有警告。

  • 2016年4月13日:mysql语句正确,总是提示mysql_fetch_row()提供的资源错误?

太疏忽,忘记语句mysql_select_db()选择数据库!!

  • 2016年5月8日:iframe中使用jquery如何改变父页面的标签属性?

1、在iframe中查找父页面元素的方法:
$('#id', window.parent.document)

2、在iframe中调用父页面中定义的方法和变量:
parent.method
parent.value

  • 用户修改头像覆盖原图后,如何用jquery刷新头像?

修改src,在src后加?+Math.random(),这样可以实现链接变化使浏览器重新载入图片

  • strlen()函数判断中文不是按一个一个算?

不是,如果是utf8,那么会按三位算

  • 2016年5月26日:jquery用完after或append添加的新元素无法绑定事件?

其实很简单,把需要绑定的事件整体移到append或after方法后,加新元素的同时便会绑定事件否则事件会先加载找不到元素

  • 2016年6月18日:php的preg_match函数只能匹配一次?

还有一个preg_match_all函数,由于支持同时多个匹配模式,所以结果为二维数组

  • 2016年7月18日:重置mysql_fetch_array的指针,重新使用结果资源?

有个函数mysql_data_seek(改变指针的资源,0),0为重置指针到开头

  • 2016年8月23日:jquery生成的html标签如何也绑定事件?

$('body').on('click','(jquery选择器)',function),这样既可

  • 2016年9月12日:json_encode输出的数据用json_decode返回null?

返回应该是个对象,需要分配个变量然后$a->这样调用

  • 2016年9月17日:使用pdo创建增删改查方法,总是500错误?

创建一个测试页面挨个检查,结果发现方法调用了方法外的变量,方法传递参数时,前几个参数必填,不能什么也不留,之前觉得定义方法给个默认值就好,结果发现在前面的还是必须要传值

  • 2016年10月16日:使用百分比布局,带border后会自动加长度导致换行?

设置:box-sizing: border-box便可解决

  • 2016年10月19日:max-device-aspect-ratio设置为1,css无法加载?

要想比例为1,需写1/1

  • 2016年10月26日:div如何不用float显示在同一行?

inline-block是个好东西!

  • 2016年11月14日:rewrite如何带上get值

%{QUERY_STRING}这个很棒!直接加上&%{QUERY_STRING}即可!

  • 2017年1月9日:利用letter-spacing设置字间距后无法居中?

利用text-indent设置相同大小即可修正

  • 2017年2月13日:php首次设置cookie无效?

整个php文件执行完毕才会设置完成cookie

  • 2017年3月9日:jquery slide滑动会出现闪烁?

在网上搜了很多,有的说改html头规范,有的用animate,有的说别用position,都没什么办法,我是用了position,但以前没有这种情况,所以解决办法一定是有的。我便自己通过浏览器逐个标签删除查询错误,在一个relative下的正常位置元素,没有规定宽度且用了padding边距,把padding换为百分比的margin,再将剩下的宽度百分比设置为这个元素的width,便可解决。

  • 2017年6月12日:inline-block 50%以后还是会换行?

注意两个inline-block的元素间在代码中别出现换行就可以

  • 2017年9月16日:on冒泡绑定click事件,一次点击两次触发?

该事件在另一个on click内部,应通过.off('click','.test').on('click','.test')解除后绑定

1 + 2 =
快来做第一个评论的人吧~