Archives for :

第931天:批量修改SQL字段的方法

星期二 晴 1~10℃

批量修改 SQL 字段的方法

昨天发邮件问 Ryan:

关于批量修改数据库字段
例如要把 表dede_feedback 的 username字段 的所有“堂本静”改成“flath”,怎么样批量修改

Ryan 的回复:

update dede_feedback set username=’flath’ where username=’堂本静’

得了这么一条语句,可是我不知道怎么执行 SQL 语句。先在本地摸索一下,用 Navicat Lite 修改成功。

打开 Navicat Lite,连接数据库 -> 左窗相应数据库下点击“查询”-> 右窗“新建查询”-> 把 Ryan 提供的语句复制到查询编辑器里 -> 运行。

对于“查询”这个词有点感冒,原来查询编辑器不仅仅只是用来查询的。这大概是 SQL 的专业术语吧,一般人不理解。


友吧今天

细节修改:

  1. 首页推荐圈子排序规则改为按成员数。
  2. 微调个人资料页的三级导航,使更容易被用户注意到。
  3. 三戒反应说“别等失去了才懂珍惜”改成“别等失去了才懂得珍惜”会顺一点。刚开始的时候也是有个“得”的,后来去掉了,看来还是有个“得”比较大众。
  4. 其他微细节。

问题修正:

  1. 心情页如果登录用户没有发表心情,头像 uid 调用不到(把 $dv[uid] 改成 $space[uid])。
  2. 登录后首页顶部有些用户昵称不显示的问题(缺少原network.php页面的“//空间被锁定”一段代码)。
  3. 阅读书签右侧头像链接(原先使用假静态,现在改成原始地址)。
  4. 修改前天发布时提到的“统一用户名和昵称产生的一个遗留问题”,批量修改表 dede_feedback 的两个字段 username 和 mid。

第930天:神神忽现,修改细节

星期一 多云转阴转小雨转阴 3~14℃

神神忽现

以前九天的上司,很久没联系了,今天猛的就是一句“恭喜新版上线”。真是应了他的网名,神神,才刚上线就知道了,本来准备完善好细节再和大家说的。

神神和老马一起开了家文化公司。这公司提供的服务看起来正适合我所在的公司,所以介绍给公司行政,行政看了还挺有意向。


友吧今天

1、昨晚雨寒新注册一个用户,发现居然就直接有头像了。此前也发现过这种现象,还以为是 uch 的头像体系命名规则有问题,今天终于知道原因了:是因为上次硬盘坏掉,当时数据丢失不少,不过文件还在,所以导致一些新注册的用户用了以前上传过的头像。例如以前注册的用户数是 666,因为数据丢失,导致用户数只剩下 555,当注册了一个新用户 556 后,正好以前 556 的用户上传过头像,那么新注册的用户就等于直接有头像了。依此类推。今天删除了残留的头像文件(发现就只剩一个了)。

2、邀请农叔注册。等把页面完善后,就要开始和精瑞的合作之旅了。

3、先修改几个容易修改的细节问题。要改的地方很多,按记录下来的一个个改,预计还得改一个月。

星期日 晴转少云 7~20℃

发布友吧运动v1

一周前定在今天上午发布,今天如期进行。还有两个未完成页面影响到浏览(“活动发布/修改/管理”、“个人中心好友列表”),如果先完成这两页可能要到下午才能发布,然而下午的网速会比上午慢很多,所以选择上午先发布,之后再做这两个页。

由于今天要早起,所以昨晚没敢晚睡,11 点关电脑。今天早上和平常上班一样 7 点钟起来。因为省去了在上班路上的时间,所以 7 点半就坐到了电脑前。

刚开机跳出 flashplayer 的升级对话框。早上的网速实在快,没一会就下载完成。

一边啃面包一边找此前在本地升级 uch2.0 记录的日志

打开“今天.rtf”,实时记录发布过程。

啃完面包,开工。快 8 点了。

FTP 和远程桌面都连接正常。

1、下载昨晚自动备份的数据包和站点文件包。突然想起上次在测试服务器上升级 uch2.0 的日志,找出来,两篇日志一起对照。

2、取消本地 hosts 指向。

3、升级 uc1.5.2。

4、做好升级前的所有准备工作(对照上面提到的两篇日志进行),开始升级 uch2.0。大约三分钟后完成。(8:45)

5、上传新模板,以及其他扩展过的文件(配置文件除外)。(9:00)

6、登录 uc 后台应用列表修改“应用的主 URL”。通信成功。

7、登录 uch 后台选择新的站点模板。修改圈子和活动分类。开放注册。(9:25,网速有点变慢了)

8、发短信给团队成员,说已完成发布,准备今晚开团队会议,主要是大家一起找一下需要修改的地方。


开第三次团队网络例会

这个例会本来是上周末开的,因为当时定在今天发布新版,所在就延期到今晚。

本次例会主要是测试新版本,大家一起查找问题和不足,我统一记录下来。


两件高兴事

1、发布友吧运动v1。前后历时一年,终于发布了。宣告转型。

2、昨天收到工行发来的短信,说11月11日申购的嘉实主题新动力已经成功认购。此前只听说购买新发行的股票中签率很低,原来购买新发行的基金也不太容易。


友吧今天

  • 发布友吧运动v1。
  • 更改友吧阅读所有含“home”的链接。计划在本月内完成友吧阅读v4.2(皮肤更换)。
  • 发现两个问题:
    1、前段时间统一用户名和昵称,今天发现一个遗留问题,这些改过用户名的用户在 dede 的评论,其头像链接不能取到 uid。已经找到原因,此前改 dede 表时只改了 dede_member,没有改 dede_feedback。
    2、发起话题的插入音/视频的问题。以前 Ryan 扩展过 uch1.5 版本的,现在需要对照以前扩展过的文件再改一下。

星期六 晴 8~18℃

去医院(25) 骨伤科

  • 独一味胶囊(3瓶)
  • 通络开痹片(5盒)

友吧今天

完成嵌套:发起/编辑话题。

星期五 晴 6~18℃

javascript 返回上一页不刷新的方法

onclick="history.go(-1);"

如果把“返回上一页”的事件写在 <form> 标签里,用户点击返回上一页修改时,会发现之前填写的数据被清空了。

解决办法是把“返回上一页”写在 <form> 标签的外面,如果考虑到对齐问题,可以用 position:absolute 定位来解决。

2012-7-24 更新

如果要把“返回上一页”写在 form 里,不要使用 input,例如可以用 <a> 链接。


友吧今天

完成嵌套:圈子创建、圈子设置、圈子成员管理、邀请好友加入圈子。

星期四 昨夜小雨,今天晴(天空看起来被雨洗得很干净) 8~16℃

UCH2.0 显示 ajax 对话框的“开关”,方便调试页面

在 header.htm 有一句:

<div id="ajaxwaitid"></div>

这个是显示 ajax 对话框的 div。

以“加入该群组”为例:

在网速正常时,点击“加入该群组”,会弹出一个 ajax 对话框,但是在网速慢的时候,会直接跳转到一个新的网页。

在本地调试时,因为不会有网速不正常的现象,但是为了调试“网速慢”时出现的情况,可以把 header.htm 里的这行代码删除,就相当于是“网速慢”的情形了。


UCH2.0 加入退出群组的 ajax hack

在 IE / FF / Opera 下都正常,唯独在 chrome 下不正常:

在“加入”或者“退出”群组时,需要点击两次,第一次点击出现 ajax 对话框,点击按钮后又会跳到一个新的页面,再次点击按钮才能完成。

目前没有解决这个 hack,可能其他一些页面弹出的 ajax 对话框在 chrome 下也会有不兼容的现象。


链接去掉虚框(虚线)

同事问起,找了两个方法:

单个链接:

<a href="#@" onfocus="this.blur();"><img src="" />test</a>

批量链接,除 FF 外,其他几个浏览器都兼容。

<style>
a { pickbar:expression(this.hideFocus=true) }
</style>
<a href="#@"><img src="" />test</a>

2010-12-3 更新,applewar 分享的方法,兼容 IE / FF / chrome / Opera:

a{outline:none;blr:expression(this.onFocus=this.blur());}


友吧今天

嵌套页面:创建圈子、圈子设置。

处理一些细节。

星期三 大雾(中午有点阳光) 9~16℃

UCH2.0 随便看看使用 ajaxget 方法随机刷新头像

刚开始直接用:

function reloadHead() {
 ajaxget(‘network.php’, ‘headPics’);
}

没有成功,后来看 script_ajax.js,看到这一行:

var url = url + ‘&inajax=1&ajaxtarget=’ + showid;

于是试一下在地址后面加个参数:

function reloadHead() {
 ajaxget(‘network.php?uid=0′, ‘headPics’);
}

可以了。

事实上只要在地址后加个“?”就可以,ajaxget 函数在变量 url 后面加了参数,如果不用“?”连接的话,就变成直接用“&”连接,地址就错误了。

举个例子

这样可以正常访问:

http://www.zhugao.net/index.html?

但是这样不行:

http://www.zhugao.net/index.html&

以下是 uch2.0 随便看看使用 ajaxget 方法随机刷新头像

模板 network.htm

<!–{if !empty($_SGLOBAL[inajax])}–>
<!–{loop $spaceRandom $value}–>
 <li>
  <div class="d_avatar avatar48"><a href="space.php?uid=$value[uid]" title="{$_SN[$value[uid]]}" target="_blank"><!–{avatar($value[uid],small)}–></a></div>
  <p><a href="space.php?uid=$value[uid]" target="_blank">{$_SN[$value[uid]]}</a></p>
  <p>$value[resideprovince] $value[residecity]</p>
  <p>$value[friendnum] 位好友</p>
 </li>
<!–{/loop}–>
<!–{else}–>
(把原来的所有代码放到这里面,再加上下面这段)
<div style="cursor:pointer" onmouseover="this.style.textDecoration=’underline’" onmouseout="this.style.textDecoration=’none’" onclick="reloadHead()">随机刷新</div>
<ul class="s_clear" id="headPics">
<!–{loop $spacelist $value}–>
 <li>
  <div class="d_avatar avatar48"><a href="space.php?uid=$value[uid]" title="{$_SN[$value[uid]]}" target="_blank"><!–{avatar($value[uid],small)}–></a></div>
  <p><a href="space.php?uid=$value[uid]" target="_blank">{$_SN[$value[uid]]}</a></p>
  <p>$value[resideprovince] $value[residecity]</p>
  <p>$value[friendnum] 位好友</p>
 </li>
<!–{/loop}–>
</ul>
<script>
function reloadHead() {
 ajaxget(‘network.php?uid=0′, ‘headPics’);
}
</script>
<!–{/if}–>

network.php 修改

//是否公开
if(empty($_SCONFIG['networkpublic'])) {
 checklogin();//需要登录
}

下方增加:

$cachefile = S_ROOT.’./data/cache_index.txt’;
$cachetime = @filemtime($cachefile);
$spacelist = $spaceRandom = array();
//(页面加载时调用)每隔900秒更新一次缓存,避免每次加载页面都读取数据库
if($_SGLOBAL['timestamp'] – $cachetime > 900) {
 $query = $_SGLOBAL['db']->query("SELECT s.*, sf.resideprovince, sf.residecity
  FROM ".tname(‘space’)." s
  LEFT JOIN ".tname(‘spacefield’)." sf ON sf.uid=s.uid
  ORDER BY s.friendnum DESC");
 while ($value = $_SGLOBAL['db']->fetch_array($query)) {
  $spacelist[] = $value;
 }
 $spacelist = sarray_rand($spacelist, 15);
 swritefile($cachefile, serialize($spacelist));
} else {
 $spacelist = unserialize(sreadfile($cachefile));
}
//ajax随机刷新
$query = $_SGLOBAL['db']->query("SELECT s.*, sf.resideprovince, sf.residecity
 FROM ".tname(‘space’)." s
 LEFT JOIN ".tname(‘spacefield’)." sf ON sf.uid=s.uid
 ORDER BY s.friendnum DESC");
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
 $spaceRandom[] = $value;
}
$spaceRandom = sarray_rand($spaceRandom, 15);
//实名
foreach ($spacelist as $key => $value) {
 realname_set($value['uid'], $value['username'], $value['name'], $value['namestatus']);
}
foreach ($spaceRandom as $key => $value) {
 realname_set($value['uid'], $value['username'], $value['name'], $value['namestatus']);
}
realname_get();


UCH2.0 是通过 style.css 来判断站点模板

昨天把模板目录下原始的 style.css 移走(不需要了),今天发现在后台站点设置的“站点模板”里缺少了新增的模板,于是想到可能是这个 style.css 的原因。在模板目录下新建一个 .txt 文件,更名为 style.css,刷新试试,果然是这个原因。


大雾

昨晚十点左右发现外面好大雾,大概当时的能见度不足 200 米。早上起来雾还未散,不过比不上昨晚看到的阵势。到公司后看到新闻《大雾突袭浙江 高速、航空交通“瘫痪”》,下面是新闻中的一段描述:

晚上10点30分,在从高速彭埠入口赶回城里的途中,坐在副驾驶室的记者也亲身体验到了大雾的“杀伤性”,透过前挡风玻璃,最多只能看到大约三四米距离的车辆和物体,若遇到前方路灯不够明亮的地方,车子就有如被大雾“吃”了一样,整个埋没进去。

到下班仍然未散。


友吧今天

1、网站首页嵌套完成。

2、完成零碎页面:信息提示页、登录页、注册页。

星期二 小雨转阴 10~16℃

UCH 2.0 群组名改为可更改

默认的,群主不可以更改群组名,现在改为可更改。

第一步

cp_mtag.php

$setarr['joinperm'] = $field['manualmember']?intval($_POST['joinperm']):0;

上方加一行

$setarr['tagname'] = getstr($_POST['tagname'], 80, 1, 1, 1, 1);

第二步

模板 cp_mtag.htm

<th width="100">群组名</th>
<td>$mtag[tagname]</td>

改为

<th width="100">群组名</th>
<td><input id="tagname" type="text" name="tagname" value="$mtag[tagname]" size="80" class="t_input" /></td>


SQL 关联表:SQL "WHERE"、"LEFT JOIN"

参考:WHERE 子句LEFT JOIN 关键字

现学现卖:UCH 2.0 随便看看调用“喜欢的运动”

第一步

index.php

原:

//20位热门用户
$query = $_SGLOBAL['db']->query("SELECT s.*, sf.resideprovince, sf.residecity
 FROM ".tname(‘space’)." s
 LEFT JOIN ".tname(‘spacefield’)." sf ON sf.uid=s.uid
 ORDER BY s.friendnum DESC LIMIT 0,20");

增加显示“喜欢的运动”:

//20位热门用户
$query = $_SGLOBAL['db']->query("SELECT s.*, sf.resideprovince, sf.residecity, si.title, si.friend
 FROM ".tname(‘space’)." s
 LEFT JOIN ".tname(‘spacefield’)." sf ON sf.uid=s.uid
 LEFT JOIN ".tname(‘spaceinfo’)." si ON si.uid=s.uid WHERE subtype=’sport’
 ORDER BY s.friendnum DESC LIMIT 0,20");

第二步

模板 index.htm

<!–{loop $spacelist $value}–>
 <li>
  <div class="d_avatar avatar48"><a href="space.php?uid=$value[uid]" title="{$_SN[$value[uid]]}" target="_blank"><!–{avatar($value[uid],small)}–></a></div>
  <p><a href="space.php?uid=$value[uid]" target="_blank">{$_SN[$value[uid]]}</a></p>
  <p>$value[resideprovince] $value[residecity]</p>
  <p>$value[friendnum] 位好友</p>
 </li>
<!–{/loop}–>

改,(显示条件:用户设置了“喜欢的运动”,并且隐私条件设置为“全用户可见”)

<!–{loop $spacelist $value}–>
 <!–{if $value[title] && $value[friend]==0}–>
 <li>
  <div class="d_avatar avatar48"><a href="space.php?uid=$value[uid]" title="{$_SN[$value[uid]]}" target="_blank"><!–{avatar($value[uid],small)}–></a></div>
  <p><a href="space.php?uid=$value[uid]" target="_blank">{$_SN[$value[uid]]}</a></p>
  <p>$value[resideprovince] $value[residecity]</p>
  <p>$value[friendnum] 位好友</p>
  <p>$value[title]</p>
 </li>
 <!–{/if}–>
<!–{/loop}–>


友吧今天

1、昨晚列出剩下的未完成页面,还有十来个,努力在这周完成。局部细节可以上线后再处理,不影响使用。

2、继续嵌套首页,扩展处理遇到的技术问题。

星期一 阴转小雨 9~17℃

UCH 2.0 随便看看增加推荐群组

在 index.php 或 source/network.php 增加,其中 $mtagcount 是群组总数,使用了随机显示:

//推荐群组
$mtaglist = array();
$mtagcount = $_SGLOBAL['db']->result($_SGLOBAL['db']->query("SELECT COUNT(*) FROM ".tname(‘mtag’)), 0);
if($mtagcount) {
 $query = $_SGLOBAL['db']->query("SELECT tagid,tagname,pic,recommend FROM ".tname(‘mtag’)." WHERE recommend=1");
 while ($value = $_SGLOBAL['db']->fetch_array($query)) {
  $mtaglist[] = $value;
 }
 $mtaglist = sarray_rand($mtaglist, 6);
}

模板页 index.htm / network.htm

<h2>已有 $mtagcount 个群组</h2>
<div class="i_mtag">
 <ul>
 <!–{loop $mtaglist $value}–>
  <li>
   <a href="space.php?do=mtag&tagid=$value[tagid]"><img src="$value[pic]" class="mainBg" /></a>
   <p><a href="space.php?do=mtag&tagid=$value[tagid]">$value[tagname]</a></p>
  </li>
 <!–{/loop}–>
 </ul>
</div>


邻居房间进小偷了

昨晚去外面买外卖打包回来没多久,听到房门外有声音,后来房东来了,听情形是邻居遭贼了,被偷的是放在床上的笔记本和游戏机。

没多久,楼上有一户也说丢东西了。

然后是保安来了,然后听到邻居打电话报警。

再后来听到邻居的哭声。丢东西的两户都是女孩子。

我一天都在家,并未听到外面有什么动静。五点半左右出门去买饭,不到六点左右回来。听他们谈话的情形,正是在五点半左右发生的。有人说看到楼下有两个男的鬼鬼祟祟。难道小偷瞄准我出门了就下手?以前短时间出门的话会想:“不要紧,反正就这几分钟,没事。”然后窗户和后门可能就不关了,现在不敢这么想了,尤其是年底小偷最猖獗的时候。

想起前不久记的“关好门窗,防止小偷”。出门切记要关好门窗,就连晚上睡觉都要小心。这次事件实在离自己太近,没准哪天就轮到自己了。昨晚把相机之类的易偷物品都放到了不太明显的地方。

进入二十一世纪后,贫富差距和失业率越来越大,住在中国的哪旮旯还能有些许的安全感呢?


友吧今天

嵌套网站首页。此前嵌套了一半,因为遇到技术问题,所以暂时搁置。现在内页套好了再回过来套首页,套内页时稍稍学了点 php 知识,此前遇到的技术问题也解决了。

第922天:嵌套“最喜欢的运动”

星期日 阴 8~16℃

友吧今天

把个人资料页里“喜欢的运动”改成“最喜欢的运动”,输入框改成单选项,用 js 实现传值。