喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

[北京]代朋友公司招聘PHP高级程序员多名

上一主题 下一主题
     
标题: [原创] 用Delphi程序更新PHP网站-中级篇  
 
Zerolone
新手上路
Rank: 1
初级会员



UID 67622
精华 0
积分 7
帖子 5
金钱 7 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-12-30
状态 离线
用Delphi程序更新PHP网站-中级篇

个人空间不稳定, 如果图片不能访问, 请在
C:\WINNT\system32\drivers\etc\hosts文件中添加一行61.163.200.166  cnc.zerolone.com

用Delphi程序更新PHP网站-中级篇

一、采用的软件环境:
OS:Microsoft Windows 2000 Server 5.0.2195 Service Pack 4 内部版本号 2195
IE:6.0.2800.1106
Delphi :Version 6.0 (Build 6.240) Update Pack 2
Indy:9.0.4 beta
PHP:4.4.2
Apache:2.0.55
Serv-U:6.3.0.0
ZeosLib:6.1.5-stable(中级版本新加入)下载地址 http://zeoslib.sourceforge.net/
mysqlserver: 4.1.20-community-nt(中级版本新加入)
说明:
1、OS与IE版本信息由开始-〉程序-〉附件-〉系统工具-〉系统信息获得
2、Delphi版本信息由Delphi-〉Help-〉About获得
3、PHP版本信息由PHP函数phpinfo()获得
4、Apache版本由apache -v 获得
5、Indy为Delphi控件包,这里主要用到的是其Ftp控件
6、ZeosLib为Delphi操作Mysql的控件包,这里主要利用到的是其操作数据库。
7、mysqlserver为数据库引擎

二、前篇
初级篇:通过Indy控件操作文件,本地缓存、修改。文章地址 http://www.phpx.com/happy/thread-125619-1-2.html

三、续篇
高级篇:编写文章管理程序,支持Delphi程序与PHP程序同时使用。

四、实现方法
本篇主要描述用Zlib控件连接MysqlServer,进行操作数据库,目前操作数据库有两种方式,1、通过http访问定制的php进行操作,2、通过数据库引擎连接。我是介绍后者,关于连接MysqlServer有控件或者方法有dbexpress、ADO+ODBC以及ZeosLib等, 具体各个控件的优缺点,我这里就不评述了。

五、文件说明

初级篇代码+indy控件打包下载地址:http://cnc.zerolone.com/1.rar
初级篇代码+indy控件+apache+php+serv-U打包下载地址:http://cnc.zerolone.com/2.rar

中级篇完整代码+indy控件+ZeosLib控件打包下载地址:http://cnc.zerolone.com/002/2.rar

代码中的dhtmled.ocx需要注册,cmd regsvr32 dhtmled.ocx

初级篇运行演示,采用SDemo2录制:
exe格式 http://cnc.zerolone.com/1.exe
smv格式 http://cnc.zerolone.com/1.smv

中级篇运行演示,采用SDemo2录制:
exe格式 http://cnc.zerolone.com/002/2.exe
smv格式 http://cnc.zerolone.com/002/2.smv

我的联系方式:
zerolone@163.com
16198008

六、开始
我这里制作网站的一个部分,友情连接部分,建立两个文件index.php.php与index.php
index.php.php 写主要的html代码如下(完整版本请察看index.php.php):

<!-- 友情连接_开始 --><div>
    <table width="100%" cellpadding="0" cellspacing="0">
    <tr><td><a href="./link.php"><img src="images/link.gif" border="0"></a></td></tr>
    <?php
    
if(isset($link_list))
    {
        foreach (
$link_list as $link)
        {
    
?>
    <tr>
        <td style="text-align:center" title="<?=$link['link_name']?>" height="35px">
<a href="<?=$link['link_url']?>" target="_blank"><img src="<?=$link['link_pic']?>" border="0" width="88px" height="31px"></a></td>
    </tr>
    <?php
        
}
    }
    
?>
    </table></div>
<!-- 友情连接_结束 -->
很简单的调用。

最终显示效果如图2-1:



图2-1

下面我们用Delphi来制作添加、修改网站友情连接部分。

我们先看一下完整版本最终的效果,我们当前要做的就是设置这一块。如图2-2



图2-2

那么, 我们开始了。 启动Delphi,新建一个Application。

加入2个按钮,如图2-3。



图2-3

一个按钮为添加,一个按钮为查看。

然后建立三个Form,分别取名为:EditLinkForm、AddLinkForm以及ReadLinkForm。其中点击添加显示AddLinkForm,点击查看显示ReadLinkForm。

下面我们开始添加功能代码:

在我的初级篇中有一个客户端设置窗体SiteSettingForm,这次我们需要增加一些控件,来设置Mysql的连接参数,如图2-4所示



图2-4

其中控件有1个TabSheet,若干Label与Button,注意这里要添加一个ZConnection1与ZQuery1(之前需要安装这个组件包)。主要代码有按钮测试连接、修改即可。代码如下(代码有删减,完全文件查看代码):

测试连接按钮, 主要说明,当数据库已经连接,则不操作,否则读取相应Edit里面的值作为ZConnection的连接参数,根据连接的情况,反映出来。

<?php
procedure TClientSettingForm
.Btn_DBConnectClick(SenderTObject);
begin
  
if ZConnection1.Connected then
  
else
    
with ZConnection1 do
      try
        
User := Edt_DBUser.Text;
        
Password := Edt_DBPassword.Text;
        
HostName := Edt_DBIP.Text;
        
Database := Edt_DBDatabase.Text;
        
Protocol := combo_Protocol.Text;
        
Connect;
        
Btn_DBDisConnect.Enabled := true;
        
Btn_DBConnect.Enabled := false;
      
except
        MessageBox
(0'数据库连接失败!''连接失败'MB_OK MB_ICONEXCLAMATION);
        
Btn_DBDisConnect.Enabled := false;
        
Btn_DBConnect.Enabled := true;
      
end;
end;
?>
修改按钮,将连接数据库的参数写入文件, 方便下次的调用。返回正确或者错误的提示。

<?php
procedure TClientSettingForm
.BitBtn_EditDBClick(SenderTObject);
begin
  
try
    
SaveIni(Edt_DBIP.Text'DBIP');
    
SaveIni(Edt_DBUser.Text'DBUser');
    
SaveIni(Edt_DBPassword.Text'DBPassword');
    
SaveIni(Edt_DBDatabase.Text'DBDatabase');
    
SaveIni(Edt_DBTablePre.Text'DBTablePre');
    
SaveIni(Edt_RecordLimit.Text,'RecordLimit');
    
MessageBox(0'保存成功!'pchar(caption), MB_OK MB_ICONEXCLAMATION);
    
BitBtn_EditDB.Enabled := false
  except
    MessageBox
(0'保存失败!请检查文件 setting.ini 是否可写'pchar(caption), MB_OK MB_ICONEXCLAMATION);
    
BitBtn_EditDB.Enabled := True;
  
end;
end;
?>
完成了ClientSettingForm的代码, 我们来看到AddLinkForm的窗口的控件如图2-5所示。



图2-5

其中有4个Label、3个Edit、2个Button、1个SpinEdit。

主要的事件为提交友情连接按钮,主要包括判断标题,Sql提交语句的构造,返回操作情况, 代码如下:

<?php
procedure TAddLinkForm
.Btn_Add_LinkClick(SenderTObject);
var
  
link_titlelink_urllink_piclink_theorderstring;
  
SqlLSqlRstring;

  
//可否提交
  
CanInsertboolean;
begin
  CanInsert 
:= true;

  
link_url := Edt_url.Text;
  
link_pic := Edt_pic.Text;
  
link_theorder := Edt_theorder.Text;

  
//标题
  
link_title := Edt_title.Text;
  
link_title := CheckString(link_title200);

  if (
link_title ''then
    begin
      CanInsert 
:= false;
      
MessageBox(handle'友情连接标题不能为空!'pchar(caption),
        
mb_IconInformation);
    
end;

  if 
CanInsert then
    begin

      
//添加一个投票选项
      
SqlL := 'insert into ' str_TablePre 'link (';
      
SqlR := 'values (';

      
//标题
      
SqlL := SqlL 'title,';
      
SqlR := SqlR '''' link_title ''',';

      
//类型
      
SqlL := SqlL 'url, ';
      
SqlR := SqlR '''' link_url ''',';

      
//是否选定
      
SqlL := SqlL 'pic, ';
      
SqlR := SqlR '''' link_pic ''',';

      
//内容
      
SqlL := SqlL 'theorder)';
      
SqlR := SqlR link_theorder ' );';
      try
        
ClientSettingForm.Btn_DBConnect.Click;
        
ClientSettingForm.ZQuery2.SQL.Text := SqlL SqlR;
        
ClientSettingForm.ZQuery2.ExecSQL;
        
MessageBox(handle'友情连接添加成功!'pchar(caption),  mb_IconInformation);

        
//重置
        
Edt_title.Text := '';
        
Edt_url.Text := '';
        
Edt_pic.Text := '';
        
Edt_theorder.Text := '';
      
except
        MessageBox
(handle'友情连接添加失败!'pchar(caption),  mb_IconInformation);
      
end;

      
ReadLinkForm.Menu_Read_Link.Click;

    
end;
end;
?>
添加完了友情连接,我们来到ReadLinkForm,如图2-6



图2-6

该窗体有一个DataSource控件,以及一些按钮。主要事件有,读取友情连接,修改友情连接,删除友情连接。代码分别如下:

读取友情连接,构造Sql语句,返回数据显示在状态栏。

<?php
procedure TReadLinkForm
.Menu_Read_LinkClick(SenderTObject);
var
  
SqlStrstring;
begin
  SqlStr 
:= 'SELECT * FROM ' str_TablePre 'link ORDER BY `theorder` ASC';
  try
    
DataSource1.DataSet := ClientSettingForm.ZQuery1;
    
ClientSettingForm.Btn_DBConnect.Click;
    
ClientSettingForm.ZQuery1.SQL.Text := SqlStr;
    
ClientSettingForm.ZQuery1.Open;
    
StatusBar1.Panels[0].Text := '当前状态:查询友情连接成功';
    
StatusBar1.Panels[1].Text := '当前记录数:' inttostr(ClientSettingForm.ZQuery1.RecordCount) + ' 条';
  
except
    MessageBox
(handle'查询友情连接失败!'pchar(caption), mb_IconInformation);
    
StatusBar1.Panels[0].Text := '当前状态:查询友情连接失败';
    
StatusBar1.Panels[1].Text := '当前记录数:0 条';
  
end;
end;
?>
修改友情连接,获取当前选定的记录,显示到EditForm的相应Edit中, 并且显示EditForm。

<?php
procedure TReadLinkForm
.Menu_Edit_LinkClick(SenderTObject);
begin
  EditLinkForm
.Edt_id.Text := DBGrid1.Fields[0].Value;
  
EditLinkForm.Edt_title.Text := DBGrid1.Fields[1].Value;
  
EditLinkForm.Edt_url.Text := DBGrid1.Fields[2].Value;
  
EditLinkForm.Edt_pic.Text := DBGrid1.Fields[3].Value;
  
EditLinkForm.Edt_theorder.Text := DBGrid1.Fields[4].Value;
  
EditLinkForm.ShowModal;
end;
?>
删除友情连接,最后一次确认删除, 构造sql, 删除记录,然后从新读取数据库,这里直接调用读取友情连接按钮即可。

<?php
procedure TReadLinkForm
.Main_Del_LinkClick(SenderTObject);
var
  
SqlStrstring;
  
stridstring;
begin
  
if MessageBox(handle'确定删除该友情连接么?'pchar(caption),MB_YESNO) = IDYES then
    begin
      strid 
:= DBGrid1.Fields[0].Value;
      
//删除友情连接
      
SqlStr := 'DELETE FROM `' str_TablePre 'link` WHERE `id`=' strid;
      try
        
DataSource1.DataSet := ClientSettingForm.ZQuery1;
        
ClientSettingForm.Btn_DBConnect.Click;
        
ClientSettingForm.ZQuery1.SQL.Text := SqlStr;
        
ClientSettingForm.ZQuery1.ExecSQL;
        
StatusBar1.Panels[0].Text := '当前状态:删除友情连接成功';
      
except
        StatusBar1
.Panels[0].Text := '当前状态:删除友情连接失败';
        
MessageBox(handle'删除友情连接失败!'pchar(caption), mb_IconInformation);
      
end;
      
Menu_Read_Link.Click;
    
end;
end;
?>
接下是最后一个窗体EditLinkFrom,这个窗体类似AddLinkFrom,如图2-7。



图2-7

主要事件即为修改友情连接,判断标题是否为空,不为空的话则更新改条记录。

<?php
procedure TEditLinkForm
.Btn_Edit_LinkClick(SenderTObject);
var
  
link_titlelink_urllink_piclink_theorderlink_idstring;
  
SqlLSqlRstring;

  
//可否提交
  
CanInsertboolean;
begin
  CanInsert 
:= true;

  
link_url := Edt_url.Text;
  
link_pic := Edt_pic.Text;
  
link_theorder := Edt_theorder.Text;
  
link_id := Edt_id.Text;

  
//标题
  
link_title := Edt_title.Text;
  
link_title := CheckString(link_title200);

  if (
link_title ''then
    begin
      CanInsert 
:= false;
      
MessageBox(handle'友情连接标题不能为空!'pchar(caption),
        
mb_IconInformation);
    
end;

  if 
CanInsert then
    begin
      
//修改投票
      
SqlL := 'UpDATE `' str_TablePre 'link` SET';

      
//标题
      
SqlL := SqlL ' `title`=';
      
SqlL := SqlL '''' link_title ''',';

      
//类型
      
SqlL := SqlL '`url`=';
      
SqlL := SqlL '''' link_url ''',';

      
//类型
      
SqlL := SqlL '`pic`=';
      
SqlL := SqlL '''' link_pic ''',';

      
//类型
      
SqlL := SqlL '`theorder`=';
      
SqlL := SqlL '''' link_theorder '''';

      
SqlL := SqlL ' WHERE `id`=' link_id;
      try
        
ClientSettingForm.Btn_DBConnect.Click;
        
ClientSettingForm.ZQuery2.SQL.Text := SqlL SqlR;
        
ClientSettingForm.ZQuery2.ExecSQL;
        
MessageBox(handle'友情连接修改成功!'pchar(caption),mb_IconInformation);

        
//重置
        
Edt_title.Text := '';
        
Edt_url.Text := '';
        
Edt_pic.Text := '';
        
Edt_theorder.Text := '';
      
except
        Log
('友情连接修改失败');
        
MessageBox(handle'友情连接修改失败!'pchar(caption), mb_IconInformation);
      
end;

      
ReadLinkForm.Menu_Read_Link.Click;

    
end;
end;
?>
这样就完成了所有的操作

最终显示结果抓图:



修改



再次显示主页

2006-10-11 09:30 PM#1
查看资料  Blog  发短消息  顶部
 
good8
新手上路
Rank: 1
初级会员



UID 23064
精华 0
积分 34
帖子 71
金钱 34 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2003-9-8
状态 离线
[推荐阅读] 关羽不是草包
好,顶啦!



售www.zh-cn.cn
2006-10-11 09:46 PM#2
查看资料  发短消息  顶部
 
菜鸟也要有理想
中级会员
Rank: 3Rank: 3
一般会员



UID 65342
精华 0
积分 439
帖子 426
金钱 439 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2005-8-1
状态 离线
[推荐阅读] 招聘网站开发主管(上海)
这个东西教程还是写服务端的后台事物处理比较好啊
比如定时执行php什么的
2006-10-12 05:00 AM#3
查看资料  发短消息  顶部
 
Zerolone
新手上路
Rank: 1
初级会员



UID 67622
精华 0
积分 7
帖子 5
金钱 7 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2005-12-30
状态 离线
[推荐阅读] make php时出错,请高手相助
漏了一个index.php的代码

<?php
//友情连接
//-----------------0-------1------2
$SqlStr    ='SELECT `title`, `url`, `pic`  FROM '.table_pre.'link WHERE Pic !='' ORDER BY theorder ASC,id DESC LIMIT 0,8';
//echo $SqlStr;
$temp_query query($SqlStr);
while(
$DB_Record nqfetch($temp_query))
{
    
$link_name        $DB_Record[0];
    
$link_url            $DB_Record[1];
    
$link_pic            $DB_Record[2];
    
$link_list[] = array(
    
'link_name'        => $link_name,
    
'link_url'        => $link_url,
    
'link_pic'        => $link_pic
    
);
}
?>
2006-10-12 10:07 AM#4
查看资料  Blog  发短消息  顶部
 
菜鸟也要有理想
中级会员
Rank: 3Rank: 3
一般会员



UID 65342
精华 0
积分 439
帖子 426
金钱 439 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2005-8-1
状态 离线
[推荐阅读] 各位高手们抽点时间:关于博客表的设计
可以看到图片了
感觉好厉害
2006-10-12 10:53 AM#5
查看资料  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.050760 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP