技术开发 频道

在PHP与DB2 9中使用Ajax:Xajax

  定义用于用户名和密码的变量:

 

  $user = 'db2';

  $password
= 'db2admin';

 

  使用 PDO 构造函数获得与 DB2 数据库的一个连接:

 

  $connection = new PDO('odbc:SAMPLE', $user, $password);

 

  如果连接成功,PDO 构造函数返回一个 DB2 数据库连接资源。准备一个 SQL 预置语句,该 SQL 语句从 Catalog 表中选择与表单中输入的 catalog id 值对应的一行。使用 prepare ( string statement [, array driver_options] ) 函数编译预置语句:

 

  $stmt = $connection->prepare("SELECT * from DB2.CATALOG WHERE CATALOGID=?");

 

  使用 PDO::ATTR_CURSOR 属性将游标设置为可滚动游标:

 

  $stmt ->setAttribute(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL);

 

  使用 bindParam() 方法绑定 CatalogId 参数:

 

  $stmt->bindParam(1, $catalogId);

 

  用 execute ( [array input_parameters] ) 函数执行预置语句中的 SQL 查询:

 

  $stmt->execute();

 

  使用 fetch ( [int fetch_style [, int cursor_orientation [, int cursor_offset]]] ) 函数获取结果集中的行:

 

  $row = $stmt->fetch();

 

  如果被请求的行存在,则 fetch() 函数返回 TRUE,如果被请求的行不存在,则返回 FALSE。如果 fetch() 返回 FALSE,则结果集为空,表明数据库表中还没有为 catalog id 值定义一个 Catalog 表行。因此,表单中添加的 Catalog Id 字段值是有效的。接下来,生成一个发送到客户机应用程序的响应。一个响应包含一个或多个命令消息。表 1 讨论了一些常用的命令消息:

  表 1. xajaxResponse 命令消息

  命令消息描述

  Assign使用方法 addAssign(string elementId, string attribute, string data) 设置输入页面中一个元素的指定属性

  Append使用方法 addAppend(string elementId, string attribute, string data) 将数据附加到输入页面中一个元素的指定属性

  Prepend使用方法 addPrepend(string elementId, string attribute, string data) 将数据设置为输入页面中一个元素的指定属性的预定值

  Replace使用方法 addReplace(string elementId, string attribute, string replace, string data) 替换输入页面中一个元素的指定属性中的数据

  Script使用方法 addScript(string javascript) 运行指定的 JavaScript 代码

  Alert使用方法 addAlert(string message) 显示包含指定消息的警告对话框

  如果 fetch() 方法返回 FALSE,则 validationMessage div 中显示消息:"Catalog Id is Valid"。addAssign 方法设置 validationMessage div 的 innerHTML。

 

  $objResponse->addAssign("validationMessage","innerHTML","Catalog Id is Valid");

 

  如果 fetch() 函数返回 TRUE,则 Catalog 表中已经定义了这个 catalog id 值。 因此,输入表单中添加的 Catalog Id 值是无效的。如果 fetch() 方法返回一行,则将 validationMessage div 的 innerHTML 设置为 “Catalog Id is not Valid”:

  $objResponse->addAssign("validationMessage","innerHTML","Catalog Id is not Valid");

  接下来,从结果集行中取值,设置输入表单字段中的值。fetch() 函数将结果集指针指向下一行。

  用 $row[mixed column] 函数从结果集行中获取字段值。column 参数可以指定为列索引(从 0 开始计数)或列名。例如,journal 列值可以用以下清单中的 PHP 代码获得:

 

  $journal=$row['JOURNAL'];

 

  用 addAssign 方法设置输入表单字段元素的 value 属性。例如,像下面这样设置 journal 元素的 value 属性:

  $objResponse->addAssign("journal","value",$journal);

  此外,禁用 submit 按钮:

 

  $objResponse->addAssign("submitForm","disabled",true);

 

  从 validateCatalogId 函数以 XML 字符串的形式返回 $objResponse 对象:

 

  return $objResponse->getXML();

 

  XML 响应被发送至 xajax 处理程序,后者将 XML 响应发送至 xajax 的 JavaScript 消息泵。消息泵解析 XML 指令,并设置输入页面中的元素。因此,在 $xmlResponse 对象中用 addAssign 方法指定的数据被设置到输入表单中。

  updateCatalog($formValues) 函数用于根据输入表单更新数据库表 Catalog。如果 Catalog Id 字段值有效,则为 表单的其他字段添加值,以创建一个新的类别条目。单击 Create Catalog 按钮提交表单。onsubmit 事件处理程序调用包装器函数 xajax_updateCatalog,后者发送一个 XMLHttpRequest 到服务器:

 

  onsubmit="xajax_updateCatalog(xajax.getFormValues('validationForm'));"

 

  xajax 对象接收 XMLHttpRequest,并调用相应的 PHP 函数 updateCatalog($formValues)。在 updateCatalog 函数中,获取表单字段值,并创建一条 SQL 语句,以便将一行添加到数据库表 Catalog 中。获得与数据库的连接,并运行 SQL 语句。清单 2 中列出了 input.php 脚本:

  清单 2. input.php

  <?php require('./xajax/xajax_0.2.4/xajax.inc.php');

  $xajax
= new xajax();

  $xajax
->cleanBufferOn();

  $xajax
->registerFunction("validateCatalogId");

  $xajax
->registerFunction("updateCatalog");

  
function validateCatalogId($formValues){

  $objResponse
= new xajaxResponse();

  $catalogId
=trim($formValues['catalogId']);

  $user
= 'db2';

  $password
= 'db2admin';

  $connection
= new PDO('odbc:SAMPLE', $user, $password);

  $stmt
= $connection->prepare("SELECT * from DB2.CATALOG WHERE CATALOGID=?");

  $stmt
->setAttribute(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL);

  $stmt
->bindParam(1, $catalogId);

  $stmt
->execute();

  $row
= $stmt->fetch();

  
if(!$row){

  $objResponse
->addAssign("validationMessage","innerHTML","Catalog Id is Valid");

  $objResponse
->addAssign("submitForm","disabled",false);

  $objResponse
->addAssign("journal","value","");

  $objResponse
->addAssign("section","value","");

  $objResponse
->addAssign("edition","value","");

  $objResponse
->addAssign("title","value","");

  $objResponse
->addAssign("author","value","");

  }

  
if($row){

  $objResponse
->addAssign("validationMessage","innerHTML",

  
"Catalog Id is not Valid");

  $catalogId
=$row['CATALOGID'];

  $journal
=$row['JOURNAL'];

  $section
=$row['SECTION'];

  $edition
=$row['EDITION'];

  $title
=$row['TITLE'];

  $author
=$row['AUTHOR'];

  $objResponse
->addAssign("journal","value",$journal);

  $objResponse
->addAssign("section","value",$section);

  $objResponse
->addAssign("edition","value",$edition);

  $objResponse
->addAssign("title","value",$title);

  $objResponse
->addAssign("author","value",$author);

  $objResponse
->addAssign("submitForm","disabled",true);

  }

  return $objResponse
->getXML();

  }

  
function updateCatalog($formValues){

  $catalogId
=trim($formValues['catalogId']);

  $journal
=trim($formValues['journal']);

  $section
=trim($formValues['section']);

  $edition
=trim($formValues['edition']);

  $title
=trim($formValues['title']);

  $author
=trim($formValues['author']);

  $user
= 'db2';

  $password
= 'db2admin';

  $connection
= new PDO('odbc:SAMPLE', $user, $password);

  $sql
= "INSERT INTO DB2.Catalog

  VALUES(
'".$catalogId."','".$journal."','".$section."','".$edition."','".

  $title.
"','".$author."')";

  $r
=$connection->exec($sql);

  $connection
->commit();

  echo
"Added $r rows.n";

  }

  $xajax
->processRequests();

  ?
>

  
<head>

  
<?php $xajax->printJavascript('./xajax/xajax_0.2.4');

  ?
>

  
</head>

  
<body>

  
<h1>Form to Create a Catalog Entry</h1>

  
<form id="validationForm" name="validationForm" onsubmit=

  
"xajax_updateCatalog(xajax.getFormValues('validationForm'));">

  
<table>

  
<tr><td>Catalog Id:</td><td><input  type="text"

  size
="20"

  id
="catalogId"

  name
="catalogId"

  autocomplete
="off"

  onkeyup
="xajax_validateCatalogId(xajax.getFormValues('validationForm'));"></td>

  
<td><div id="validationMessage"></div></td>

  
</tr>

  
<tr><td>Journal:</td><td><input  type="text"

  size
="20"

  id
="journal"

  name
="journal"></td>

  
</tr>

  
<tr><td>Section:</td><td><input  type="text"

  size
="20"

  id
="section"

  name
="section"></td>

  
</tr>

  
<tr><td>Edition:</td><td><input  type="text"

  size
="20"

  id
="edition"

  name
="edition"></td>

  
</tr>

  
<tr><td>Title:</td><td><input  type="text"

  size
="20"

  id
="title"

  name
="title"></td>

  
</tr>

  
<tr><td>Author:</td><td><input  type="text"

  size
="20"

  id
="author"

  name
="author"></td>

  
</tr>

  
<tr><td><input  type="submit"

  value
="Create Catalog"

  id
="submitForm"

  name
="submitForm"></td>

  
</tr>

  
</table>

  
</form>

  
</body>

  
</html>
0
相关文章