在工作室原有项目的基础上,新增一个news板块进行练习PHP最基本的增删改查。
|
一、新建一个数据库(或者利用原有数据库)
我新建了一个数据库,名为db_new。新建名为t_news的表。包含五个属性。
二、连接数据库
打开main.php , 具体目录如下:
修改本地数据库代码,将数据库名跟用户名、密码该为自己数据库对应的。
//本地的数据库
'db'=>array(
'connectionString' => 'mysql:host=127.0.0.1;dbname=db_new', //mysql:host=125.222.222.73 本地数据库
'emulatePrepare' => true,
'username' => 'root',
'password' => 'root',
'charset' => 'utf8',
'tablePrefix' =>'t_',
),
三、定义 AR 类(创建model)
要访问一个数据表,我们首先需要通过集成 CActiveRecord 定义一个 AR 类。每个 AR 类代表一个单独的数据表,一个 AR 实例则代表那个表中的一行。
在此目录下。新建PHP文件,继承CActiveRecord。
主要写两个方法,只需将第二个方法(tableName())中的return 该为自己数据库中表的名字,我的是news。
class News extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return '{{news}}'; //return 't_news'
}
}
注:默认情况下,AR 类的名字和数据表的名字相同。如果不同,请覆盖 tableName() 方法。
引入的 表前缀功能 AR类的 tableName() 方法可以通过如下方式覆盖
public function tableName(){
return '{{news}}'; //return 't_news'; 表的名字
}
这就是说,我们将返回通过双大括号括起来的没有前缀的表名,而不是完整的表的名字。
四、控制器(Controller)
在controller文件夹下新建一个文件夹,命名为news。在news中新建一个名为 NewsController的controller,并继承Controller。
class NewsController extends Controller
{ ***********
}
五、编写增删改查方法
因为工作室项目的html文件都在这个目录下,因此我们在这个目录下,新建一个名为news的文件夹,我们的html就放在该文件夹下。
1.查找全部信息
(1)news下新建html文件,名为list_news.html
(2)在controller中写查看全部新闻的方法。在controller中的方法名要加action,可以自动识别。
/**
* 全部新闻
*/
public function actionGetNews(){
$list = News::model()->findAll(); //将t_news表中全部信息存到 $list中
$this->smarty->assign('list',$list);
$this->smarty->display('news/list_news.html');//跳到对应的html页面,内容展示
// var_dump($list);
}
对应list_news.html的代码
<table border="1" style="margin-top: 10px;font-size: x-large">
<thead> <tr> <th>标题</th>
<th>操作</th>
<th>内容</th> <th>时间</th> </tr>
<tr>
</thead> <tbody> <{foreach from=$list item=news}>
<td><{$news.date}></td>
<td><{$news.title}></td> <td><{$news.writer}></td> <td>
<a href="<{$website}>/news/News/getDeleteNews?id=<{$news.id}>">删除</a>
<a href="<{$website}>/news/News/getNewsById?id=<{$news.id}>">查看详情</a> <a href="<{$website}>/news/News/toUpdateNews?id=<{$news.id}>">修改</a>
<a href="<{$website}>/news/News/toAddNews">添加</a>
</td> </tr> <{/foreach}> <tr> <td colspan="4" style="text-align: center" > </td> </tr> </tbody>
</table>
简单展示如下图所示:
2.通过id查找信息
点击新闻页面的查看详情,可查看新闻的全部内容。
<a href="<{$website}>/news/News/getNewsById?id=<{$news.id}>">查看详情</a>
对应controlle中的方法:
/**
* 通过id查找一条新闻
*/
public function actionGetNewsById(){
$id=$_GET['id'];
$news=News::model()->find('id=:id',array(':id'=>$id));
$this->smarty->assign('news',$news);
$this->smarty->display('news/concrete_content.html');
}
将新闻的详细信息,在concrete_content.html中进行展示。
<center>
<h1 style="margin-top: 80px"><{$news.title}></h1>
<table border="1" style="width: 1000px;margin-top: 10px;font-size:x-large">
<tr>
<td>内容</td>
<td><{$news.content}></td>
</tr>
<tr>
<td>作者</td>
<td><{$news.writer}></td>
</tr>
<tr>
<td>时间</td>
<td><{$news.date}></td>
</tr>
</table>
</center>
简单页面展示如下:
3.删除新闻
<a href="<{$website}>/news/News/getDeleteNews?id=<{$news.id}>">删除</a>
将对应新闻的id传到controller,删除对应的新闻,调用查看全部新闻方法,返回到展示新闻页面。
/**
* 删除新闻
*/
public function actionGetDeleteNews()
{
$id=$_GET['id'];
$news=News::model()->findByPk($id);
$news->delete(); // 从数据表中删除此行
$this->redirect(array(getNews));
}
4.增加新闻
<a href="<{$website}>/news/News/toAddNews">添加</a>
通过controller中的方法,跳转到增加新闻页面。
/**
* 跳转到增加新闻
*/
public function actionToAddNews(){
$this->smarty->display('news/add_news.html');
}
增加新闻html
<form action="<{$website}>/news/News/addNews2" method="post">
<table style="margin-top: 10px;font-size: x-large" >
<tr>
<td>标题名称:</td>
<td><input type="text" name="title" style="width: 500px;height: 30px"></td>
</tr>
<tr>
<td>文章内容:</td>
<td><textarea name="content" cols="30" rows="10" style="width: 500px;"></textarea></td>
</tr>
<tr>
<td>文章作者:</td>
<td><input type="text" name="writer" style="width: 500px;height: 30px"></td>
</tr>
<tr content="center">
<td colspan="2" style="text-align: center"><input type="submit" value="提交"></td>
</tr>
</table>
</form>
将添加的内容通过form表单,传给controller,增加新闻。
/**
* 增加新闻
*/
public function actionAddNews2(){
$news=new News;
$content=$_POST['content'];
$title=$_POST['title'];
$writer=$_POST['writer'];
$news->title=$title;
$news->content=$content;
$news->writer=$writer;
$news->save();
$this->redirect(array(getNews));
// var_dump($news);
}
简单页面展示:
5.修改新闻
<a href="<{$website}>/news/News/toUpdateNews?id=<{$news.id}>">修改</a>
将要修改的新闻的id传给controller,将id对应的新闻在页面呈现出来,进行修改。
/**
* 跳转到更新新闻
*/
public function actionToUpdateNews(){
$id=$_GET['id'];
$news=News::model()->find('id=:id',array(':id'=>$id));
$this->smarty->assign('news',$news);
$this->smarty->display('news/update_news.html');
}
修改新闻页面:
<form action="<{$website}>/news/News/getUpdateNews" method="post">
<table border="1" style="margin-top: 100px;margin-left: 100px">
<tr >
<input type="text" name="id" value="<{$news.id}>" hidden/>
</tr>
<tr>
<td>标题</td>
<td>
<textarea type="text" name="title" style="width: 1000px"><{$news.title}></textarea>
</td>
</tr>
<tr>
<td>内容</td>
<td>
<textarea type="text" name="content" style="width: 1000px"><{$news.content}></textarea>
</td>
</tr>
<tr>
<td>作者</td>
<td>
<textarea type="text" name="writer" style="width: 1000px"><{$news.writer}></textarea>
</td>
</tr>
<tr>
<td colspan="<input type="submit" name="submit" value="</td>
</tr>
</table>
</form>
将要修改的信息通过form表单,传给controller,修改新闻。
/**
* 修改新闻
*/
public function actionGetUpdateNews(){
$id=$_POST['id'];
$news=News::model()->find('id=:id',array(':id'=>$id));
$news->title=$_POST['title'];
$news->content=$_POST['content'];
$news->writer=$_POST['writer'];
$news->save(); // 将更改保存到数据库
$this->redirect(array(getNews));
}
简单页面展示:
Yii 权威指南(使用数据库)http://www.yiichina.com/doc/guide/1.1/database.ar