61阅读

简单再生产的实现条件-PHP实例:用PHP简单实现多条件查询

发布时间:2017-11-24 所属栏目:webim

一 : PHP实例:用PHP简单实现多条件查询

在我们的网站设计过程中,经常会用到多条件查询,本文的源码是一个二手房屋查询的例子。在本例中,我们要实现能够通过地理位置,物业类型,房屋价格,房屋面积及信息发布日期等多个条件查询到客户所需的资料。

查询文件(search.php)

一、生成查询语句:

以下为引用的内容:
<?
$conn=mysql_connect("localhost","root","");
$db=mysql_select_db("lingyun");
$query="select * from message where tradetype='".$tradetype."'";  //交易类型,如出租,出售
$SQL=$SQL . "wuye='" . $wuye . "'";
if($housetype!="不限"){
$query.=" && housetype='".$housetype."'"; //房屋类型,如二室一厅,三室二厅
}
if($degree!="不限"){
$query.=" && degree='".$degree."'";  //新旧程度
}
if($wuye!="不限"){
$query.=" && wuye='".$wuye."'";   //物业类型 如住房,商铺
}
if($price2!=""){
switch($price1){
case "大于":
$query.=" && price>'".$price2."'";   //价格
break;
case "等于":
$query.=" && price='".$price2."'";
break;
case "小于":
$query.=" && price<'".$price2."'";
break;
}
}
if($area2!=""){
switch($area1){
case "大于":
$query.=" && area>'".$area2."'";  //面积
break;
case "等于":
$query.=" && area='".$area2."'";
break;
case "小于":
$query.=" && area<'".$area2."'";
break;
}
}
switch($pubdate){                   //发布日期
case "本星期内":
$query.=" && TO_DAYS(NOW()) - TO_DAYS(date)<=7";
break;
case "一个月内":
$query.=" && TO_DAYS(NOW()) - TO_DAYS(date)<=30";
break;
case "三个月内":
$query.=" && TO_DAYS(NOW()) - TO_DAYS(date)<=91";
break;
case "六个月内":
$query.=" && TO_DAYS(NOW()) - TO_DAYS(date)<=183";
break;
}
if($address!=""){
$query.=" &&  address like '%$address%'";  //地址
}
if(!$page){
$page=1;
}
?>

二、输出查询结果:

以下为引用的内容:

<?php
     if ($page){
     $page_size=20;
     $result=mysql_query($query);
     #$message_count=mysql_result($result,0,"total");
     $message_count=10;
     $page_count=ceil($message_count/$page_size);
     $offset=($page-1)*$page_size;
     $query=$query." order by date desc limit $offset, $page_size";
     $result=mysql_query($query);
     if($result){
     $rows=mysql_num_rows($result);
     if($rows!=0){
     while($myrow=mysql_fetch_array($result)){
     echo "<tr>";
     echo "<td width='15' height='12'><img src='image/home2.gif' width='14' height='14'></td>";
     echo "<td width='540' height='12'>$myrow[id]&nbsp;$myrow[tradetype]&nbsp;$myrow[address]&nbsp;$myrow[wuye]($myrow[housetype])<font style='font-size:9pt'>[$myrow[date]]</font>";
     echo "</td>";
     echo "<td width='75' height='12'><a href='view_d.php?code=$myrow[code]' target='_blank'>详细内容</a></td>";
     echo "</tr>";
         }
       }
     else echo "<tr><td><div align='center'><img src='image/sorry.gif'><br><br>没有找到满足你条件的记录</div></td></tr>";
     }
         $prev_page=$page-1;
         $next_page=$page+1;
         echo "<div align='center'>";
         echo "&nbsp;第".$page."/".$page_count."页&nbsp";
         if ($page<=1){
             echo "|第一页|";
            }
         else{
             echo "<a href='$PATH_INFO?page=1'>|第一页|</a>";
             }
         echo " ";
         if ($prev_page<1){
             echo "|上一页|";
            }
         else{
             echo "<a href='$PATH_INFO?page=$prev_page'>|上一页|</a>";
             }
         echo " ";
         if ($next_page>$page_count){
             echo "|下一页|";
             }
         else{
             echo "<a href='$PATH_INFO?page=$next_page'>|下一页|</a>";
              }
         echo " ";
         if ($page>=$page_count){
             echo "|最后一页|";
               }
         else{
             echo "<a href='$PATH_INFO?page=$page_count'>|最后一页|</a>";
             }
        echo "</div>";
    }
     else{
         echo "<p align='center'>现在还没有房屋租赁信息!</p>";
       }
   echo "<hr width="100%" size="1">";
  ?>
    </table>

二 : WEBIM的简单实现

实现原理

   实现webim方法有很多,最关键的问题是保持和服务端的连接。[www.61k.com)如何保障会话的即时性和连通性。常用的有poll, long poll, comet等;; 其中poll的方式效果最差,一般都会有1到2秒的延迟。long poll和comet技术比较新,因为http无状态的原因,这种长连接方式要保持,一般都需要服务端额外代码提供支持。像gtalk采用的就是long poll的方式。服务端常会使用异步IO等方式来支持高并发。

   本文使用的是XEP标准扩展规范,XEP-0124 提供的方法实现WebIM. 思路即使用一个javascript的xep-0124的实现,直接连接xmpp server端。目前xep-0124的实现,在大部分的xmpp server实现中都支持,本文使用的是OpenFire 3.6.4 作为Xmpp Server。

   XEP 0124规范定义了一个比较完整和安全的协议,具体请参阅相当文档。本文使用javascript端的XEP-0124的实现为Strophe的js实现。

   另外因为浏览器javascript跨域问题,需要使webim里调用javascript也是80端口,并同一子域,所以使用Apache或者Nginx 在80端口,并转发/http-bind请求至Xmpp Server的http-binding端口。本机使用Nginx. xmpp server 使用使用7070端口。 结构为:

   Web UI page.html 

      || 

      || strophe.js Ajax request /http-bind/

      ||

      >

   Nginx/Apache port: 80 /http-bind/

      ||

      ||

      >

    XMPP Server http-bind port (OF: 7070) /http-bind/

安装准备

   下载OpenFire 3.6.4并安装。http://www.igniterealtime.org/downloads/index.jsp

   下载Strophe的javascript库 http://code.stanziq.com/cgit/strophe/strophejs/snapshot/strophejs-master.tar.gz

   下载Nginx或者Apache并安装配置。只需一个,作为80端口服务的代理转发服务器。

安装配置

  OpenFire的配置

   需要打开OpenFire的http-binding.具体为登录后台管理界面。Server->Server Settings->Http Binding:

   这一项打勾  Enabled - Clients can connect to this server using HTTP binding.

   下面Script Syntax :

   这一项打勾 Enabled - Allows BOSH clients with limited access to connect to the server

   端口按默认的。

    

WebIM WEBIM的简单实现

  Nginx的配置

   打开nginx的配置文件nginx.conf,增加如下行:

 #gzip on;

#增加

  upstream bk.openfire {

     server 127.0.0.1:7070;

   }

location / {

       root html;

       index index.html index.htm;

}

后面增加 :

location /http-bind {

       proxy_pass http://bk.openfire;

       proxy_buffering off;

       proxy_redirect off;

       proxy_read_timeout 120;

       proxy_connect_timeout 120;

}

黑字为原来的配置, 红色为需要增加的行。

  Apache的配置

在 httpd.conf 中加入下面几行:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

ProxyRequests Off
ProxyPass /http-bind http://127.0.0.1:7070/http-bind/
ProxyPassReverse /http-bind http://127.0.0.1:7070/http-bind/

注:需要apache有编译proxy模块。

编写WebIM

   上面就把服务器配置好了,下面我们来开发我们的简易版的纯WEB的IM.

   解压strophejs-master.tar.gz,后,可以得到 b64.js , md5.js sha1.js strophe.js ,这是我们要用到的几个js基础类库。在我们的页面中将引用。里面自带了一个examples目录,也可以学习里面的例子,以熟悉strophe的语法。

   我这个例子,就从echobot.html这个example里修改得到。

   具体的UI布局部分省略,都是基本的html元素加上几个样式,看代码就清楚。

   Strophe是一个优秀的xep-0124类库,使用它非常方便地就集成了。

   Strophe建立连接

   以下代码在echobot.js中。

   代码1:使用Strophe建立服务端连接

扩展:简单文件系统的实现 / webserver的简单实现 / 简单再生产的实现条件

   

function onConnect(status)

{

   if (status == Strophe.Status.CONNECTING) {

log('Strophe is connecting.');

   } else if (status == Strophe.Status.CONNFAIL) {

log('Strophe failed to connect.');

$('#connect').get(0).value = 'connect';

   } else if (status == Strophe.Status.DISCONNECTING) {

log('Strophe is disconnecting.');

   } else if (status == Strophe.Status.DISCONNECTED) {

log('Strophe is disconnected.');

$('#connect').get(0).value = 'connect';

   } else if (status == Strophe.Status.CONNECTED) {

log('Strophe is connected.');

connection.addHandler(onMessage, null, 'message', null, null, null);

connection.send($pres().tree());

   }

}

connection = new Strophe.Connection(BOSH_SERVICE);

   connection.rawInput = rawInput;

   connection.rawOutput = rawOutput;

   //Strophe.log = function (level, msg) { log('LOG: ' + msg); };

   $('#connect').bind('click', function () {

var button = $('#connect').get(0);

if (button.value == 'connect') {

  button.value = 'disconnect';

     fromId = $('#jid').val();

     toId = $('#tojid').val();

     log(fromId);

     log(toId);

  connection.connect($('#jid').get(0).value,

   $('#pass').get(0).value,

   onConnect);

} else {

  button.value = 'connect';

  connection.disconnect();

}

   });

以上代码说明:

BOSH_SERVICE : 这是xmpp server 的http binding的url地址。注:Openfire为: http://127.0.0.1:7070/http-bind/ 我们需要使用Apache或者nginx作Proxy转发,所以这里配置是 "/http-bind/" 。

使用Connection.connect方法连接OF服务器,传入用户名、密码、以及连接成功的回调函数onConnect三个参数。

connection.addHandler(onMessage, null, 'message', null, null, null); 

这是连接成功后,增加一个处理消息的回调函数。当收到消息时,会调用onMessage函数。

  代码2:onMessage()函数

function onMessage(msg) {

   to = msg.getAttribute('from');

   var from = msg.getAttribute('from');

   var type = msg.getAttribute('type');

   var elems = msg.getElementsByTagName('body');

   if (type == "chat" && elems.length > 0) {

  var body = elems[0];

   appendToHis(new Date().toLocaleTimeString() + ' ' + from + ' say: ' + Strophe.getText(body));

   }

   // we must return true to keep the handler alive.

   // returning false would remove it after it finishes.

   return true;

}

  这里,msg是收到的消息,使用Strophe.getText(body) 这行,返回了收到的IM消息。

  msg里还有一些其它的内容,如果你关心,可以接着处理它。

  Strophe发送消息

   

msg=$('#msg').val();

toId = $('#tojid').val();

var reply = $msg({to: toId, from: fromId , type: 'chat'}).cnode(Strophe.xmlElement('body', '' ,msg));

connection.send(reply.tree());

也非常简单,先组装好一个消息,然后调用

调用connection.send() 发送消息即可。

Strophe关闭连接

connection.disconnect();

  Strophe的日志和调试

  你可以通过编写一行日志处理函数,来跟踪strophe.

   把这行注释去掉,并在函数实现里写你的日志处理就可以。

   //Strophe.log = function (level, msg) { log('LOG: ' + msg); }; 

   本例子中用的log()函数:

    

function log(msg)

{

   $('#log').append('<div></div>').append(document.createTextNode(msg));

扩展:简单文件系统的实现 / webserver的简单实现 / 简单再生产的实现条件

}

 

  直接把内容输出到本页的一个log div里,注:使用的是jquery的语法。

另外你还可以定义rawInput,rawOutput函数来监控connection上的IO内容,可以看例子中的代码。

   connection.rawInput = rawInput;

   connection.rawOutput = rawOutput;

...

function rawInput(data)

{

   log('RECV: ' + data);

}

function rawOutput(data)

{

   log('SENT: ' + data);

}

本例子中,把发送和接收的内容,也输出到log中。

另外,你还可以使用Firefox的firebug插件来调试Javascript。

运行效果

WebIM WEBIM的简单实现

本文完整Source下载

//TODO 

GOOGLE DOCS 不提供上传文件功能?我得找个地址。。。

webimclient.zip

参考手册

[1] XEP 0124 

[2] The homepage for Strophe is http://code.stanziq.com/strophe

[3] Strophe 的API Doc 

扩展:简单文件系统的实现 / webserver的简单实现 / 简单再生产的实现条件

三 : SAP中生产订单收货单的汇总打印版本如何实现?

SAP中并没有默认配置成品收货单的打印问题已经解决,如果你在后台配置中去找,只能找到wf01wf02 , 没有跟采购订单的收货单版本3相对应的。
事实上很多公司的成品收货,一次收一批,因此直接用wf02即可以。但是如果一次收货是好多个批次呢?
(MB31 做一次收货,包括好几个批次,就会有好几行,kf01 02都会打印几张纸,特别浪费纸张)
这正是我碰到的情形。怎么办呢?
我很自然的想到利用we03的配置来实现。但是没有想到好的组合方法。
在群友Albert的帮助下,找到了一种组合,最后解决了这个问题,现总结如下:
1, mn21 创建一个新的输出条件记录,输出类型选择 WE03,然后选择交易类型为WF,版本为3
在下面再加上1,2,6三种条件记录,媒体1,然后是4,语言ZH,记得每一行点进去配置好打印机和相关配置(如勾上立即打印,要不要打印后释放自己定)
2, se71 修改一下 WESCHEINVERS3这个收货单的格式版本(注意语言版本,如果提示ZH版不存在,就自己另存为新建一个,名称前面加个Z字母,否则无法继续),我就是用ZWESCHEINVERS3这个表单来做的。
修改表单时,在页头页尾都不能使用MSEG的表字段,意味着在页头页尾都不能显示生产订单号码。
但是在主窗口的文本元素中,可以加上MSEG-AUFNR这个字段,也就是订单号了。顺便在页头页尾的文本元素中加上订单号的抬头,也可以加上MKPF-BKTXT的物料凭证抬头文本(我是用来记录生产班组编号)。

到此,这个问题就解决了。

四 : 学习小实例--滚动条的简单实现

效果:

代码:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>huanhangtiao</title> <style> a{ 	width:17px; 	height:20px; 	font:12px/20px "宋体"; border:1px solid #e0e1e2; 	display:inline-block; 	text-align:center; 	color: #2052a3; 	} 	.shang{ 	width:64px; 	} 	a:hover,.active{ 	background-color:#1f3a87; 	color:#fff; 	} </style> </head> <body> <div class=""> <a class="shang">上一页</a> <a>1</a> <a>2</a> <a class="active">3</a> <a>4</a> <a>5</a> <a>6</a> <a>7</a> <a>8</a> <a>9</a> <a class="shang">下一页</a> </div> </body> </html> 

以上就是小编为大家带来的学习小实例--滚动条的简单实现全部内容了,希望大家多多支持61阅读~

本文标题:简单再生产的实现条件-PHP实例:用PHP简单实现多条件查询
本文地址: http://www.61k.com/1076244.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1