JavaScript基本对象
[ 2005/03/16 22:29 | by ipaddr ]
原文地址:http://www-900.ibm.com/developerWorks/cn/lotus/lo-jsobj/index.shtml
亲密接触单选按钮、复选框和JavaScript的一些有趣的事情
>>>>
亲密接触单选按钮、复选框和JavaScript的一些有趣的事情
>>>>
如果是虚拟主机提供商,需要提高PHP的安全,可如下:
修改php.ini
safe_mode=On
open_basedir=/var/www/html
display_errors=Off
disable_function=phpinfo,get_cfg_var,popen,exec,passthru,system,phpversion
expose_php = Off
allow_url_fopen = Off
log_errors=
>>>>>>>>>>>>>
修改php.ini
safe_mode=On
open_basedir=/var/www/html
display_errors=Off
disable_function=phpinfo,get_cfg_var,popen,exec,passthru,system,phpversion
expose_php = Off
allow_url_fopen = Off
log_errors=
>>>>>>>>>>>>>
无法定位程序输入点RestoreLastError
[ 2005/01/27 22:31 | by ipaddr ]
有些程序,在XP下开发的,在2000或以下版本运行时,总是报错,提示:
"无法定位程序输入点RestoreLastError于动态链接库kernel32.dll上"
此类问题的原因,主要是因为在XP上的Kernel32.dll上面有RestoreLastError函数,而在2000上面的Kernel32.dll没有这个函数。
可以如下解决:
(一直漂 原创,转载请说明)
用二进制编辑器,把报错的程序的RestoreLastError改成SetLastError。
步骤如下:
假如启动aspbiz.exe报错,
1.用UltraEdit打开aspbiz.exe
2.找到RestoreLastError字符串,将其改为:SetLastError,并且,后面四位补上0x00,就是十六进制的0
3.存盘,退出
4.OK!
>>>>>>>>>>>>>>>>>>>>>>>>
"无法定位程序输入点RestoreLastError于动态链接库kernel32.dll上"
此类问题的原因,主要是因为在XP上的Kernel32.dll上面有RestoreLastError函数,而在2000上面的Kernel32.dll没有这个函数。
可以如下解决:
(一直漂 原创,转载请说明)
用二进制编辑器,把报错的程序的RestoreLastError改成SetLastError。
步骤如下:
假如启动aspbiz.exe报错,
1.用UltraEdit打开aspbiz.exe
2.找到RestoreLastError字符串,将其改为:SetLastError,并且,后面四位补上0x00,就是十六进制的0
3.存盘,退出
4.OK!
>>>>>>>>>>>>>>>>>>>>>>>>
Oracle在Linux下的C开发
[ 2005/01/19 22:32 | by ipaddr ]
1.首先,要安装Oracle客户端(或在Linux下安装好Oracle)
2.安装Libsqlora8库函数:
一般Oracle的C开发,是用OCI,C++开发,是用OCCI。安装好Oracle客户端后,就可以用OCI开发了。
Libsqlora8库函数是GNU/Linux组织开发的针对Oracle8 OCI library的易用性C语言封装。它将大量的OCI数据类型表现为通用C语言数据类型,将OCI函数按类型重新分类封装,大大减少了函数的调用步骤和程序代码量。Libsqlora8库函数的网址是:http://www.poitschke.de/libsqlora8/ 可以到上面下载最新的包安装。
download libsqlora8-2.3.0.tar.gz
//设置好ORACLE_HOME,LD_LIBRARY_PATH等环境变量
#tar zxvf libsqlora8-2.3.0.tar.gz
#./configure
#make
#make install
安装好了。安装完后,在/usr/local/share/doc/packages/libsqlora8下面,有完整的文档。
3.测试代码:
#include <stdio.h>
#include <stdlib.h>
#include "sqlora.h"
static CONST char * _defuser="scott/tiger@oracledb";
int main(int argc,char **argv)
{
sqlo_db_handle_t dbh;
CONST char * cstr = _defuser;
char server_version[100];
if (SQLO_SUCCESS!= sqlo_init(SQLO_OFF,1,100))
{
printf("Failed to init libsqlora8\n");
return EXIT_FAILURE;
}
if (SQLO_SUCCESS != sqlo_connect(&dbh,cstr))
{
printf("Cannot login with %s \n",cstr);
return EXIT_FAILURE;
}
if (SQLO_SUCCESS != sqlo_server_version(dbh,server_version,sizeof(server_version)))
{
printf("Failed to get the server version: %s\n", sqlo_geterror(dbh));
return EXIT_FAILURE;
}
printf("Connected to:\n%s\n\n", server_version);
}
编译运行:
#gcc -lsqlora8 test.c -o test
#./test
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2.安装Libsqlora8库函数:
一般Oracle的C开发,是用OCI,C++开发,是用OCCI。安装好Oracle客户端后,就可以用OCI开发了。
Libsqlora8库函数是GNU/Linux组织开发的针对Oracle8 OCI library的易用性C语言封装。它将大量的OCI数据类型表现为通用C语言数据类型,将OCI函数按类型重新分类封装,大大减少了函数的调用步骤和程序代码量。Libsqlora8库函数的网址是:http://www.poitschke.de/libsqlora8/ 可以到上面下载最新的包安装。
download libsqlora8-2.3.0.tar.gz
//设置好ORACLE_HOME,LD_LIBRARY_PATH等环境变量
#tar zxvf libsqlora8-2.3.0.tar.gz
#./configure
#make
#make install
安装好了。安装完后,在/usr/local/share/doc/packages/libsqlora8下面,有完整的文档。
3.测试代码:
#include <stdio.h>
#include <stdlib.h>
#include "sqlora.h"
static CONST char * _defuser="scott/tiger@oracledb";
int main(int argc,char **argv)
{
sqlo_db_handle_t dbh;
CONST char * cstr = _defuser;
char server_version[100];
if (SQLO_SUCCESS!= sqlo_init(SQLO_OFF,1,100))
{
printf("Failed to init libsqlora8\n");
return EXIT_FAILURE;
}
if (SQLO_SUCCESS != sqlo_connect(&dbh,cstr))
{
printf("Cannot login with %s \n",cstr);
return EXIT_FAILURE;
}
if (SQLO_SUCCESS != sqlo_server_version(dbh,server_version,sizeof(server_version)))
{
printf("Failed to get the server version: %s\n", sqlo_geterror(dbh));
return EXIT_FAILURE;
}
printf("Connected to:\n%s\n\n", server_version);
}
编译运行:
#gcc -lsqlora8 test.c -o test
#./test
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Oracle/PHP 常见问题解答
[ 2004/12/25 23:53 | by ipaddr ]
文章来源:http://www.oracle.com/technology/global/cn/tech/opensource/php_faq.html
>>
>>
PHPBB的安装和精华功能的实现
[ 2004/12/25 23:50 | by ipaddr ]
最近网站上要弄个论坛,
找了好久,发现,在PHP环境下,免费的,好用的论坛确实不多,最后决定用PHPBB.
上传程序,上传文件,安装,安装界面,一切很顺利,
最后发现,基本安装的PHPBB没有上传功能,:(,真是不如意呀。
后来,不得不安装了一个 Attachment Mod[2.0.10],还真烦琐,更新数据库,上传了一些新的文件,还更新了几十个文件,终于搞定。
后来网站编辑要求加一个精华功能,找了好久也没找到插件,原来国外的论坛,大多数都没有精华功能的,最后不得不手工改PHPBB,新增一个精华功能,以下是过程。
最近网站上要弄个论坛,
找了好久,发现,在PHP环境下,免费的,好用的论坛确实不多,最后决定用PHPBB.
上传程序,上传文件,安装,安装界面,一切很顺利,
最后发现,基本安装的PHPBB没有上传功能,:(,真是不如意呀。
后来,不得不安装了一个 Attachment Mod[2.0.10],还真烦琐,更新数据库,上传了一些新的文件,还更新了几十个文件,终于搞定。
后来网站编辑要求加一个精华功能,找了好久也没找到插件,原来国外的论坛,大多数都没有精华功能的,最后不得不手工改PHPBB,新增一个精华功能,以下是过程。
1.修改数据库
在Topics表格中新增一字段topic_pink tinyint(1) UNSIGNED 默认为0,为1时表示为精华帖。
2.改资源文件
includes/contants.php
在define('POST_GLOBAL_ANNOUNCE', 3);后加入define('POST_PINK', 1);
language/lang_chinese_simplified/lang_main.php
在$lang['Topic_Sticky'] = "置顶:";后加入$lang['Topic_Pink'] = "精华:";
在$lang['Topics_Locked'] = "选择的主题已经成功的被锁定";后加入$lang['Topics_Pinked'] = "选择的主题已经成功的被设为精华";
在$lang['Topics_Unlocked'] = "选择的主题已经成功的被解锁";后加入$lang['Topics_Unpinked'] = "选择的主题已经成功的取消精华";
templates/xxxxxx/viewforum_body.tpl
在图示后面,加入精华帖的图示。
templates/xxxxxx/xxxx.cfg
在$images['folder_sticky'] = "$current_template_images/folder_sticky.gif";
后面加入$images['folder_pink'] = "$current_template_images/folder_pink.gif";
$images['folder_pink_new'] = "$current_template_images/folder_pink_new.gif";
templates/xxxxxx/images/
做两个图标,folder_pink.gif:精华帖的图标,folder_pink_new.gif有新帖时的精华帖图标
3.实现显示
a.viewforum.php
在$topic_type = $topic_rowset[$i]['topic_type'];后加入$topic_pink = $topic_rowset[$i]['topic_pink'];
在
else if( $topic_type == POST_STICKY )
{
$topic_type = $lang['Topic_Sticky'] . ' ';
}
后加入
else if( $topic_pink == POST_PINK )
{
$topic_type = $lang['Topic_Pink'] . ' ';
}
在
else if( $topic_rowset[$i]['topic_status'] == TOPIC_LOCKED )
{
$folder = $images['folder_locked'];
$folder_new = $images['folder_locked_new'];
}
后加入
else if( $topic_rowset[$i]['topic_pink'] == POST_PINK )
{
$folder = $images['folder_pink'];
$folder_new = $images['folder_pink_new'];
}
b.search.php
在$topic_type = $searchset[$i]['topic_type'];后加入$topic_pink = $searchset[$i]['topic_pink'];
在
else if( $topic_type == POST_STICKY )
{
$topic_type = $lang['Topic_Sticky'] . ' ';
}
后加入
else if( $topic_pink == POST_PINK )
{
$topic_type = $lang['Topic_Pink'] . ' ';
}
在
else if( $searchset[$i]['topic_status'] == TOPIC_LOCKED )
{
$folder = $images['folder_locked'];
$folder_new = $images['folder_locked_new'];
}
后加入
else if( $searchset[$i]['topic_pink'] == POST_PINK )
{
$folder = $images['folder_pink'];
$folder_new = $images['folder_pink_new'];
}
//注意,与viewforum.php有一点点不同,就是$searchset不同。
c.modcp.php
在$topic_type = $row['topic_type'];后加入$topic_pink = $row['topic_pink'];
在
else if( $topic_type == POST_STICKY )
{
$topic_type = $lang['Topic_Sticky'] . ' ';
}
后加入
else if( $topic_pink == POST_PINK )
{
$topic_type = $lang['Topic_Pink'] . ' ';
}
在
else if( $row['topic_status'] == TOPIC_LOCKED )
{
$folder = $images['folder_locked'];
$folder_new = $images['folder_locked_new'];
}
后加入
else if( $row['topic_pink'] == POST_PINK )
{
$folder = $images['folder_pink'];
$folder_new = $images['folder_pink_new'];
}
//注意,与search.php也有不同,就是$searchset[$i]变成了$row。
基本也就这三个地方要显示精华帖。改法都相似,就是在相应的地方加入一些语句
4.实现操作
实现设置精华和取消精华的操作,只需修改两个地方,
a.viewtopic.php增加一个操作界面(链接)
在148行的"$sql = "SELECT t.topic_id, t.topic_title, t.topic_status, "后面加入"t.topic_pink, ",从数据库里读取topic_pink字段,便于判断
在if ( $is_auth['auth_mod'] ) {}段里的$topic_mod .= ( $forum_topic_data['topic_status'] == TOPIC_UNLOCKED ) 行后面加入:
$topic_mod .= ( $forum_topic_data['topic_pink'] == POST_PINK ) ? "
b.修改modcp.php实现这个功能
1.在$unlock = ( isset($HTTP_POST_VARS['unlock']) ) ? TRUE : FALSE;加入
$pink = ( isset($HTTP_POST_VARS['pink']) ) ? TRUE : FALSE;$unpink = ( isset($HTTP_POST_VARS['unpink']) ) ? TRUE : FALSE;
2.在
else if ( $unlock )
{
$mode = 'unlock';
}
后加入
else if ( $pink )
{
$mode = 'pink';
}
else if ( $unpink )
{
$mode = 'unpink';
}
3.在case 'unlock':.........break;那后面加上:
case 'pink':
if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
{
message_die(GENERAL_MESSAGE, $lang['None_selected']);
}
$topics = ( isset($HTTP_POST_VARS['topic_id_list']) ) ? $HTTP_POST_VARS['topic_id_list'] : array($topic_id);
$topic_id_sql = '';
for($i = 0; $i < count($topics); $i++)
{
$topic_id_sql .= ( ( $topic_id_sql != '' ) ? ', ' : '' ) . intval($topics[$i]);
}
$sql = "UPDATE " . TOPICS_TABLE . "
SET topic_pink = 1
WHERE topic_id IN ($topic_id_sql)
AND forum_id = $forum_id
AND topic_moved_id = 0";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not update topics table', '', __LINE__, __FILE__, $sql);
}
if ( !empty($topic_id) )
{
$redirect_page = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&sid=" . $userdata['session_id'];
$message = sprintf($lang['Click_return_topic'], '', '');
}
else
{
$redirect_page = "modcp.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'];
$message = sprintf($lang['Click_return_modcp'], '', '');
}
$message = $message . '
' . sprintf($lang['Click_return_forum'], '
$template->assign_vars(array(
'META' => '')
);
message_die(GENERAL_MESSAGE, $lang['Topics_Pinked'] . '
' . $message);
break;
case 'unpink':
if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
{
message_die(GENERAL_MESSAGE, $lang['None_selected']);
}
$topics = ( isset($HTTP_POST_VARS['topic_id_list']) ) ? $HTTP_POST_VARS['topic_id_list'] : array($topic_id);
$topic_id_sql = '';
for($i = 0; $i < count($topics); $i++)
{
$topic_id_sql .= ( ( $topic_id_sql != "") ? ', ' : '' ) . intval($topics[$i]);
}
$sql = "UPDATE " . TOPICS_TABLE . "
SET topic_pink = 0
WHERE topic_id IN ($topic_id_sql)
AND forum_id = $forum_id
AND topic_moved_id = 0";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not update topics table', '', __LINE__, __FILE__, $sql);
}
if ( !empty($topic_id) )
{
$redirect_page = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&sid=" . $userdata['session_id'];
$message = sprintf($lang['Click_return_topic'], '', '');
}
else
{
$redirect_page = "modcp.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'];
$message = sprintf($lang['Click_return_modcp'], '', '');
}
$message = $message . '
' . sprintf($lang['Click_return_forum'], '
$template->assign_vars(array(
'META' => '')
);
message_die(GENERAL_MESSAGE, $lang['Topics_Unpinked'] . '
' . $message);
break;
//可以拷贝lock那段的内容,将SQL语句和最后面的message_die()那句改改就可以了。
到此,基本完工了!
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
找了好久,发现,在PHP环境下,免费的,好用的论坛确实不多,最后决定用PHPBB.
上传程序,上传文件,安装,安装界面,一切很顺利,
最后发现,基本安装的PHPBB没有上传功能,:(,真是不如意呀。
后来,不得不安装了一个 Attachment Mod[2.0.10],还真烦琐,更新数据库,上传了一些新的文件,还更新了几十个文件,终于搞定。
后来网站编辑要求加一个精华功能,找了好久也没找到插件,原来国外的论坛,大多数都没有精华功能的,最后不得不手工改PHPBB,新增一个精华功能,以下是过程。
最近网站上要弄个论坛,
找了好久,发现,在PHP环境下,免费的,好用的论坛确实不多,最后决定用PHPBB.
上传程序,上传文件,安装,安装界面,一切很顺利,
最后发现,基本安装的PHPBB没有上传功能,:(,真是不如意呀。
后来,不得不安装了一个 Attachment Mod[2.0.10],还真烦琐,更新数据库,上传了一些新的文件,还更新了几十个文件,终于搞定。
后来网站编辑要求加一个精华功能,找了好久也没找到插件,原来国外的论坛,大多数都没有精华功能的,最后不得不手工改PHPBB,新增一个精华功能,以下是过程。
1.修改数据库
在Topics表格中新增一字段topic_pink tinyint(1) UNSIGNED 默认为0,为1时表示为精华帖。
2.改资源文件
includes/contants.php
在define('POST_GLOBAL_ANNOUNCE', 3);后加入define('POST_PINK', 1);
language/lang_chinese_simplified/lang_main.php
在$lang['Topic_Sticky'] = "置顶:";后加入$lang['Topic_Pink'] = "精华:";
在$lang['Topics_Locked'] = "选择的主题已经成功的被锁定";后加入$lang['Topics_Pinked'] = "选择的主题已经成功的被设为精华";
在$lang['Topics_Unlocked'] = "选择的主题已经成功的被解锁";后加入$lang['Topics_Unpinked'] = "选择的主题已经成功的取消精华";
templates/xxxxxx/viewforum_body.tpl
在图示后面,加入精华帖的图示。
templates/xxxxxx/xxxx.cfg
在$images['folder_sticky'] = "$current_template_images/folder_sticky.gif";
后面加入$images['folder_pink'] = "$current_template_images/folder_pink.gif";
$images['folder_pink_new'] = "$current_template_images/folder_pink_new.gif";
templates/xxxxxx/images/
做两个图标,folder_pink.gif:精华帖的图标,folder_pink_new.gif有新帖时的精华帖图标
3.实现显示
a.viewforum.php
在$topic_type = $topic_rowset[$i]['topic_type'];后加入$topic_pink = $topic_rowset[$i]['topic_pink'];
在
else if( $topic_type == POST_STICKY )
{
$topic_type = $lang['Topic_Sticky'] . ' ';
}
后加入
else if( $topic_pink == POST_PINK )
{
$topic_type = $lang['Topic_Pink'] . ' ';
}
在
else if( $topic_rowset[$i]['topic_status'] == TOPIC_LOCKED )
{
$folder = $images['folder_locked'];
$folder_new = $images['folder_locked_new'];
}
后加入
else if( $topic_rowset[$i]['topic_pink'] == POST_PINK )
{
$folder = $images['folder_pink'];
$folder_new = $images['folder_pink_new'];
}
b.search.php
在$topic_type = $searchset[$i]['topic_type'];后加入$topic_pink = $searchset[$i]['topic_pink'];
在
else if( $topic_type == POST_STICKY )
{
$topic_type = $lang['Topic_Sticky'] . ' ';
}
后加入
else if( $topic_pink == POST_PINK )
{
$topic_type = $lang['Topic_Pink'] . ' ';
}
在
else if( $searchset[$i]['topic_status'] == TOPIC_LOCKED )
{
$folder = $images['folder_locked'];
$folder_new = $images['folder_locked_new'];
}
后加入
else if( $searchset[$i]['topic_pink'] == POST_PINK )
{
$folder = $images['folder_pink'];
$folder_new = $images['folder_pink_new'];
}
//注意,与viewforum.php有一点点不同,就是$searchset不同。
c.modcp.php
在$topic_type = $row['topic_type'];后加入$topic_pink = $row['topic_pink'];
在
else if( $topic_type == POST_STICKY )
{
$topic_type = $lang['Topic_Sticky'] . ' ';
}
后加入
else if( $topic_pink == POST_PINK )
{
$topic_type = $lang['Topic_Pink'] . ' ';
}
在
else if( $row['topic_status'] == TOPIC_LOCKED )
{
$folder = $images['folder_locked'];
$folder_new = $images['folder_locked_new'];
}
后加入
else if( $row['topic_pink'] == POST_PINK )
{
$folder = $images['folder_pink'];
$folder_new = $images['folder_pink_new'];
}
//注意,与search.php也有不同,就是$searchset[$i]变成了$row。
基本也就这三个地方要显示精华帖。改法都相似,就是在相应的地方加入一些语句
4.实现操作
实现设置精华和取消精华的操作,只需修改两个地方,
a.viewtopic.php增加一个操作界面(链接)
在148行的"$sql = "SELECT t.topic_id, t.topic_title, t.topic_status, "后面加入"t.topic_pink, ",从数据库里读取topic_pink字段,便于判断
在if ( $is_auth['auth_mod'] ) {}段里的$topic_mod .= ( $forum_topic_data['topic_status'] == TOPIC_UNLOCKED ) 行后面加入:
$topic_mod .= ( $forum_topic_data['topic_pink'] == POST_PINK ) ? "
b.修改modcp.php实现这个功能
1.在$unlock = ( isset($HTTP_POST_VARS['unlock']) ) ? TRUE : FALSE;加入
$pink = ( isset($HTTP_POST_VARS['pink']) ) ? TRUE : FALSE;$unpink = ( isset($HTTP_POST_VARS['unpink']) ) ? TRUE : FALSE;
2.在
else if ( $unlock )
{
$mode = 'unlock';
}
后加入
else if ( $pink )
{
$mode = 'pink';
}
else if ( $unpink )
{
$mode = 'unpink';
}
3.在case 'unlock':.........break;那后面加上:
case 'pink':
if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
{
message_die(GENERAL_MESSAGE, $lang['None_selected']);
}
$topics = ( isset($HTTP_POST_VARS['topic_id_list']) ) ? $HTTP_POST_VARS['topic_id_list'] : array($topic_id);
$topic_id_sql = '';
for($i = 0; $i < count($topics); $i++)
{
$topic_id_sql .= ( ( $topic_id_sql != '' ) ? ', ' : '' ) . intval($topics[$i]);
}
$sql = "UPDATE " . TOPICS_TABLE . "
SET topic_pink = 1
WHERE topic_id IN ($topic_id_sql)
AND forum_id = $forum_id
AND topic_moved_id = 0";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not update topics table', '', __LINE__, __FILE__, $sql);
}
if ( !empty($topic_id) )
{
$redirect_page = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&sid=" . $userdata['session_id'];
$message = sprintf($lang['Click_return_topic'], '', '');
}
else
{
$redirect_page = "modcp.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'];
$message = sprintf($lang['Click_return_modcp'], '', '');
}
$message = $message . '
' . sprintf($lang['Click_return_forum'], '
$template->assign_vars(array(
'META' => '')
);
message_die(GENERAL_MESSAGE, $lang['Topics_Pinked'] . '
' . $message);
break;
case 'unpink':
if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
{
message_die(GENERAL_MESSAGE, $lang['None_selected']);
}
$topics = ( isset($HTTP_POST_VARS['topic_id_list']) ) ? $HTTP_POST_VARS['topic_id_list'] : array($topic_id);
$topic_id_sql = '';
for($i = 0; $i < count($topics); $i++)
{
$topic_id_sql .= ( ( $topic_id_sql != "") ? ', ' : '' ) . intval($topics[$i]);
}
$sql = "UPDATE " . TOPICS_TABLE . "
SET topic_pink = 0
WHERE topic_id IN ($topic_id_sql)
AND forum_id = $forum_id
AND topic_moved_id = 0";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not update topics table', '', __LINE__, __FILE__, $sql);
}
if ( !empty($topic_id) )
{
$redirect_page = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&sid=" . $userdata['session_id'];
$message = sprintf($lang['Click_return_topic'], '', '');
}
else
{
$redirect_page = "modcp.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'];
$message = sprintf($lang['Click_return_modcp'], '', '');
}
$message = $message . '
' . sprintf($lang['Click_return_forum'], '
$template->assign_vars(array(
'META' => '')
);
message_die(GENERAL_MESSAGE, $lang['Topics_Unpinked'] . '
' . $message);
break;
//可以拷贝lock那段的内容,将SQL语句和最后面的message_die()那句改改就可以了。
到此,基本完工了!
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Linux下PHP+Oracle乱码解决
[ 2004/12/15 23:55 | by ipaddr ]
1.安装好服务器,设置好服务端的字符集(比如:ZHS16GBK为中文)
2.查看客户端查看服务端的语言,
sql>select * from V$NLS_PARAMETERS Where PARAMETER='NLS_LANGUAGE';
比如是"SIMPLIFIED CHINESE"
sql>select * from V$NLS_PARAMETERS Where PARAMETER='NLS_TERRITORY';
比如是"CHINA"
sql>select * from V$NLS_PARAMETERS Where PARAMETER='NLS_CHARACTERSET';
比如是"ZHS16GBK"
3.在Apache启动脚本里加入环境变量:
export NLS_LANG="SIMPLIFIED CHINESE"_CHINA_CHS16GBK
(在/etc/init.d/httpd里加入,源代码安装的Apache写一个脚本调用apachectl)
4.OK.
5.注意:
a.如果是简体中文环境,请用上面的参数
b.NLS_LANG是在客户端设置,由"语言_国家.字符集"组成,中文对应为:""SIMPLIFIED CHINESE"_CHINA_CHS16GBK",由于中间有空格,所以用引号.
c.如果只设置了export NLS_LANG="SIMPLIFIED CHINESE",很多繁体字无法识别。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2.查看客户端查看服务端的语言,
sql>select * from V$NLS_PARAMETERS Where PARAMETER='NLS_LANGUAGE';
比如是"SIMPLIFIED CHINESE"
sql>select * from V$NLS_PARAMETERS Where PARAMETER='NLS_TERRITORY';
比如是"CHINA"
sql>select * from V$NLS_PARAMETERS Where PARAMETER='NLS_CHARACTERSET';
比如是"ZHS16GBK"
3.在Apache启动脚本里加入环境变量:
export NLS_LANG="SIMPLIFIED CHINESE"_CHINA_CHS16GBK
(在/etc/init.d/httpd里加入,源代码安装的Apache写一个脚本调用apachectl)
4.OK.
5.注意:
a.如果是简体中文环境,请用上面的参数
b.NLS_LANG是在客户端设置,由"语言_国家.字符集"组成,中文对应为:""SIMPLIFIED CHINESE"_CHINA_CHS16GBK",由于中间有空格,所以用引号.
c.如果只设置了export NLS_LANG="SIMPLIFIED CHINESE",很多繁体字无法识别。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Oracle PHP 故障诊断常见问题解答
[ 2004/12/15 23:54 | by ipaddr ]
文章来源: http://www.oracle.com/technology/global/cn/tech/opensource/php/php_troubleshooting_faq.html
>>>
PHP+Oracle整合
[ 2004/12/15 23:53 | by ipaddr ]
安装了Oracle后,才可以与PHP整合
a.设置好ORACLE_HOME环境变量(Oracle的安装目录)
b.Apache以DSO方式安装 ./configure --enable-module=so
c.重装编译安装PHP,并加上--with-oci8=$ORACLE_HOME
d.注意,还要设置LD_LIBRARY_PATH环境变量 引用:
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH
另外,如果运行时如果要用到这个变量,可以加入到/etc/ld.so.conf中。比如,在/etc/ld.so.conf中加入
/opt/oracle/product/9.2.0/lib
e.改Apache的启动脚本
Apache启动的时候,要有环境变量ORACLE_HOME,如果是RHEL3自带的Apache,则需要在/etc/init.d/httpd里,加入如下两句:
引用:
在/etc/init.d/httpd的31行后,加入:
#在这句之后
# RETVAL=0
ORACLE_HOME=/opt/oracle/product/9.2
ORACLE_SID=koook
#ORACLE_SID可以不用设置,但登录是要指定SID
export ORACLE_HOME ORACLE_SID
另外,如果是自安装的Apache,用apachectl启动的话,可以写一个脚本,如下:
引用:(oracle-apache-ctl)
#!/bin/sh
ORACLE_HOME=/opt/oracle/product/9.2
ORACLE_SID=koook
export ORACLE_HOME ORACLE_SID
echo "Oracle Home: $ORACLE_HOME"
echo "Oracle SID: $ORACLE_SID"
echo Starting Apache
./apachectl start
(另外,可能还需加入NLS_LANG环境变量,防止乱码)
以下是测试:
$db_conn = ocilogon( "system", "syspassword","koookdb");
//koookdb在Netca里设置,或修改tnsnames.ora文件
$cmdstr = "select ename, sal from scott.emp";
$parsed = ociparse($db_conn, $cmdstr);
ociexecute($parsed);
$nrows = ocifetchstatement($parsed, $results);
echo "";
echo "
Oracle PHP Test
";
echo "\n \n";
echo " Name \n Salary \n
\n";
for ($i = 0; $i < $nrows; $i++ )
{
echo "
\n";
echo " " . $results["ENAME"][$i] . " ";
echo " $ " . number_format($results["SAL"][$i], 2). " ";
echo "
\n";
}
echo "
Number of Rows: $nrows
";
echo "
If you see data, then it works!
\n";
?>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
a.设置好ORACLE_HOME环境变量(Oracle的安装目录)
b.Apache以DSO方式安装 ./configure --enable-module=so
c.重装编译安装PHP,并加上--with-oci8=$ORACLE_HOME
d.注意,还要设置LD_LIBRARY_PATH环境变量 引用:
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH
另外,如果运行时如果要用到这个变量,可以加入到/etc/ld.so.conf中。比如,在/etc/ld.so.conf中加入
/opt/oracle/product/9.2.0/lib
e.改Apache的启动脚本
Apache启动的时候,要有环境变量ORACLE_HOME,如果是RHEL3自带的Apache,则需要在/etc/init.d/httpd里,加入如下两句:
引用:
在/etc/init.d/httpd的31行后,加入:
#在这句之后
# RETVAL=0
ORACLE_HOME=/opt/oracle/product/9.2
ORACLE_SID=koook
#ORACLE_SID可以不用设置,但登录是要指定SID
export ORACLE_HOME ORACLE_SID
另外,如果是自安装的Apache,用apachectl启动的话,可以写一个脚本,如下:
引用:(oracle-apache-ctl)
#!/bin/sh
ORACLE_HOME=/opt/oracle/product/9.2
ORACLE_SID=koook
export ORACLE_HOME ORACLE_SID
echo "Oracle Home: $ORACLE_HOME"
echo "Oracle SID: $ORACLE_SID"
echo Starting Apache
./apachectl start
(另外,可能还需加入NLS_LANG环境变量,防止乱码)
以下是测试:
$db_conn = ocilogon( "system", "syspassword","koookdb");
//koookdb在Netca里设置,或修改tnsnames.ora文件
$cmdstr = "select ename, sal from scott.emp";
$parsed = ociparse($db_conn, $cmdstr);
ociexecute($parsed);
$nrows = ocifetchstatement($parsed, $results);
echo "";
echo "
Oracle PHP Test
";
echo "\n \n";
echo " Name \n Salary \n
\n";
for ($i = 0; $i < $nrows; $i++ )
{
echo "
\n";
echo " " . $results["ENAME"][$i] . " ";
echo " $ " . number_format($results["SAL"][$i], 2). " ";
echo "
\n";
}
echo "
Number of Rows: $nrows
";
echo "
If you see data, then it works!
\n";
?>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>