dedecms二次开发,要会写织梦的标签,会制作织梦的模板。也需要操作其数据库。查询、插入、删除是三个基本操作,操作之前,先了解织梦DedeCMS的数据库类是必须的。
1.创建数据表
创建一个名为"dede_test"的表,2个字段,1个id,作为唯一标识,一个name作为名称。
使用SQL语句插入一些数据供操作使用:
1 2 3 4 | INSERT INTO `dede_test` VALUES ('1', '测试名字1');
INSERT INTO `dede_test` VALUES ('2', '这是第二个');
INSERT INTO `dede_test` VALUES ('3', '第三个喽');
INSERT INTO `dede_test` VALUES ('4', '第四个');
|
2.如何连接数据库?
只需要在操作的文件中引入include文件夹下面的 common.inc.php文件即可。
如下:
1 2 3 4 | <?php
require_once (dirname(__FILE__) . "/include/common.inc.php");
print_r($dsql);
?>
|
3.如何查询数据库
【1】在数据库类中,查询一条记录用方法
GetOne();
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php
require_once (dirname(__FILE__) . "/include/common.inc.php");
if($dsql->IsTable('dede_test')){
//如果存在dede_test表
//-------------------
//| 查询一条记录 |
//| GetOne() |
//-------------------
// ↓
$row = $dsql->GetOne("SELECT * FROM dede_test WHERE id = 3");
print_r($row);
}
?>
|
这里用了$dsql类的2个方法,IsTable()以及GetOne(),IsTable先来判断这个表是否存在,如果存在我们就继续执行,他返回的是一个bool值,如果存在为true否则就为false。
执行查询单条记录的这个过程,即GetOne,通过帮助文档可以知道:$arr = $db->GetOne($sql);也就是说查询的sql语句会传送回来一个数组。
【2】在数据库类中,查询多条记录
Execute
()和
GetArray()
;
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php
require_once (dirname(__FILE__) . "/include/common.inc.php");
if($dsql->IsTable('dede_test')){
//如果存在dede_test表
//-------------------
//| 查询一条记录 |
//| GetOne() |
//-------------------
// ↓
$row = $dsql->GetOne("SELECT * FROM dede_test WHERE id = 3");
echo "查询id=3的记录:<br />显示结果:";
print_r($row);
//-------------------
//| 查询多条记录 |
//| Execute() |
//-------------------
// ↓
echo "<hr />查询dede_test表中的所有记录:<br />显示结果:<br />";
$sql = "SELECT * FROM dede_test";
$dsql->Execute('me',$sql);
while($arr = $dsql->GetArray('me'))
{
echo "id = {$arr['id']} ,name = {$arr['name']}<br />";
}
}
?>
|
除了用$dsql->GetArray('me')来获取内容到数组,还可以用$dsql->GetObject("me")获取内容到对象,不过调用方法有些不同,主要这里通过$dbobj->fieldname来调用查询出来的数据:
1 2 3 4 | while($dbobj = $dsql->GetObject('me'))
{
echo "id = {$dbobj->id} ,name = {$dbobj->name}<br />";
}
|
4.插入删除操作数据库
【1】插入数据库
表单代码如下:
1 2 3 4 5 6 7 | <hr />
用于提交数据的表单:<br />
<form action="test.php" type="post">
<input type="hidden" name="dopost" value="save">
名称:<input type="text" name="name" value="">
<input name="提交" type="submit" value="提交">
</form>
|
用了一个隐藏域dopost来存放操作方法,输入框name用来存放输入数据,然后传递给当前页面,再进行处理,加入部分的表单处理操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //-------------------
//| 表单处理过程 |
//| Save() |
//-------------------
// ↓
empty($dopost)? "" : $dopost;
if($dopost == "save"){
//如果执行插入操作
$sql = "INSERT INTO `dede_test` (`name`) VALUES ('{$name}')";
$dsql->ExecuteNoneQuery($sql); //执行这个插入语句
$lastInsertID = $dsql->GetLastID(); //获取插入后的最后的ID,然后再传给下一个页面
ShowMsg("成功增加一条记录内容!","test.php?id={$lastInsertID}");
exit();
}
|
主要是一个INSERT INTO 语句,然后通过$dsql的ExecuteNoneQuery方法来执行这个操作,并且获取插入数据最后一个id再将其传递给下一个页面以便高亮显示。
【2】删除操作
删除的操作也是如此,只需要稍微修改就可以。
增加一个dopost操作为del的判断,然后在显示数据后面增加一个超链接,将id以get方式进行传递.最后进行处理。
如下修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | while($dbobj = $dsql->GetObject('me'))
{
if($id==$dbobj->id){
//如果传递的id值和查询值相同,则高亮显示最后一条插入记录
echo "<font
color='red'>id = {$dbobj->id} ,name =
{$dbobj->name}</font> <a
href='test.php?dopost=del&id={$dbobj->id}'>[删除]</a>
<br />";//这里增加了一个删除的超链接
}else{
echo "id
= {$dbobj->id} ,name = {$dbobj->name} <a
href='test.php?dopost=del&id={$dbobj->id}'>[删除]</a><
br />";
}
}
//下面是del这个post的判断:
empty($dopost)? "" : $dopost;
if($dopost == "save"){
//如果执行插入操作
$sql = "INSERT INTO `dede_test` (`name`) VALUES ('{$name}')";
$dsql->ExecuteNoneQuery($sql);
$lastInsertID = $dsql->GetLastID();
ShowMsg("成功增加一条记录内容!","test.php?id={$lastInsertID}");
exit();
}elseif($dopost == "del"){
//如果dopost为del,则删除数据
$id = isset($id) && is_numeric($id) ? $id : 0;
$sql = "DELETE FROM `dede_test` WHERE (`id`='{$id}')";
$dsql->ExecuteNoneQuery($sql);
ShowMsg("成功删除一条记录内容!","test.php");
exit();
}
|
dedecms技术论坛地址:http://www.dedecms.com/help/development/2009/1028/1076.html
转载于:https://blog.51cto.com/saiyoung/1637482