php与delphi通过XML进行数据交互

说明:自己暂时备份的,是部分代码,对别人没有参考价值,六待以后整理


<?php

require_once 'xt_var.php';

/*
* 返回值说明:
    1000: 接收数据成功;
    1001: 接收数据失败,失败原因:菜品名称不能为空;
    1002: 接收数据失败,失败原因:菜品名称价格不能为空;
    1003: 云服务器插入数据失败;
    2000: 接收图片成功;
    2001: 接收图片失败;
    3000: 更新字典表成功
    3001: 更新字典表失败
*/

$dataObj = new dataUploadObject();
$dataObj->updateData();   //同步信息到数据库
/*if (isset($_POST['xmlstr'])) {
$dataObj->updateData();   //同步信息到数据库
}
else if(is_uploaded_file($_FILES['myfile']['tmp_name'])) {
$dataObj->updateDishImage();   //同步菜品图片到服务器
}*/

class dataUploadObject
{
public function updateData()
{
//$postObj = simplexml_load_string($_POST['xmlstr'], 'SimpleXMLElement', LIBXML_NOCDATA);
$postObj = simplexml_load_file("bb.xml", 'SimpleXMLElement', LIBXML_NOCDATA);
$message_type = $postObj->head->field[0]["name"];   //发送消息的类型

switch ($message_type) 
{
case "send":
$receiveData = new receiveDataObj();  //处理接收数据
$receiveData->updateDataToDB($postObj);
break;
case "getData":
$sendData = new sendDataObj();  //发送数据
$sendData->sendXml($postObj);
break;
case "getResult":
$dealResultSend = new dealResultSendObj(); //处理发送数据时返回的结果
$dealResultSend->updateByResult($postObj);
break;
default:
break;
}

}


public function updateDishImage()
{
$upfile=$_FILES["myfile"];
//获取数组里面的值
$name=$upfile["name"];//上传文件的文件名
$type=$upfile["type"];//上传文件的类型
$size=$upfile["size"];//上传文件的大小
$tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径

//把上传的临时文件移动到up目录下面
move_uploaded_file($tmp_name,"imageDishes/".$name);
$error=$upfile["error"];//上传后系统返回的值
if($error==0){
echo "1";
}
else
{
echo "0";
}
}
 
}

class receiveDataObj
{
public function updateDataToDB($postObj)
{
$item_str = "";

$col = $postObj->body->col;
for($i=0; $i<count($col); $i++)
{
$sql_field_name = "";
$sql_field_value = "";

$col_name = $col[$i]["name"];
$field = $col[$i]->field;
$id = "0";


for($j=0; $j<count($field); $j++)
{
if ("id" == $field[$j]["name"]) {
$id = $field[$j]["value"];  //获取ID
}
$sql_field_name .= $field[$j]["name"].",";  //取表的字段名
$sql_field_value .= "'".$field[$j]["value"]."',";  //字段对应的值

}

$sql_field_name = substr($sql_field_name, 0, strlen($sql_field_name)-1);
$sql_field_value = rtrim($sql_field_value, ",");

//$res = $this->transmitSql($col_name, $sql_field_name, $sql_field_value);  //构造sql,并写入数据库
$res = true;
if ($res) {
$item_str .= $this->transmitReturnXml($id, "1", "云平台接收数据成功");
} else 
$item_str .= $this->transmitReturnXml($id, "0", "云平台接收数据失败");
}

echo "<msg>$item_str</msg>";

}


private function transmitSql($table_falg, $fieldStr, $valueStr)
{
$db_connect = get_sql_connection();
$table_name = getTableName($table_falg);  //查询接收数据的表名

$sql_insert = "insert into ".$table_name." (".$fieldStr.") values (".$valueStr.")";
$result=mysql_query($sql_insert, $db_connect);

return $result; 
}

private function transmitReturnXml($id, $resultCode, $resultMsg)
{
$itemTpl ="<result>
   <id>%s</id>
   <resultCode>%s</resultCode>
   <resultMsg>%s</resultMsg>
</result>";

$item_str = sprintf($itemTpl, $id, $resultCode, $resultMsg);
return $item_str;
}
}

class sendDataObj
{
public function sendXml($postObj)
{
$col = $postObj->body->col;
$col_name = $col[0]["name"];
$table_name = getTableName($col_name);  //查询接收数据的表名

$db_connect = get_sql_connection();
$res_data=mysql_query("select * from ".$table_name." where 1=1 ", $db_connect);
$res_column = mysql_query("select column_name, data_type from information_schema.columns where table_name='".
$table_name."'", $db_connect);  //查询表的字段名
$result = $this->buildDataXml($res_data, $res_column);  //构造xml
echo $result;
}

private function buildDataXml($res_data, $res_column)
{
$_doc = new DOMDocument( '1.0' , 'utf-8' );  // 声明 xml
$_doc ->formatOutput = true ;  // 排版格式

$_root = $_doc ->createElement('msg');  // 创建一个主标签
$_head = $_doc ->createElement('head');  // 创建一个一级标签 head
$_body = $_doc->createElement("body");  // 创建另一个一级标签 body

$_head_field = $_doc ->createElement('field');  // 创建一个一级标签 head下的二级标签 field
$_head_field->setAttribute("name", "getData");  //添加属性
$_head_field->setAttribute("date", date("y-m-d h:i:s",time()));

$_head->appendChild($_head_field);  //将二级标签 field 放入 head 中

if ($myrow = mysql_fetch_array($res_data))
{
while ($myrow = mysql_fetch_array($res_data))
   {
$_body_col = $_doc->createElement('col');  // 创建一个一级标签 body下的二级标签 col
$_body_col->setAttribute("name", "dish_info");  //添加属性

$_body->appendChild($_body_col);  //将二级标签 col 放入 body 中

mysql_data_seek($res_column,0);  //定位到第一行
while ($mycol = mysql_fetch_array($res_column))
{
$_body_col_field = $_doc->createElement('field');  // 创建一个二级标签 col下的三级标签field
$_body_col_field->setAttribute("name", $mycol["column_name"]);  //添加属性
$_body_col_field->setAttribute("type", $mycol["data_type"]);  //添加属性
$_body_col_field->setAttribute("value", $myrow[$mycol["column_name"]]);  //添加属性

$_body_col->appendChild($_body_col_field);      //将三级标签field放入col中

}
   }
}

$_root ->appendChild( $_head );  // 将一级标签 head 放入 root 里
$_root ->appendChild( $_body );  // 将一级标签 body 放入 root 里
$_doc ->appendChild( $_root );  // 将主标签写入 xml

// 生成 xml
$_doc ->save( 'aaa.xml' );
   return $_doc->saveXML();  //输出字符串
}
}

class dealResultSendObj
{
public function updateByResult($postObj)
{
$col = $postObj->body->col;
for($i=0; $i<count($col); $i++)
{
$col_name = $col[$i]["name"];
$field = $col[$i]->field;
$table_name = getTableName($col_name);  //查询接收数据的表名

$id = $field[0]["id"];
$field_value = $field[0]["value"];

$send_time = date("y-m-d h:i:s",time());
$sql_str = "update $table_name set if_send='$field_value', send_time = '$send_time' ".
" where id = '$id'";

$db_connect = get_sql_connection();
$result=mysql_query($sql_str, $db_connect);
}
}
}

/*根据xml的col节点的name属性获取数据库表名*/
function getTableName($col_name)
{
$sql_zxt_table = "select table_name from zxt_send_receive where col_name = '".$col_name."'";
$db_connect = get_sql_connection();
$res=mysql_query($sql_zxt_table,$db_connect);
$myrow = mysql_fetch_array($res);

return $myrow[0];  //查询接收数据的表名
}

?>


<?php

  global $head_title;
  
  function get_sql_connection() 
  {
  $program_char = "utf8";
 
  /*连本地数据库*/
  $username=root;
  $userpass=password123;
  $dbhost=localhost;
  $dbdatabase=dishes;
 
  /*连新浪mysql*/
  /*$username=SAE_MYSQL_USER;
  $userpass=SAE_MYSQL_PASS;
  $dbhost=SAE_MYSQL_HOST_M.":".SAE_MYSQL_PORT;
  $dbdatabase=SAE_MYSQL_DB;*/
 
  try {
  $db_connect=mysql_connect($dbhost,$username,$userpass) or die("Unable to connect to the MySQL!");
  mysql_select_db($dbdatabase,$db_connect);
   
  mysql_set_charset($program_char, $db_connect);
 
  } catch (Exception $e) {
  echo 'Caught exception: ',  $e->getMessage(),'<br>';
  }
 
 
  return $db_connect;
  }
  
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值