很多客戶(hù)在安裝ecshop的時(shí)候,忽略表前綴,安裝上了測試數據的表前綴和安裝時(shí)候的不一樣,下面我們教大家在后臺實(shí)現可修改表前綴的功能
1、把rename.htm放到到admin/templates
2、將sql.php放到admin
3、修改admin/includes/inc_menu.php
查找'sql.php?act=main';在下面添加一行:
$modules['13_backup']['04_rename'] = 'sql.php?act=rename';
4、修改languages/zh_cn/admin/common.php
查找'SQL查詢(xún)';在下面添加一行:
$_LANG['04_rename'] = '更改數據表前綴';
5、進(jìn)入后臺,在數據庫管理就可以看到‘更改數據庫前綴’的功能了。
rename.htm 文件源碼:
<!-- $Id: sql.htm 14216 2008-03-10 02:27:21Z testyang $ -->
{include file="pageheader.htm"}
<div class="form-div">
{if $result}
{$result}<br />
<a href="sql.php?act=rename">返回</a>
{else}
提醒:一般修改前綴目的是為了數據庫的安全和方便數據庫轉移,不是必要時(shí)刻,請不要修改,修改前先備份數據庫。
<form name="sqlFrom" method="post" action="sql.php" onsubmit="return validate()">
<table>
<tr><th>數據名:</th><td><input type="text" name="shujuku" value=""></td></tr>
<tr><th>把數據表前綴設置為:</th><td><input type="text" name="qianzhui" value="">請不要帶‘_’,修改成功后,再修改一下配置文件data/config.php,$prefix="新的前綴名_";(不要忘了后面的‘_’)</td></tr>
<tr><th></th><td><input value="確定" type="submit" class="button" /></td></tr>
<input type="hidden" name="act" value="rename_sub">
</table>
</form>
{/if}
</div>
{include file="pagefooter.htm"}
sql.php文件源碼:
<?php
define('IN_ECS', true);
require(dirname(__FILE__) . '/includes/init.php');
$_POST['sql'] = !empty($_POST['sql']) ? trim($_POST['sql']) : '';
/*------------------------------------------------------ */
//-- 用戶(hù)賬號列表
/*------------------------------------------------------ */
if ($_REQUEST['act'] == 'main')
{
admin_priv('sql_query');
assign_query_info();
$smarty->assign('type', -1);
$smarty->assign('ur_here', $_LANG['04_sql_query']);
$smarty->display('sql.htm');
}
if ($_REQUEST['act'] == 'rename')
{
admin_priv('sql_query');
assign_query_info();
$smarty->assign('type', -1);
$smarty->assign('ur_here', $_LANG['04_sql_query']);
$smarty->display('rename.htm');
}
if ($_REQUEST['act'] == 'rename_sub')
{
admin_priv('sql_query');
$shujuku = $_REQUEST['shujuku'];
$qianzhui = $_REQUEST['qianzhui'];
if($shujuku && $qianzhui)
{
if(strpos($qianzhui ,'_'))
{
$smarty->assign('result', '前綴不允許帶‘_’!');
}
else
{
$sql = "SELECT TABLE_NAME from information_schema.columns where TABLE_SCHEMA = '".$shujuku."' group by TABLE_NAME";
$table_name = $db->getAll($sql);
if($table_name)
{
foreach($table_name as $val)
{
$old_val = $val['TABLE_NAME'];
$new_val = $qianzhui . substr($old_val ,strpos($old_val ,'_'));
$sql = 'alter table `'.$shujuku.'`.`'. $old_val .'` rename to `'.$shujuku.'`.`'.$new_val .'`';
$db->query($sql);
}
$smarty->assign('result', '成功!再修改一下配置文件data/config.php,$prefix="新的前綴名_";(不要忘了后面的‘_’)就可以了。');
}
else
{
$smarty->assign('result', '數據庫名錯誤!');
}
}
}
else
{
$smarty->assign('result', '失??!沒(méi)有輸入數據庫名或者前綴');
}
assign_query_info();
$smarty->assign('type', -1);
$smarty->assign('ur_here', $_LANG['04_sql_query']);
$smarty->display('rename.htm');
}
if ($_REQUEST['act'] == 'query')
{
admin_priv('sql_query');
assign_sql($_POST['sql']);
assign_query_info();
$smarty->assign('ur_here', $_LANG['04_sql_query']);
$smarty->display('sql.htm');
}
/**
*
*
* @access public
* @param
*
* @return void
*/
function assign_sql($sql)
{
global $db, $smarty, $_LANG;
$sql = stripslashes($sql);
$smarty->assign('sql', $sql);
/* 解析查詢(xún)項 */
$sql = str_replace("\r", '', $sql);
$query_items = explode(";\n", $sql);
foreach ($query_items as $key=>$value)
{
if (empty($value))
{
unset($query_items[$key]);
}
}
/* 如果是多條語(yǔ)句,拆開(kāi)來(lái)執行 */
if (count($query_items) > 1)
{
foreach ($query_items as $key=>$value)
{
if ($db->query($value, 'SILENT'))
{
$smarty->assign('type', 1);
}
else
{
$smarty->assign('type', 0);
$smarty->assign('error', $db->error());
return;
}
}
return; //退出函數
}
/* 單獨一條sql語(yǔ)句處理 */
if (preg_match("/^(?:UPDATE|DELETE|TRUNCATE|ALTER|DROP|FLUSH|INSERT|REPLACE|SET|CREATE)\\s+/i", $sql))
{
if ($db->query($sql, 'SILENT'))
{
$smarty->assign('type', 1);
}
else
{
$smarty->assign('type', 0);
$smarty->assign('error', $db->error());
}
}
else
{
$data = $db->GetAll($sql);
if ($data === false)
{
$smarty->assign('type', 0);
$smarty->assign('error', $db->error());
}
else
{
$result = '';
if (is_array($data) && isset($data[0]) === true)
{
$result = "<table> \n <tr>";
$keys = array_keys($data[0]);
for ($i = 0, $num = count($keys); $i < $num; $i++)
{
$result .= "<th>" . $keys[$i] . "</th>\n";
}
$result .= "</tr> \n";
foreach ($data AS $data1)
{
$result .= "<tr>\n";
foreach ($data1 AS $value)
{
$result .= "<td>" . $value . "</td>";
}
$result .= "</tr>\n";
}
$result .= "</table>\n";
}
else
{
$result ="<center><h3>" . $_LANG['no_data'] . "</h3></center>";
}
$smarty->assign('type', 2);
$smarty->assign('result', $result);
}
}
}
?>
聯(lián)系客服