标题:[转载]AJAX for PHP简单表数据查询实例
只看楼主
ajaxtoday
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-11-25
 问题点数:0 回复次数:3 
[转载]AJAX for PHP简单表数据查询实例

AJAX for PHP简单表数据查询实例

功能介绍:AJAX WebShop 3Beta2开始支持PHP的开发了,AJAX WebShop集成了PHP5的开发环境,因此不需要额外安装配置PHP,本例将实现一个AJAX for PHP的简单数据查询操作,这个例子是单表操作,也可以实现主从表的数据查询。

.数据表说明

例子采用了Access数据库,当然你也可以使用mysql 或其他类型数据库,数据库名称为:demo.mdb,表名为product,创建字段分别是PRODUCT_ID, PRODUCT_NAME, PRODUCT_PRICE, PRODUCT_AREA

.实现数据查询

首先启动AJAX WebShop 3,在File中选择“New Project”建立新工程。

在弹出的New Project对话框中设置projectname web server本例中设置projectname为:php_example和设置web server为:PHP。如果要修改工程路径,请在Directory中设置要存放的路径。

设置好New Project后,再打开“File”选择“New .PHP Service”,在弹出的对话框内目录输入子目录demo,设置”Class Name”为:simple_query;在ServiceType中选择“Query Data”点击“OK“后,向导将按默认模板生成php单表查询的代码。

输入以下数据库连接及sql代码(demo.mdb文件放在当前代码目录下)

$connstr = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=".realpath($_SERVER['PATH_TRANSLATED'])."\demo.mdb";

$sql = "select * from product";

$sqlcount = "select count(*) from product";

分析testquery.php代码,主要的实现如下:

1. 循环数据结构,用addField$xmlRequest填充字段(列):

//fill metadata fields

for ($i=1; $i<=$fields_count; $i++) {

$fieldname = odbc_field_name($result_id, $i);

$datatype = odbc_field_type($result_id, $i);

$xmlRequest->addField($fieldname, $datatype);

}

2. 循环结果集记录,调用Append() SetValue方法,向xmlrequest每一行对应字段填充数据:

//fill data rows

for ($i=0; $i<$record_count; $i++) {

odbc_fetch_row($result_id);

if($i>=$recNo && $i<$recNo+$maxRows) {

$xmlRequest->append();

for ($j=1; $j<=$fields_count; $j++) {

$xmlRequest->setValueByIndex($j-1, odbc_result($result_id, $j));

}

}

if($i>=$recNo+$maxRows) break;

}

3. 设置分页的相关参数,$xmlRequest->recNo是开始记录,$xmlRequest->maxRows是每页记录数,通过执行"select count(*) from product"得到$record_count记录总数:

$sqlcount = "select count(*) from product";

$result_id = @odbc_do($connid, $sqlcount);

if($result_id==null)

throw new Exception($sqlcount);

odbc_fetch_row($result_id);

$record_count = odbc_result($result_id,1);

$xmlRequest->setRecordCount($record_count);

$recNo = $xmlRequest->recNo;

$maxRows = $xmlRequest->maxRows;

if($maxRows==-1) $maxRows = $record_count;

后台数据访问类建立好后,在“File”中选择“New Page”打开“New Page”对话框在“File Name”中设置页面名称,如本例“simple.htm”点击ok完成设置。


webshop的元件选项板“Data Access ”,“DBControl”中,拖拉向表单加入DataSet和数据感应控件DBNavigatorDBEditDBGrid等,简单地可视化拖拉建立界面,点击组件,会在右侧出现相应属性。

选择DataSet1,在“OpenURL”属性中添加web service名“demo/simple_query.php”。

打开WebShop中的“Run”启动”Start WebServer”服务,Apache HttpServer将启动。

成功启动 WebServer”服务后,在DataSet1的“Fields”属性中添加数据字段,方法为点击右侧“”弹出Fields对话框,在页面单击右键,在弹出选项中选择“Add Field”在弹出的“Field List”中点击 “Refresh”会在列表中显示数据表 Product ”的字段名,全部选中后,点击“ok”完成设置(操作见下图)。

设置好数据连接后,“DataSet1的“Active”属性设置为“true”如图;

  同时选择DBGrid1DBNavigatorDBEdit等界面对象,在DataSet属性中选择数据源 “DataSet1”。完成数据库连接;另外,DBEdit需要选择设置DataField属性,指定要绑定的字段,点击“run”查看运行效果。

还有很多功能可以很简单的实现,这里就不一一介绍了,以后有时间我再说说如何做数据提交、分页及更复杂的主从表等数据操作。

下面附上详细的代码清单,供读者参考。

<?php

/**

* Title:

* Description:

* Copyright: Copyright (c) 2006

*

* $Author:

* $Date:

* $Revision:

*/

header("Content-Type:text/xml");

require_once('../joyistar/XmlRequest.php');

$postdata = file_get_contents("php://input");

$xmlRequest = new XmlRequest();

$xmlRequest->open($postdata);

try {

$connstr = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=".realpath($_SERVER['PATH_TRANSLATED'])."\demo.mdb";

$sql = "select * from product";

$connid = @odbc_connect($connstr,"","",SQL_CUR_USE_ODBC ) or die ("db connect error!");

$sqlcount = "select count(*) from product";

$result_id = @odbc_do($connid, $sqlcount);

if($result_id==null)

throw new Exception($sqlcount);

odbc_fetch_row($result_id);

$record_count = odbc_result($result_id,1);

$xmlRequest->setRecordCount($record_count);

$recNo = $xmlRequest->recNo;

$maxRows = $xmlRequest->maxRows;

if($maxRows==-1) $maxRows = $record_count;

$result_id = @odbc_do($connid, $sql);

if($result_id==null)

throw new Exception($sql);

$fields_count = odbc_num_fields($result_id);

//fill metadata fields

for ($i=1; $i<=$fields_count; $i++) {

$fieldname = odbc_field_name($result_id, $i);

$datatype = odbc_field_type($result_id, $i);

$xmlRequest->addField($fieldname, $datatype);

}

//fill data rows

for ($i=0; $i<$record_count; $i++) {

odbc_fetch_row($result_id);

if($i>=$recNo && $i<$recNo+$maxRows) {

$xmlRequest->append();

for ($j=1; $j<=$fields_count; $j++) {

$xmlRequest->setValueByIndex($j-1, odbc_result($result_id, $j));

}

}

if($i>=$recNo+$maxRows) break;

}

odbc_close($connid);

echo $xmlRequest->getXml();

}

catch (Exception $e) {

$xmlRequest->setError($e->getTraceAsString());

echo $xmlRequest->getXml();

throw $e;

}

?>


原文转自http://cn.joyistar.com
搜索更多相关主题的帖子: AJAX 表数据 Roman 
2006-12-30 16:37
kyoshingo
Rank: 1
等 级:新手上路
帖 子:88
专家分:0
注 册:2006-3-18
得分:0 
这东西在哪下啊

叶子的离去,不是因为风的招唤,而是树的舍弃
2007-01-09 15:39
kyoshingo
Rank: 1
等 级:新手上路
帖 子:88
专家分:0
注 册:2006-3-18
得分:0 
软件我有了,有没有他的注册码啊?

叶子的离去,不是因为风的招唤,而是树的舍弃
2007-01-09 16:13
ajaxtoday
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-11-25
得分:0 
不用注册码也可以用的,我就没用注册的,只是按照他们的产品协议,用作商业开发的要收费的,自己开发是免费的!!!
2007-02-05 12:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-113225-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.770964 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved