[php] Smarty模板中上一篇下一篇

//引入下一篇 上一篇的文章=====

if (!empty ($_GET[id])) {
$sql_fenye = “select * from p_newsbase where  id>’$_GET[id]‘ order by id asc limit 0,1″;//复合查询
$query_fenye = $db->query($sql_fenye);
$sm_fenye = $db->fetch_array($query_fenye);//取得新闻相关信息

// print_r ($sm_fenye);

$smarty->assign(“sm_fenye”, $sm_fenye);

$sql_fenye1 = “select * from p_newsbase where  id<’$_GET[id]‘ order by id desc limit 0,1″;//复合查询
$query_fenye1 = $db->query($sql_fenye1);
$sm_fenye1 = $db->fetch_array($query_fenye1);//取得新闻相关信息

//print_r ($sm_fenye1);

$smarty->assign(“sm_fenye1″, $sm_fenye1);
}

前端模块展示:         <div> <a href=”/view.php?id={$sm_fenye[0]}”>上一页:{$sm_fenye[2]}</a> —<a href=”/view.php?id={$sm_fenye1[0]}”> 下一页: {$sm_fenye1[2]} </a>
</div>

php类似于javascript encodeURI和decodeURI解码的方法-解决ajax中文乱码

在ajax中解决中文乱码,get方式的解决访问中的中文乱码问题时用得着。

<script language=”javascript”>
var a = encodeURI(“电影”);
alert(a);
var b = decodeURI(a);
alert(b)
</script>

<?php
$a = urlencode(iconv(“gb2312″, “UTF-8″, “电影”));    //等同于javascript encodeURI(“电影”);
echo $a;

//等同于javascript decodeURI(“%E7%94%B5%E5%BD%B1″);
$b = iconv(“utf-8″,”gb2312″,urldecode(“%E7%94%B5%E5%BD%B1″));
echo $b;

//如果编码是UTF-8的话就可以直接用urlencode 或 urldecode 转换!
?>

iconv(“utf-8″,”gb2312″,urldecode(“%E7%94%B5%E5%BD%B1″));

建议写作:

iconv(“utf-8″,”gb2312//IGNORE”,urldecode(“%E7%94%B5%E5%BD%B1″));

ignore的意思是忽略转换时的错误,iconv在转换字符”—”到gb2312时可能会出错,如果没有ignore参数,所有该字符后面的字符串都无法被转换。

当然mb_convert_encoding没有这个bug,写法:

mb_convert_encoding($FormValues['a'], “gb2312″, “UTF-8″);

但是需要先enable mbstring 扩展库。

php分页类,超强悍!

<?php
class Pager
{
var $_perPage; //每一页记录数

var $_totalItems; //总记录数

var $_totalPages; //总共页数

var $_currentPage; // 当前页序号

var $_listStart; //当前头条记录ID

var $_listEnd; //当前最后条记录ID

var $_pageStart; //第一页

var $_pageEnd; //最后页

var $_listPage; //循环显示当前分页列表

var $_pageData; //当前要显示的记录

var $_linkData; //页面传递的变量

var $_startId; //从数据库读出的启始id

function pager($_totalItems, $_perPage, $_linkData)
{
$this->_currentPage = max((int)@$_GET['pageId'], 1); //当前的页序号

$this->_perPage = $_perPage; //每一页记录数

$this->_totalItems = $_totalItems; //总记录数

$this->_totalPages = ceil($this->_totalItems / $this->_perPage); //总页数

$this->_linkData = $_linkData; //传递的变量

$this->_listStart = ($this->_currentPage – 1) * $this->_perPage + 1; //当前头条记录ID

$this->_listEnd = ($this->_currentPage != $this->_totalPages) ? $this->_currentPage * $this->_perPage : $this->_totalItems; //当前最后条记录ID

$this->_startId = $this->_listStart -1; //从数据库读出的启始id

}
function startId() // 从数据库读出的启始id

{
return $this->_startId;
}
function totalItems() // 总记录数

{
return $this->_totalItems;
}
function totalPages() // 总页数

{
return $this->_totalPages;
}
function listStart() // 当前头条记录ID

{
return $this->_listStart;
}
function listEnd() // 当前最后条记录ID

{
return $this->_listEnd;
}
function currentPage() // 当前页

{
return $this->_currentPage;
}
function pageStart() // 第一页

{
return $this->_pageStart = “<a href=” . $_SERVER['PHP_SELF'] . ($this->_linkData) . “&pageId=1><FONT title=首页 face=webdings>9</FONT></a>”;
}
function pageEnd() // 最后页

{
return $this->_pageEnd = “<a href=” . $_SERVER['PHP_SELF'] . ($this->_linkData) . “&pageId=” . $this->_totalPages . “><FONT title=尾页 face=webdings>:</FONT></a>”;
}
function upPage() // 上一页

{
if ($this->_currentPage > 1 and $this->_currentPage <= $this->_totalPages)
{
$up = $this->_currentPage-1;
return $this->_upPage = “<a href=” . $_SERVER['PHP_SELF'] . ($this->_linkData) . “&pageId=” . $up . “><FONT title=上页 face=webdings>7</FONT></a>”;
}
}
function downPage() // 下一页

{
$down = $this->_currentPage + 1;
if ($this->_currentPage < $this->_totalPages)
return $this->_downPage = “<a href=” . $_SERVER['PHP_SELF'] . ($this->_linkData) . “&pageId=” . $down . “><FONT title=下页 face=webdings>8</FONT></a>”;
}
function listPage() // 循环显示当前分页列表

{
if ($this->_currentPage <= 5 and $this->_currentPage != “”)
{
$start = 1;
if ($this->_totalPages < 10) $end = $this->_totalPages;
else $end = 10;
} elseif (($this->_currentPage + 5) > $this->_totalPages)
{
$start = $this->_currentPage – 5;
$end = $this->_totalPages;
}
else
{
$start = $this->_currentPage – 4;
$end = $this->_currentPage + 5;
}
for($i = $start; $i <= $end; $i++)
{
$this->_listPage .= “<a href=” . $_SERVER['PHP_SELF'] . ($this->_linkData) . “&pageId=” . $i . “>” . $i . “</a> “;
}
return $this->_listPage;
}
function jumpPage() // 跳转

{
$this->_jumpPage = “<table border=0 width=100% class=’fonts’><tr><td>跳转 <select name=’pageId’ style=’height=14px’ onchange=\”location=’” . $_SERVER['PHP_SELF'] . ($this->_linkData) . “&pageId=’+this.value;\”>”; //页面跳转

for($i = 1; $i <= $this->_totalPages; $i++)
{
if ($i == $this->_currentPage) $selected = “selected”;
$this->_jumpPage .= “<option value=’$i’ $selected>$i</option>”;
unset($selected);
}
return $this->_jumpPage .= “</select> 页</td></tr></table>”;
}
}
// /范例

$totalItems = 1100; //总记录

$page = new Pager($totalItems, 20, “?a=b&c=6″);
for($i = $page->startId(); $i <= $page->startId() + 20; $i++)
{
$data[] = array($i, $i + 1);
}
echo “当前开始ID:” . $listStart = $page->listStart();
echo “<br>”;
echo “当前结束ID:” . $listEnd = $page->listEnd();
echo “<br>”;
echo “第一页:” . $pageStart = $page->pageStart();
echo “<br>”;
echo “最后页:” . $pageEnd = $page->pageEnd();
echo “<br>”;
echo “上一页:” . $upPage = $page->upPage();
echo “<br>”;
echo “下一页:” . $downPage = $page->downPage();
echo “<br>”;
echo “列表显示:” . $listPage = $page->listPage();
echo “<br>”;
echo “跳转页:” . $jumpPage = $page->jumpPage();
echo “<br>”;
// print_r($data);

?>

php+mysql实现新闻系统中“上一条”,“下一条”的简单程序

$colname_rs = “-1″;
if (isset($_GET['id'])) {
$colname_rs = $_GET['id'];
}
mysql_select_db($database_conn, $conn);
$query_rs = sprintf(“SELECT * FROM news WHERE id = %s”, GetSQLValueString($colname_rs, “int”));
$rs = mysql_query($query_rs, $conn) or die(mysql_error());
$row_rs = mysql_fetch_assoc($rs);
$totalRows_rs = mysql_num_rows($rs);
$next_sql=”SELECT * FROM news WHERE id &gt;$colname_rs ORDER BY id ASC LIMIT 1  “;
$rsnext= mysql_query($next_sql, $conn) or die(mysql_error());
$row_next = mysql_fetch_assoc($rsnext);
$prev_sql=”SELECT * FROM news WHERE id &lt;$colname_rs ORDER BY id DESC LIMIT 1  “;
$rsprev= mysql_query($prev_sql, $conn) or die(mysql_error());
$row_prev = mysql_fetch_assoc($rsprev);
$max_sql=”SELECT MAX(id) FROM news”;
$rsmax = mysql_query($max_sql, $conn) or die(mysql_error());
$row_max = mysql_fetch_array($rsmax);
$min_sql=”SELECT MIN(id) FROM news”;
$rsmin = mysql_query($min_sql, $conn) or die(mysql_error());
$row_min = mysql_fetch_array($rsmin);
$min_id=mysql_result($rsmin,0);
$max_id=mysql_result($rsmax,0);
switch ($colname_rs)
{
case $min_id :
$ptext=”没有了”;
$ntext= “<a href=”\”>”.$row_next['tiltle'].”</a>”;
break;
case $max_id:
$ptext= “<a href=”\”>”.$row_prev['tiltle'].”</a>”;
$ntext=”没有了”;
break;
default:
$ptext= “<a href=”\”>”.$row_prev['tiltle'].”</a>”;
$ntext= “<a href=”\”>”.$row_next['tiltle'].”</a>”;
}
在需要用到的地方引用如下代码:
上一条:<!–?php echo $ptext; ?–>

下一条:<!–?php echo $ntext; ?–>

smarty 的左右定界符与js 相冲突怎么解决

什么是smarty

smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目

二、smarty优点:

1. 速度:采用smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。

2. 编译型:采用smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下)

3. 缓存技术:smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定smarty的cache属性为 true时,在smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文 件。

4. 插件技术:smarty可以自定义插件。插件实际就是一些自定义的函数。

5. 模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。

我是这样做的:

写一个php,然后在写程序的时候直接包含这个php

<?php
require_once $INC.’/Smarty/Smarty.class.php’;
$tpl = new Smarty;

$tpl -> template_dir = $TPL;
$tpl -> compile_dir = $TPL_C;
$tpl -> config_dir   = $INC.’/Smarty/configs’;
$tpl -> cache_dir    = $INC.’/Smarty/cache’;

$tpl -> left_delimiter = ‘<%{‘;//左定界符
$tpl -> right_delimiter = ‘}%>’;//右定界符
?>

$inc 是放置smarty 的文件夹.

然后用$tpl 这个变量引用.即方便又简单

类似:

require_once $COMMON.’/smarrty.php’; //$common 是你放置一个公用程序的文件夹

$tpl = display(‘tpl/index.html’)

在html 里引用:

<%{section name = a loop=$res}%>

<%{$res[a].bbb}%>

<%{/section}%>

以数组形式调出你想要的变量….

smarty 方法引用的千奇百怪, 我以前用过的方法.主要是是为避免和js的标签,相冲突..这样引用的话就避免了与各种标签相冲突………………

$_SERVER — $HTTP_SERVER_VARS [已弃用] — 服务器和执行环境信息

Report a bug 说明
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。这也就意味着大量的此类变量都会在» CGI 1.1 规范中说明,所以应该仔细研究一下。

$HTTP_SERVER_VARS 包含着相同的信息,但它不是一个超全局变量。 (注意 $HTTP_SERVER_VARS 与 $_SERVER 是不同的变量,PHP处理它们的方式不同)

Report a bug 目录
在 $_SERVER 中,你也许能够,也许不能够找到下面的这些元素。注意,如果以命令行方式运行 PHP,下面列出的元素几乎没有有效的(或是没有任何实际意义的)。
‘PHP_SELF’
当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /test.php/foo.bar。__FILE__ 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。
‘argv’
传递给该脚本的参数的数组。当脚本以命令行方式运行时,argv 变量传递给程序 C 语言样式的命令行参数。当通过 GET 方式调用时,该变量包含query string。
‘argc’
包含命令行模式下传递给该脚本的参数的数目(如果运行在命令行模式下)。
‘GATEWAY_INTERFACE’
服务器使用的 CGI 规范的版本;例如,“CGI/1.1”。
‘SERVER_ADDR’
当前运行脚本所在的服务器的 IP 地址。
‘SERVER_NAME’
当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。
‘SERVER_SOFTWARE’
服务器标识字符串,在响应请求时的头信息中给出。
‘SERVER_PROTOCOL’
请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
‘REQUEST_METHOD’
访问页面使用的请求方法;例如,“GET”, “HEAD”,“POST”,“PUT”。
Note:

如果请求方法为 HEAD,PHP 脚本将在发送 Header 头信息之后终止(这意味着在产生任何输出后,不再有输出缓冲)。
‘REQUEST_TIME’
请求开始时的时间戳。从 PHP 5.1.0 起可用。
‘QUERY_STRING’
query string(查询字符串),如果有的话,通过它进行页面访问。
‘DOCUMENT_ROOT’
当前运行脚本所在的文档根目录。在服务器配置文件中定义。
‘HTTP_ACCEPT’
当前请求头中 Accept: 项的内容,如果存在的话。
‘HTTP_ACCEPT_CHARSET’
当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:“iso-8859-1,*,utf-8”。
‘HTTP_ACCEPT_ENCODING’
当前请求头中 Accept-Encoding: 项的内容,如果存在的话。例如:“gzip”。
‘HTTP_ACCEPT_LANGUAGE’
当前请求头中 Accept-Language: 项的内容,如果存在的话。例如:“en”。
‘HTTP_CONNECTION’
当前请求头中 Connection: 项的内容,如果存在的话。例如:“Keep-Alive”。
‘HTTP_HOST’
当前请求头中 Host: 项的内容,如果存在的话。
‘HTTP_REFERER’
引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。
‘HTTP_USER_AGENT’
当 前请求头中 User-Agent: 项的内容,如果存在的话。该字符串表明了访问该页面的用户代理的信息。一个典型的例子是:Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。除此之外,你可以通过 get_browser() 来使用该值,从而定制页面输出以便适应用户代理的性能。
‘HTTPS’
如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。
Note: 注意当使用 IIS 上的 ISAPI 方式时,如果不是通过 HTTPS 协议被访问,这个值将为 off。

‘REMOTE_ADDR’
浏览当前页面的用户的 IP 地址。
‘REMOTE_HOST’
浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。
Note: 你的服务器必须被配置以便产生这个变量。例如在 Apache 中,你需要在 httpd.conf 中设置 HostnameLookups On 来产生它。参见 gethostbyaddr()。

‘REMOTE_PORT’
用户机器上连接到 Web 服务器所使用的端口号。
‘SCRIPT_FILENAME’
当前执行脚本的绝对路径。

Note:

如果在命令行界面(Command Line Interface, CLI)使用相对路径执行脚本,例如 file.php 或 ../file.php,那么 $_SERVER['SCRIPT_FILENAME'] 将包含用户指定的相对路径。

‘SERVER_ADMIN’
该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。
‘SERVER_PORT’
Web 服务器使用的端口。默认值为 “80”。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。
‘SERVER_SIGNATURE’
包含了服务器版本和虚拟主机名的字符串。
‘PATH_TRANSLATED’
当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
Note: 自 PHP 4.3.2 起,PATH_TRANSLATED 在 Apache 2 SAPI 模式下不再和 Apache 1 一样隐含赋值,而是若 Apache 不生成此值,PHP 便自己生成并将其值放入 SCRIPT_FILENAME 服务器常量中。这个修改遵守了 CGI 规范,PATH_TRANSLATED 仅在 PATH_INFO 被定义的条件下才存在。 Apache 2 用户可以在 httpd.conf 中设置 AcceptPathInfo = On 来定义 PATH_INFO。

‘SCRIPT_NAME’
包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 常量包含当前脚本(例如包含文件)的完整路径和文件名。
‘REQUEST_URI’
URI 用来指定要访问的页面。例如 “/index.html”。
‘PHP_AUTH_DIGEST’
当作为 Apache 模块运行时,进行 HTTP Digest 认证的过程中,此变量被设置成客户端发送的“Authorization” HTTP 头内容(以便作进一步的认证操作)。
‘PHP_AUTH_USER’
当 PHP 运行在 Apache 或 IIS(PHP 5 是 ISAPI)模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
‘PHP_AUTH_PW’
当 PHP 运行在 Apache 或 IIS(PHP 5 是 ISAPI)模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
‘AUTH_TYPE’
当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。
‘PATH_INFO’
包含由客户端提供的、跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息,如果存在的话。例如,如果当前脚本是通过 URL http://www.example.com/php/path_info.php/some/stuff?foo=bar 被访问,那么 $_SERVER['PATH_INFO'] 将包含 /some/stuff。
‘ORIG_PATH_INFO’
在被 PHP 处理之前,“PATH_INFO” 的原始版本。

Report a bug 更新日志
版本 说明
4.1.0 引入 $_SERVER,弃用 $HTTP_SERVER_VARS。
Report a bug 范例

Example #1 $_SERVER 范例

<?php
echo $_SERVER['SERVER_NAME'];
?>
以上例程的输出类似于:

www.example.com

Report a bug 注释
Note:

“Superglobal”也称为自动化的全局变量。这就表示其在脚本的所有作用域中都是可用的。不需要在函数或方法中用 global $variable; 来访问它。

PHP日期函数,获取前天、昨天、今天、明天、后天

提示:你可以先修改部分代码再运行。

银行,游戏中常见的密钥口令卡的JS实现

提示:你可以先修改部分代码再运行。

一步长切换和分组切换级别的手动切换焦点图

提示:你可以先修改部分代码再运行。

一步长手动焦点图切换

提示:你可以先修改部分代码再运行。